Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 6c5ded1

Browse files
author
Vadim Kotlinov
authored
Localization & Project templates (only as API) (#29)
feat: app localization & projects templates
1 parent 65cd47b commit 6c5ded1

File tree

12 files changed

+129
-37
lines changed

12 files changed

+129
-37
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.codee.app.core
2+
3+
import com.codee.app.resources.locale.strings.AppStrings
4+
5+
object CodeeStrings : AppStrings()

‎app-core/src/main/java/com/codee/app/core/plugins/plugins.kt‎

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,41 @@
11
package com.codee.app.core.plugins
22

3+
import com.codee.app.core.CodeeStrings
34
import com.codee.app.core.delegates.oneTimeSet
45
import com.codee.app.core.extensions.darkThemeColors
56
import com.codee.app.core.extensions.lightThemeColors
67
import com.codee.app.core.extensions.toComposeColors
78
import com.codee.app.plugins.api.Plugin
89
import com.codee.app.plugins.api.PluginApi
910
import com.codee.app.plugins.api.PluginLocalization
10-
import com.codee.app.plugins.api.manager.AppManager
11-
import com.codee.app.plugins.api.manager.PluginApiManager
12-
import com.codee.app.plugins.api.manager.PluginLocalizationManager
13-
import com.codee.app.plugins.api.manager.ThemeManager
11+
import com.codee.app.plugins.api.container.*
12+
import com.codee.app.plugins.api.container.PluginApiContainer
13+
import com.codee.app.plugins.api.container.PluginLocalizationContainer
14+
import com.codee.app.plugins.api.container.ThemeContainer
1415
import com.codee.app.plugins.api.objects.PluginMetadata
1516
import com.codee.app.resources.locale.Locale
1617
import com.codee.app.resources.theme.DarkThemeColors
1718
import com.codee.app.resources.theme.LightThemeColors
1819
import kotlinx.coroutines.flow.MutableSharedFlow
20+
import com.codee.app.plugins.api.container.ProjectTemplatesContainer
21+
import com.codee.app.resources.locale.strings.AppStrings
1922

2023
class Plugin : Plugin {
2124
override var metadata: PluginMetadata by oneTimeSet()
22-
override val app: AppManager = AppManager
23-
override val apiManager: PluginApiManager = PluginApiManager
24-
override val localizationManager: PluginLocalizationManager = PluginLocalizationManager
25+
override val app: AppContainer = AppManager
26+
override val apis: PluginApiContainer = PluginApiContainer
27+
override val localizations: PluginLocalizationContainer = PluginLocalizationContainer
28+
override val templates: ProjectTemplatesContainer = ProjectTemplatesContainer
2529
}
2630

27-
private object PluginApiManager : PluginApiManager {
31+
private object ProjectTemplatesContainer : ProjectTemplatesContainer {
32+
override val categories: MutableSharedFlow<ProjectsCategory> = MutableSharedFlow()
33+
override fun <T : ProjectsCategory> register(instance: T) {
34+
categories.tryEmit(instance)
35+
}
36+
}
37+
38+
private object PluginApiContainer : PluginApiContainer {
2839
override val apis: MutableSharedFlow<PluginApi> = MutableSharedFlow()
2940

3041
override fun <T : PluginApi> register(instance: T): Boolean {
@@ -38,7 +49,7 @@ private object PluginApiManager : PluginApiManager {
3849

3950
}
4051

41-
private object PluginLocalizationManager : PluginLocalizationManager {
52+
private object PluginLocalizationContainer : PluginLocalizationContainer {
4253
override val localizations: MutableSharedFlow<PluginLocalization> = MutableSharedFlow()
4354

4455
override fun <T : PluginLocalization> register(instance: T): Boolean {
@@ -51,14 +62,15 @@ private object PluginLocalizationManager : PluginLocalizationManager {
5162
}
5263
}
5364

54-
private object AppManager : AppManager {
65+
private object AppManager : AppContainer {
5566
override val versionName: String = "1.0"
5667
override val versionCode: Int = 1
5768
override val locale: Locale = Locale.en
58-
override val themeManager: ThemeManager = ThemeManager
69+
override val strings: AppStrings = CodeeStrings
70+
override val themeContainer: ThemeContainer = ThemeContainer
5971
}
6072

61-
private object ThemeManager : ThemeManager {
73+
private object ThemeContainer : ThemeContainer {
6274
override var currentLightThemeColors: LightThemeColors = LightThemeColors()
6375
set(value) {
6476
lightThemeColors.value = value.toComposeColors()

‎app/src/main/java/com/codee/app/screens/projects/ProjectsView.kt‎

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,21 @@ package com.codee.app.screens.projects
33
import androidx.compose.foundation.Image
44
import androidx.compose.foundation.layout.*
55
import androidx.compose.foundation.lazy.LazyColumn
6-
import androidx.compose.foundation.lazy.LazyRow
76
import androidx.compose.foundation.lazy.items
87
import androidx.compose.foundation.selection.selectable
98
import androidx.compose.material.*
109
import androidx.compose.material.icons.Icons
1110
import androidx.compose.material.icons.outlined.Add
12-
import androidx.compose.material.icons.outlined.Create
1311
import androidx.compose.runtime.Composable
1412
import androidx.compose.ui.Alignment
1513
import androidx.compose.ui.Modifier
1614
import androidx.compose.ui.draw.alpha
1715
import androidx.compose.ui.res.painterResource
18-
import androidx.compose.ui.text.font.FontStyle
19-
import androidx.compose.ui.tooling.preview.Preview
2016
import androidx.compose.ui.unit.dp
2117
import androidx.compose.ui.unit.sp
2218
import com.codee.R
19+
import com.codee.app.core.CodeeStrings
2320
import com.codee.app.core.extensions.localize
24-
import com.codee.app.resources.locale.strings.AppStrings
25-
import com.codee.app.resources.locale.strings.CodeeStrings
26-
import com.google.android.material.color.MaterialColors
2721

2822
@Composable
2923
fun ProjectsView() = Scaffold(

‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/Plugin.kt‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.codee.app.plugins.api
22

3-
import com.codee.app.plugins.api.manager.AppManager
4-
import com.codee.app.plugins.api.manager.PluginApiManager
5-
import com.codee.app.plugins.api.manager.PluginLocalizationManager
3+
import com.codee.app.plugins.api.container.*
64
import com.codee.app.plugins.api.objects.PluginMetadata
75
import com.codee.app.plugins.api.objects.PluginMetadataBuilder
86

@@ -16,17 +14,22 @@ public interface Plugin {
1614
/**
1715
* Application manager.
1816
*/
19-
public val app: AppManager
17+
public val app: AppContainer
2018

2119
/**
2220
* Plugins api manager.
2321
*/
24-
public val apiManager:PluginApiManager
22+
public val apis:PluginApiContainer
2523

2624
/**
2725
* Plugins localization manager.
2826
*/
29-
public val localizationManager: PluginLocalizationManager
27+
public val localizations: PluginLocalizationContainer
28+
29+
/**
30+
* Projects manager.
31+
*/
32+
public val templates: ProjectTemplatesContainer
3033
}
3134

3235
public fun Plugin.metadata(block: PluginMetadataBuilder.() -> Unit) {

‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/manager/AppManager.kt‎ renamed to ‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/container/AppContainer.kt‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package com.codee.app.plugins.api.manager
1+
package com.codee.app.plugins.api.container
22

33
import com.codee.app.resources.locale.Locale
4+
import com.codee.app.resources.locale.strings.AppStrings
45

5-
public interface AppManager {
6+
public interface AppContainer {
67
/**
78
* Version name of application.
89
*/
@@ -18,8 +19,13 @@ public interface AppManager {
1819
*/
1920
public val locale: Locale
2021

22+
/**
23+
* Current application strings.
24+
*/
25+
public val strings: AppStrings
26+
2127
/**
2228
* Application theme manager.
2329
*/
24-
public val themeManager:ThemeManager
30+
public val themeContainer:ThemeContainer
2531
}

‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/manager/PluginApiManager.kt‎ renamed to ‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/container/PluginApiContainer.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.codee.app.plugins.api.manager
1+
package com.codee.app.plugins.api.container
22

33
import com.codee.app.plugins.api.PluginApi
44
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.first
99
import kotlinx.coroutines.flow.onEach
1010
import kotlinx.coroutines.launch
1111

12-
public interface PluginApiManager {
12+
public interface PluginApiContainer {
1313
/**
1414
* All registered plugins api.
1515
*/

‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/manager/PluginLocalizationManager.kt‎ renamed to ‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/container/PluginLocalizationContainer.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.codee.app.plugins.api.manager
1+
package com.codee.app.plugins.api.container
22

33
import com.codee.app.plugins.api.PluginLocalization
44
import kotlinx.coroutines.flow.SharedFlow
55

6-
public interface PluginLocalizationManager {
6+
public interface PluginLocalizationContainer {
77
/**
88
* All registered plugins api.
99
*/
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.codee.app.plugins.api.container
2+
3+
import com.codee.app.plugins.api.PluginApi
4+
import com.codee.app.resources.locale.strings.LocalizedString
5+
import kotlinx.coroutines.flow.SharedFlow
6+
7+
/**
8+
* Project Templates Container.
9+
* Contains projects categories (that in their side, consist of templates).
10+
*/
11+
public interface ProjectTemplatesContainer {
12+
public val categories: SharedFlow<ProjectsCategory>
13+
14+
/**
15+
* Registers [T] as category.
16+
* @param instance - instance of implemented [T].
17+
*/
18+
public fun <T : ProjectsCategory> register(instance: T)
19+
}
20+
21+
public interface ProjectsCategory : PluginApi {
22+
/**
23+
* Project templates inside category.
24+
* Plugins that registers category should provide api (if needed) to extend it (by making it `mutable` or by
25+
* additional method).
26+
*/
27+
public val templates: List<ProjectsCategory>
28+
}
29+
30+
/**
31+
* Project template info.
32+
* @param name - localized name of template.
33+
* @param description - localized description of template.
34+
* @param fields - fields that should be specified by user.
35+
*/
36+
@Suppress("MemberVisibilityCanBePrivate")
37+
public class ProjectTemplate(
38+
public val name: LocalizedString,
39+
public val description: LocalizedString,
40+
public val fields: List<Field>
41+
)
42+
43+
public sealed interface Field {
44+
public sealed interface Input : Field {
45+
public val hint: LocalizedString
46+
public class TextInput(override val hint: LocalizedString) : Input
47+
public class NumberInput(override val hint: LocalizedString) : Input
48+
}
49+
public class Switch(public val text: LocalizedString) : Field
50+
}

‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/manager/ThemeManager.kt‎ renamed to ‎plugins-api/src/main/kotlin/com/codee/app/plugins/api/container/ThemeContainer.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.codee.app.plugins.api.manager
1+
package com.codee.app.plugins.api.container
22

33
import com.codee.app.resources.theme.DarkThemeColors
44
import com.codee.app.resources.theme.LightThemeColors
55

6-
public interface ThemeManager {
6+
public interface ThemeContainer {
77
/**
88
* Current light theme colors.
99
*/
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@file:Suppress("MemberVisibilityCanBePrivate")
2+
3+
package com.codee.app.plugins.results
4+
5+
import com.codee.app.resources.locale.strings.LocalizedString
6+
7+
public sealed interface ValidateResult {
8+
/**
9+
* Marks that validation succeed and there no problem.
10+
*/
11+
public object Success : ValidateResult
12+
13+
/**
14+
* Marks that validation returned warning (not critical, but need to be reviewed).
15+
* @param message - warning message.
16+
*/
17+
public class Warning(public val message: LocalizedString) : ValidateResult
18+
19+
/**
20+
* Marks that validation returned error (critical, should be fixed).
21+
* @param message - warning message.
22+
*/
23+
public class Error(public val message: LocalizedString) : ValidateResult
24+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /