8 |
9 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /release
3 | /debug
--------------------------------------------------------------------------------
/app/debug/app-debug.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/debug/app-debug.apk
--------------------------------------------------------------------------------
/app/debug/output-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "artifactType": {
4 | "type": "APK",
5 | "kind": "Directory"
6 | },
7 | "applicationId": "ru.aleshin.timeplanner.debug",
8 | "variantName": "debug",
9 | "elements": [
10 | {
11 | "type": "SINGLE",
12 | "filters": [],
13 | "attributes": [],
14 | "versionCode": 29,
15 | "versionName": "0.9.0",
16 | "outputFile": "app-debug.apk"
17 | }
18 | ],
19 | "elementType": "File",
20 | "minSdkVersionForDexing": 24
21 | }
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app/release/app-release.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/release/app-release.apk
--------------------------------------------------------------------------------
/app/release/app-release.apk.idsig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/release/app-release.apk.idsig
--------------------------------------------------------------------------------
/app/release/baselineProfiles/0/app-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/release/baselineProfiles/0/app-release.dm
--------------------------------------------------------------------------------
/app/release/baselineProfiles/1/app-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/release/baselineProfiles/1/app-release.dm
--------------------------------------------------------------------------------
/app/release/output-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "artifactType": {
4 | "type": "APK",
5 | "kind": "Directory"
6 | },
7 | "applicationId": "ru.aleshin.timeplanner",
8 | "variantName": "release",
9 | "elements": [
10 | {
11 | "type": "SINGLE",
12 | "filters": [],
13 | "attributes": [],
14 | "versionCode": 29,
15 | "versionName": "0.9.0",
16 | "outputFile": "app-release.apk"
17 | }
18 | ],
19 | "elementType": "File",
20 | "baselineProfiles": [
21 | {
22 | "minApi": 28,
23 | "maxApi": 30,
24 | "baselineProfiles": [
25 | "baselineProfiles/1/app-release.dm"
26 | ]
27 | },
28 | {
29 | "minApi": 31,
30 | "maxApi": 34,
31 | "baselineProfiles": [
32 | "baselineProfiles/0/app-release.dm"
33 | ]
34 | }
35 | ],
36 | "minSdkVersionForDexing": 24
37 | }
--------------------------------------------------------------------------------
/app/src/androidTest/java/ru/aleshin/timeplanner/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.timeplanner
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.timeplanner", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/fdroid/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/fdroid/java/ru/aleshin/timeplanner/data/AnalyticsServiceImpl.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.timeplanner.domain
17 |
18 | import ru.aleshin.core.utils.platform.services.AnalyticsService
19 |
20 | /**
21 | * @author Stanislav Aleshin on 13.04.2025.
22 | */
23 | class AnalyticsServiceImpl : AnalyticsService {
24 | override fun trackEvent(name: String, eventParams: Map) = Unit
25 | override fun initializeService(context: Context) = Unit
26 | }
--------------------------------------------------------------------------------
/app/src/huawei/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/app/src/main/assets/database/categories_prepopulate.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/assets/database/categories_prepopulate.db
--------------------------------------------------------------------------------
/app/src/main/assets/database/settings_prepopulated.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/assets/database/settings_prepopulated.db
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/ic_planner_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/ic_planner_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/ru/aleshin/timeplanner/di/annotation/Navigations.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.timeplanner.di.annotation
17 |
18 | import javax.inject.Qualifier
19 |
20 | /**
21 | * @author Stanislav Aleshin on 18.02.2023.
22 | */
23 | @Qualifier
24 | annotation class GlobalNavigation
25 |
26 | @Qualifier
27 | annotation class TabNavigation
28 |
--------------------------------------------------------------------------------
/app/src/main/java/ru/aleshin/timeplanner/domain/common/MainFailures.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.timeplanner.domain.common
17 |
18 | import kotlinx.parcelize.Parcelize
19 | import ru.aleshin.core.utils.functional.DomainFailures
20 |
21 | /**
22 | * @author Stanislav Aleshin on 14.02.2023.
23 | */
24 | @Parcelize
25 | sealed class MainFailures : DomainFailures {
26 | data class OtherError(val throwable: Throwable) : MainFailures()
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/ru/aleshin/timeplanner/domain/entities/TimeTasks.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.timeplanner.domain.entities
17 |
18 | import kotlinx.serialization.Serializable
19 | import ru.aleshin.core.domain.entities.schedules.TimeTask
20 |
21 | /**
22 | * @author Stanislav Aleshin on 28.04.2024.
23 | */
24 | @Serializable
25 | data class TimeTasks(val tasks: List = emptyList())
--------------------------------------------------------------------------------
/app/src/main/java/ru/aleshin/timeplanner/presentation/ui/main/contract/MainDeps.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.timeplanner.presentation.ui.main.contract
17 |
18 | import kotlinx.parcelize.Parcelize
19 | import ru.aleshin.core.utils.platform.screenmodel.ScreenDependencies
20 |
21 | /**
22 | * @author Stanislav Aleshin on 16.11.2024.
23 | */
24 | @Parcelize
25 | data class MainDeps(val screenTarget: DeepLinkTarget) : ScreenDependencies
--------------------------------------------------------------------------------
/app/src/main/res/drawable/circular_background.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rouned_background_16_dp.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rouned_background_24_dp.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rouned_background_8_dp.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/stoke_rouned_background.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 | #FCFCFC
18 | #201A1B
19 | #0D91DA
20 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 | TimePlanner
18 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
21 |
--------------------------------------------------------------------------------
/app/src/rustore/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/config/detekt/detekt.yml:
--------------------------------------------------------------------------------
1 | naming:
2 | FunctionNaming:
3 | ignoreAnnotated: ['Composable']
4 | MatchingDeclarationName:
5 | mustBeFirst: false
6 | complexity:
7 | LongMethod:
8 | threshold: 100
9 | LongParameterList:
10 | functionThreshold: 25
11 | constructorThreshold: 15
12 | TooManyFunctions:
13 | ignoreAnnotatedFunctions: ['Preview']
14 | formatting:
15 | FinalNewline:
16 | insertFinalNewLine: false
17 | style:
18 | MagicNumber:
19 | ignorePropertyDeclaration: true
20 | ignoreCompanionObjectPropertyDeclaration: true
21 | UnusedPrivateMember:
22 | ignoreAnnotated: ['Preview']
23 | NewLineAtEndOfFile:
24 | active: false
--------------------------------------------------------------------------------
/core/data/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/core/data/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/data/consumer-rules.pro
--------------------------------------------------------------------------------
/core/data/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/core/data/src/androidTest/java/ru/aleshin/core/data/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.data
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("ru.aleshin.core.data.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/core/data/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/core/data/src/main/java/ru/aleshin/core/data/mappers/schedules/DailyScheduleDataMapper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.data.mappers.schedules
17 |
18 | import ru.aleshin.core.data.models.schedules.DailyScheduleEntity
19 | import ru.aleshin.core.domain.entities.schedules.Schedule
20 |
21 | /**
22 | * @author Stanislav Aleshin on 25.02.2023.
23 | */
24 | fun Schedule.mapToData() = DailyScheduleEntity(date = date)
25 |
--------------------------------------------------------------------------------
/core/data/src/main/java/ru/aleshin/core/data/models/schedules/DailyScheduleEntity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.data.models.schedules
17 |
18 | import androidx.room.Entity
19 | import androidx.room.PrimaryKey
20 |
21 | /**
22 | * @author Stanislav Aleshin on 21.02.2023.
23 | */
24 | @Entity(tableName = "dailySchedules")
25 | data class DailyScheduleEntity(
26 | @PrimaryKey val date: Long,
27 | )
28 |
--------------------------------------------------------------------------------
/core/data/src/test/java/ru/aleshin/core/data/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.data
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/core/domain/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/core/domain/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/domain/consumer-rules.pro
--------------------------------------------------------------------------------
/core/domain/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/core/domain/src/androidTest/java/ru/aleshin/core/domain/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.domain
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("ru.aleshin.core.domain.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/core/domain/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/categories/DefaultCategoryType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.categories
17 |
18 | /**
19 | * @author Stanislav Aleshin on 15.04.2023.
20 | */
21 | enum class DefaultCategoryType {
22 | WORK,
23 | REST,
24 | SPORT,
25 | SLEEP,
26 | CULTURE,
27 | AFFAIRS,
28 | TRANSPORT,
29 | STUDY,
30 | EAT,
31 | ENTERTAINMENTS,
32 | EMPTY,
33 | HYGIENE,
34 | HEALTH,
35 | SHOPPING,
36 | OTHER,
37 | }
38 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/categories/MainCategory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.categories
17 |
18 | import kotlinx.serialization.Serializable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 23.02.2023.
22 | */
23 | @Serializable
24 | data class MainCategory(
25 | val id: Int = 0,
26 | val customName: String? = null,
27 | val default: DefaultCategoryType? = DefaultCategoryType.EMPTY,
28 | )
29 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/categories/SubCategory.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.categories
17 |
18 | import kotlinx.serialization.Serializable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 21.02.2023.
22 | */
23 | @Serializable
24 | data class SubCategory(
25 | val id: Int = 0,
26 | val mainCategory: MainCategory = MainCategory(),
27 | val name: String? = null,
28 | val description: String? = null,
29 | )
30 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/schedules/DailyScheduleStatus.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.schedules
17 |
18 | /**
19 | * @author Stanislav Aleshin on 21.02.2023.
20 | */
21 | enum class DailyScheduleStatus {
22 | REALIZED, ACCOMPLISHMENT, PLANNED
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/schedules/TaskPriority.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.schedules
17 |
18 | import kotlinx.serialization.Serializable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 16.01.2024.
22 | */
23 | @Serializable
24 | enum class TaskPriority {
25 | STANDARD, MEDIUM, MAX;
26 |
27 | fun isImportant() = this != STANDARD
28 | }
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/schedules/TimeTaskStatus.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.schedules
17 |
18 | /**
19 | * @author Stanislav Aleshin on 21.02.2023.
20 | */
21 | enum class TimeTaskStatus {
22 | PLANNED, RUNNING, COMPLETED
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/CalendarButtonBehavior.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 22.10.2023.
20 | */
21 | enum class CalendarButtonBehavior {
22 | OPEN_CALENDAR, SET_CURRENT_DATE
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/ColorsType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 06.10.2023.
20 | */
21 | enum class ColorsType {
22 | PINK, PURPLE, RED, BLUE
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/LanguageType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 17.02.2023.
20 | */
21 | enum class LanguageType(val code: String?) {
22 | DEFAULT(null), EN("en"), RU("ru"), DE("de"), ES("es"), FA("fa"), FR("fr"), PT_BR("pt-br"), TR("tr"), VN("vn"), PL("pl")
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/Settings.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 17.02.2023.
20 | */
21 | data class Settings(
22 | val themeSettings: ThemeSettings,
23 | val tasksSettings: TasksSettings,
24 | )
25 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/ThemeSettings.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 17.02.2023.
20 | */
21 | data class ThemeSettings(
22 | val language: LanguageType = LanguageType.DEFAULT,
23 | val themeColors: ThemeType = ThemeType.DEFAULT,
24 | val colorsType: ColorsType = ColorsType.PINK,
25 | val isDynamicColorEnable: Boolean = false,
26 | )
27 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/ThemeType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | enum class ThemeType {
22 | DEFAULT, LIGHT, DARK
23 | }
24 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/ViewToggleStatus.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.settings
17 |
18 | /**
19 | * @author Stanislav Aleshin on 18.01.2024.
20 | */
21 | enum class ViewToggleStatus {
22 | EXPANDED, COMPACT
23 | }
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/entities/template/RepeatTimeType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.entities.template
17 |
18 | /**
19 | * @author Stanislav Aleshin on 25.02.2023.
20 | */
21 | enum class RepeatTimeType {
22 | WEEK_DAY,
23 | WEEK_DAY_IN_MONTH,
24 | MONTH_DAY,
25 | YEAR_DAY,
26 | }
27 |
--------------------------------------------------------------------------------
/core/domain/src/main/java/ru/aleshin/core/domain/repository/TasksSettingsRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.domain.repository
17 |
18 | import kotlinx.coroutines.flow.Flow
19 | import ru.aleshin.core.domain.entities.settings.TasksSettings
20 |
21 | /**
22 | * @author Stanislav Aleshin on 15.09.2023.
23 | */
24 | interface TasksSettingsRepository {
25 | fun fetchSettings(): Flow
26 | suspend fun updateSettings(settings: TasksSettings)
27 | }
28 |
--------------------------------------------------------------------------------
/core/domain/src/test/java/ru/aleshin/core/domain/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.domain
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/core/ui/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/core/ui/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/ui/consumer-rules.pro
--------------------------------------------------------------------------------
/core/ui/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/core/ui/src/androidTest/java/ru/aleshin/core/ui/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.ui
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.core.ui.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/core/ui/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/core/ui/src/main/java/ru/aleshin/core/ui/mappers/PriorityMapper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.ui.mappers
17 |
18 | import ru.aleshin.core.domain.entities.schedules.TaskPriority
19 | import ru.aleshin.core.ui.views.MonogramPriority
20 |
21 | /**
22 | * @author Stanislav Aleshin on 16.01.2024.
23 | */
24 | fun TaskPriority.mapToUi() = when (this) {
25 | TaskPriority.STANDARD -> MonogramPriority.STANDARD
26 | TaskPriority.MEDIUM -> MonogramPriority.MEDIUM
27 | TaskPriority.MAX -> MonogramPriority.MAX
28 | }
--------------------------------------------------------------------------------
/core/ui/src/main/java/ru/aleshin/core/ui/theme/material/Shapes.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.ui.theme.material
17 |
18 | import androidx.compose.material3.Shapes
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | val baseShapes = Shapes()
24 |
--------------------------------------------------------------------------------
/core/ui/src/main/java/ru/aleshin/core/ui/views/DurationTemplate.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.ui.views
17 |
18 | /**
19 | * @author Stanislav Aleshin on 03.03.2023.
20 | */
21 | enum class DurationTemplate(val hours: Int, val minutes: Int) {
22 | TEN_MINUTES(0, 10),
23 | THIRTY_MINUTES(0, 30),
24 | ONE_HOUR(1, 0),
25 | FOUR_HOUR(4, 0),
26 | }
27 |
--------------------------------------------------------------------------------
/core/ui/src/main/java/ru/aleshin/core/ui/views/TopAppBarAction.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.ui.views
17 |
18 | import androidx.compose.runtime.Composable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 28.02.2023.
22 | */
23 | interface TopAppBarAction {
24 | val icon: Int? @Composable get
25 | val title: String @Composable get
26 | val isAlwaysShow: Boolean
27 | }
28 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_arrow_drop_down.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_arrow_drop_up.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_arrow_right.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_close.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_culture.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_dashboard.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_home.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_home_outlined.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_keyboard_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_medicine.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_reset.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_sleep.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/ui/src/main/res/drawable/ic_splash.png
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_store.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_study.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/ui/src/main/res/drawable/ic_time_planner_circular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/ui/src/main/res/drawable/ic_time_planner_circular.png
--------------------------------------------------------------------------------
/core/ui/src/test/java/ru/aleshin/core/ui/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.ui
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/core/utils/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/core/utils/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/core/utils/consumer-rules.pro
--------------------------------------------------------------------------------
/core/utils/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/core/utils/src/androidTest/java/ru/aleshin/core/utils/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.core.utils
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.core.utils.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/core/utils/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/di/ApplicationContext.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.di
17 |
18 | import javax.inject.Qualifier
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | @Qualifier
24 | annotation class ApplicationContext
25 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/di/FeatureScope.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.di
17 |
18 | import javax.inject.Scope
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | @Scope
24 | annotation class FeatureScope
25 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/di/ScreenKey.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.di
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 | import javax.inject.Qualifier
20 | import kotlin.reflect.KClass
21 |
22 | /**
23 | * @author Stanislav Aleshin on 19.02.2023.
24 | */
25 | @Qualifier
26 | annotation class ScreenKey(val screen: KClass)
27 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/di/ScreenModelKey.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.di
17 |
18 | import cafe.adriel.voyager.core.model.ScreenModel
19 | import javax.inject.Qualifier
20 | import kotlin.reflect.KClass
21 |
22 | /**
23 | * @author Stanislav Aleshin on 18.02.2023.
24 | */
25 | @Qualifier
26 | annotation class ScreenModelKey(val screenModel: KClass)
27 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/functional/DomainFailures.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.functional
17 |
18 | import android.os.Parcelable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | interface DomainFailures : Parcelable
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/functional/Mapper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.functional
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface Mapper {
22 | fun map(input: I): O
23 | }
24 |
25 | interface ParameterizedMapper {
26 | fun map(input: I, parameter: P): O
27 | }
28 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/functional/TimeFormat.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.functional
17 |
18 | /**
19 | * @author Stanislav Aleshin on 09.06.2023.
20 | */
21 | enum class TimeFormat {
22 | PM, AM
23 | }
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/functional/TimeShiftException.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.functional
17 |
18 | /**
19 | * @author Stanislav Aleshin on 30.03.2023.
20 | */
21 | class TimeShiftException : Exception()
22 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/handlers/ErrorHandler.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.handlers
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface ErrorHandler {
22 | fun handle(throwable: Throwable): E
23 | }
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/navigation/Command.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.navigation
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | sealed class Command {
24 | data class Forward(val screen: Screen) : Command()
25 | data class Replace(val screen: Screen) : Command()
26 | data class ReplaceAll(val screen: Screen) : Command()
27 | object Back : Command()
28 | }
29 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/navigation/CommandListenerManager.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.navigation
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface CommandListenerManager {
22 | fun setListener(listener: CommandListener)
23 | fun removeListener()
24 | }
25 |
26 | typealias CommandListener = (Command) -> Unit
27 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/notifications/parameters/NotificationDefaults.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.notifications.parameters
17 |
18 | /**
19 | * @author Stanislav Aleshin on 28.03.2023.
20 | */
21 | data class NotificationDefaults(
22 | val isSound: Boolean = false,
23 | val isVibrate: Boolean = false,
24 | val isLights: Boolean = false,
25 | )
26 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/notifications/parameters/NotificationProgress.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.notifications.parameters
17 |
18 | /**
19 | * @author Stanislav Aleshin on 28.03.2023.
20 | */
21 | data class NotificationProgress(val value: Int, val max: Int, val isIndeterminate: Boolean)
22 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/communications/state/ViewStateCollect.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.communications.state
17 |
18 | import kotlinx.coroutines.flow.FlowCollector
19 | import ru.aleshin.core.utils.platform.screenmodel.contract.BaseViewState
20 |
21 | /**
22 | * @author Stanislav Aleshin on 14.02.2023.
23 | */
24 | interface ViewStateCollect {
25 | suspend fun collectState(collector: FlowCollector)
26 | }
27 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/Init.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel
17 |
18 | /**
19 | * @author Stanislav Aleshin on 01.06.2023.
20 | */
21 | interface Init {
22 | fun init(deps: D)
23 | }
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/Reducer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel
17 |
18 | import ru.aleshin.core.utils.platform.screenmodel.contract.BaseAction
19 | import ru.aleshin.core.utils.platform.screenmodel.contract.BaseViewState
20 |
21 | /**
22 | * @author Stanislav Aleshin on 18.03.2023.
23 | */
24 | interface Reducer {
25 | suspend fun reduce(action: A, currentState: S): S
26 | }
27 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/ScreenDependencies.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package ru.aleshin.core.utils.platform.screenmodel
18 |
19 | import android.os.Parcelable
20 | import kotlinx.parcelize.Parcelize
21 |
22 |
23 | /**
24 | * @author Stanislav Aleshin on 14.04.2024.
25 | */
26 | interface ScreenDependencies : Parcelable
27 |
28 | @Parcelize
29 | object EmptyDeps : ScreenDependencies
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/contract/BaseAction.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel.contract
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface BaseAction
22 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/contract/BaseEffect.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel.contract
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface BaseUiEffect
22 |
23 | interface EmptyUiEffect : BaseUiEffect
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/contract/BaseEvent.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel.contract
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface BaseEvent
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/screenmodel/contract/BaseViewState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.screenmodel.contract
17 |
18 | import android.os.Parcelable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 14.02.2023.
22 | */
23 | interface BaseViewState : Parcelable
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/services/AnalyticsService.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.services
17 |
18 | /**
19 | * @author Stanislav Aleshin on 13.04.2025.
20 | */
21 | interface AnalyticsService {
22 | fun trackEvent(name: String, eventParams: Map)
23 | fun initializeService()
24 | }
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/services/AppService.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package ru.aleshin.core.utils.platform.services
18 |
19 | /**
20 | * @author Stanislav Aleshin on 11.09.2024.
21 | */
22 | interface AppService {
23 |
24 | val flavor: Flavor
25 |
26 | val isAvailableServices: Boolean
27 |
28 | fun initializeApp()
29 | }
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/services/CrashlyticsService.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package ru.aleshin.core.utils.platform.services
18 |
19 | /**
20 | * @author Stanislav Aleshin on 11.09.2024.
21 | */
22 | interface CrashlyticsService {
23 | fun sendLog(message: String)
24 | fun recordException(exception: Throwable, issueKey: String, )
25 | fun initializeService()
26 | }
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/platform/services/Flavor.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.platform.services
17 |
18 | /**
19 | * @author Stanislav Aleshin on 13.04.2025.
20 | */
21 | enum class Flavor {
22 | RUSTORE, FDROID, HUAWEI
23 | }
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/validation/ValidateError.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.validation
17 |
18 | import android.os.Parcelable
19 |
20 | /**
21 | * @author Stanislav Aleshin on 10.03.2023.
22 | */
23 | interface ValidateError : Parcelable
24 |
--------------------------------------------------------------------------------
/core/utils/src/main/java/ru/aleshin/core/utils/validation/Validator.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils.validation
17 |
18 | /**
19 | * @author Stanislav Aleshin on 26.03.2023.
20 | */
21 | interface Validator {
22 | fun validate(data: D): ValidateResult
23 | }
24 |
--------------------------------------------------------------------------------
/core/utils/src/test/java/ru/aleshin/core/utils/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.core.utils
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | TimePlanner is an all-in-one app for creating and managing your daily schedule. With its intuitive interface, you can easily create a personalized schedule, track your tasks, and stay on top of your priorities.
2 |
3 | Key features of TimePlanner include:
4 | - Easy sorting of tasks by priority and category
5 | - Smart reminders for events and deadlines
6 | - Built-in note taking for tasks and reminders
7 | - Templates for recurring tasks
8 | - Automatic repetition of scheduled tasks
9 | - Prevention of overlapping events in your schedule
10 | - Detailed analytics and stats for tracking your productivity
11 | - Backup and sync of data across devices
12 | - Over 10 customizable color themes and widget options
13 | - Support for 10+ languages
14 |
15 | With TimePlanner, you can take control of your time and get more done in less time. Say goodbye to chaos and hello to organized productivity!
16 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | TimePlanner - plan your day with ease, speed, and pleasure!
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | TimePlanner — это универсальное приложение для удобного планирования расписаний и отслеживания повседневных задач. Создавайте чёткий распорядок, следите за делами и управляйте временем эффективно — всё в одном приложении.
2 |
3 | Возможности TimePlanner:
4 | • Удобная сортировка задач по приоритету, категориям и подкатегориям
5 | • Умные напоминания о начале и завершении событий
6 | • Встроенные заметки для задач
7 | • Шаблоны для повторяющихся дел
8 | • Автоматическое повторение задач по шаблонам
9 | • Предотвращение наложения задач во времени
10 | • Подробная аналитика и статистика
11 | • Резервное копирование и перенос данных
12 | • Более 10 цветовых тем и виджеты для рабочего стола
13 | • Поддержка 10+ языков
14 |
15 | Превратите хаос в порядок и возьмите управление временем в свои руки с TimePlanner!
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/images/phoneScreenshots/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/fastlane/metadata/android/ru/images/phoneScreenshots/6.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | TimePlanner — планируй день легко, быстро и с удовольствием!
--------------------------------------------------------------------------------
/features/analytics/api/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/analytics/api/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/analytics/api/consumer-rules.pro
--------------------------------------------------------------------------------
/features/analytics/api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/analytics/api/src/androidTest/java/ru/aleshin/features/analytics/api/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.analytics.api
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.analytics.api.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/analytics/api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/analytics/api/src/main/java/ru/aleshin/features/analytics/api/di/AnalyticsFeatureApi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.analytics.api.di
17 |
18 | import ru.aleshin.features.analytics.api.navigation.AnalyticsFeatureStarter
19 | import ru.aleshin.module_injector.BaseFeatureApi
20 |
21 | /**
22 | * @author Stanislav Aleshin on 30.03.2023.
23 | */
24 | interface AnalyticsFeatureApi : BaseFeatureApi {
25 | fun fetchStarter(): AnalyticsFeatureStarter
26 | }
27 |
--------------------------------------------------------------------------------
/features/analytics/api/src/main/java/ru/aleshin/features/analytics/api/navigation/AnalyticsFeatureStarter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.analytics.api.navigation
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 |
20 | /**
21 | * @author Stanislav Aleshin on 30.03.2023.
22 | */
23 | interface AnalyticsFeatureStarter {
24 | fun provideMainScreen(): Screen
25 | }
26 |
--------------------------------------------------------------------------------
/features/analytics/impl/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/analytics/impl/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/analytics/impl/consumer-rules.pro
--------------------------------------------------------------------------------
/features/analytics/impl/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/analytics/impl/src/androidTest/java/ru/aleshin/features/analytics/impl/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.analytics.impl
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.analytics.impl.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/analytics/impl/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/domain/entities/AnalyticsFailure.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.analytics.impl.domain.entities
17 |
18 | import kotlinx.parcelize.Parcelize
19 | import ru.aleshin.core.utils.functional.DomainFailures
20 |
21 | /**
22 | * @author Stanislav Aleshin on 22.04.2023.
23 | */
24 | @Parcelize
25 | internal sealed class AnalyticsFailure : DomainFailures {
26 | data class OtherError(val throwable: Throwable) : AnalyticsFailure()
27 | }
28 |
--------------------------------------------------------------------------------
/features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/domain/entities/PlanningAnalytic.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.analytics.impl.domain.entities
17 |
18 | import ru.aleshin.core.domain.entities.schedules.TimeTask
19 | import java.util.Date
20 |
21 | internal data class PlanningAnalytic(
22 | val date: Date,
23 | val timeTasks: List,
24 | )
25 |
--------------------------------------------------------------------------------
/features/analytics/impl/src/main/res/drawable/ic_time_complete.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/editor/api/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/editor/api/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/editor/api/consumer-rules.pro
--------------------------------------------------------------------------------
/features/editor/api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/editor/api/src/androidTest/java/ru/aleshin/features/editor/api/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.editor.api
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.editor.api.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/editor/api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/editor/api/src/main/java/ru/aleshin/features/editor/api/di/EditorFeatureApi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.editor.api.di
17 |
18 | import ru.aleshin.features.editor.api.navigations.EditorFeatureStarter
19 | import ru.aleshin.module_injector.BaseFeatureApi
20 |
21 | /**
22 | * @author Stanislav Aleshin on 08.03.2023.
23 | */
24 | interface EditorFeatureApi : BaseFeatureApi {
25 | fun fetchStarter(): EditorFeatureStarter
26 | }
27 |
--------------------------------------------------------------------------------
/features/editor/api/src/main/java/ru/aleshin/features/editor/api/navigations/EditorFeatureStarter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.editor.api.navigations
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 |
20 | /**
21 | * @author Stanislav Aleshin on 08.03.2023.
22 | */
23 | interface EditorFeatureStarter {
24 | fun provideEditorScreen(navScreen: EditorScreens): Screen
25 | }
26 |
--------------------------------------------------------------------------------
/features/editor/api/src/test/java/ru/aleshin/features/editor/api/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.editor.api
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/features/editor/impl/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/editor/impl/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/editor/impl/consumer-rules.pro
--------------------------------------------------------------------------------
/features/editor/impl/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/editor/impl/src/androidTest/java/ru/aleshin/features/editor/impl/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.editor.impl
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.editor.impl.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/domain/repositories/EditorRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.editor.impl.domain.repositories
17 |
18 | import ru.aleshin.features.editor.impl.domain.entites.EditModel
19 |
20 | /**
21 | * @author Stanislav Aleshin on 07.03.2023.
22 | */
23 | internal interface EditorRepository {
24 | fun fetchEditModel(): EditModel
25 | fun saveEditModel(model: EditModel)
26 | }
27 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/models/categories/CategoriesUi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.editor.impl.presentation.models.categories
17 |
18 | import android.os.Parcelable
19 | import kotlinx.parcelize.Parcelize
20 |
21 | /**
22 | * @author Stanislav Aleshin on 30.07.2023.
23 | */
24 | @Parcelize
25 | internal data class CategoriesUi(
26 | val mainCategory: MainCategoryUi,
27 | val subCategories: List,
28 | ) : Parcelable
29 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_arrow_righ.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_chart_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_close.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_delete.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_favorite.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_favorite_border.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_note_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_notifications_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_repeat.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/editor/impl/src/main/res/drawable/ic_sub_category.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/home/api/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/home/api/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/home/api/consumer-rules.pro
--------------------------------------------------------------------------------
/features/home/api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/home/api/src/androidTest/java/ru/aleshin/features/home/api/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.home.api
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.home.api.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/home/api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/home/api/src/main/java/ru/aleshin/features/home/api/di/HomeFeatureApi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.api.di
17 |
18 | import ru.aleshin.features.home.api.navigation.HomeFeatureStarter
19 | import ru.aleshin.module_injector.BaseFeatureApi
20 |
21 | /**
22 | * @author Stanislav Aleshin on 18.02.2023.
23 | */
24 | interface HomeFeatureApi : BaseFeatureApi {
25 | fun fetchStarter(): HomeFeatureStarter
26 | }
27 |
--------------------------------------------------------------------------------
/features/home/api/src/main/java/ru/aleshin/features/home/api/navigation/HomeFeatureStarter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.api.navigation
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 |
20 | /**
21 | * @author Stanislav Aleshin on 18.02.2023.
22 | */
23 | interface HomeFeatureStarter {
24 | fun provideHomeScreen(navScreen: HomeScreens?, isRoot: Boolean): Screen
25 | }
26 |
--------------------------------------------------------------------------------
/features/home/api/src/test/java/ru/aleshin/features/home/api/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.api
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/features/home/impl/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/home/impl/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/home/impl/consumer-rules.pro
--------------------------------------------------------------------------------
/features/home/impl/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/home/impl/src/androidTest/java/ru/aleshin/features/home/impl/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.home.impl
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.home.impl.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/di/annontation/Router.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.di.annontation
17 |
18 | import javax.inject.Qualifier
19 |
20 | /**
21 | * @author Stanislav Aleshin on 08.03.2023.
22 | */
23 | @Qualifier
24 | annotation class GlobalRouter
25 |
26 | @Qualifier
27 | annotation class LocalRouter
28 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/domain/entities/TimeTaskImportanceException.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.domain.entities
17 |
18 | /**
19 | * @author Stanislav Aleshin on 16.05.2023.
20 | */
21 | internal class TimeTaskImportanceException : Exception()
22 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/domain/repositories/FeatureCategoryRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.domain.repositories
17 |
18 | /**
19 | * @author Stanislav Aleshin on 05.11.2023.
20 | */
21 | internal interface FeatureCategoryRepository {
22 | suspend fun fetchMainCategoryId(): Int?
23 | fun setMainCategoryId(id: Int?)
24 | }
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/domain/repositories/FeatureScheduleRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.domain.repositories
17 |
18 | import java.util.Date
19 |
20 | /**
21 | * @author Stanislav Aleshin on 05.11.2023.
22 | */
23 | internal interface FeatureScheduleRepository {
24 | suspend fun fetchScheduleDate(): Date?
25 | fun setScheduleDate(date: Date?)
26 | }
27 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/models/categories/CategoriesUi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.presentation.models.categories
17 |
18 | import android.os.Parcelable
19 | import kotlinx.parcelize.Parcelize
20 |
21 | /**
22 | * @author Stanislav Aleshin on 30.07.2023.
23 | */
24 | @Parcelize
25 | internal data class CategoriesUi(
26 | val mainCategory: MainCategoryUi,
27 | val subCategories: List,
28 | ) : Parcelable
29 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/models/templates/TemplatesSortedType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl.presentation.models.templates
17 |
18 | /**
19 | * @author Stanislav Aleshin on 08.05.2023.
20 | */
21 | internal enum class TemplatesSortedType {
22 | CATEGORIES, DATE, DURATION
23 | }
24 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_bell_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_category.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_info.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_next.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_notes.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_off_repeat.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_play.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_previous.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_remove.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_repeat.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_repeat_variant.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_schedule.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_stop.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_subcategory.xml:
--------------------------------------------------------------------------------
1 |
16 |
21 |
24 |
25 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_time.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/home/impl/src/main/res/drawable/ic_update_repeat.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/features/home/impl/src/test/java/ru/aleshin/features/home/impl/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.home.impl
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/features/settings/api/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/settings/api/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/settings/api/consumer-rules.pro
--------------------------------------------------------------------------------
/features/settings/api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/settings/api/src/androidTest/java/ru/aleshin/features/settings/api/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.settings.api
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.settings.api.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/settings/api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/settings/api/src/main/java/ru/aleshin/features/settings/api/di/SettingsFeatureApi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.settings.api.di
17 |
18 | import ru.aleshin.features.settings.api.navigation.SettingsFeatureStarter
19 | import ru.aleshin.module_injector.BaseFeatureApi
20 |
21 | /**
22 | * @author Stanislav Aleshin on 17.02.2023.
23 | */
24 | interface SettingsFeatureApi : BaseFeatureApi {
25 | fun fetchStarter(): SettingsFeatureStarter
26 | }
27 |
--------------------------------------------------------------------------------
/features/settings/api/src/main/java/ru/aleshin/features/settings/api/navigation/SettingsFeatureStarter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.settings.api.navigation
17 |
18 | import cafe.adriel.voyager.core.screen.Screen
19 |
20 | /**
21 | * @author Stanislav Aleshin on 17.02.2023.
22 | */
23 | interface SettingsFeatureStarter {
24 | fun provideMainScreen(): Screen
25 | }
26 |
--------------------------------------------------------------------------------
/features/settings/api/src/test/java/ru/aleshin/features/settings/api/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.settings.api
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/features/settings/impl/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/features/settings/impl/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/features/settings/impl/consumer-rules.pro
--------------------------------------------------------------------------------
/features/settings/impl/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/features/settings/impl/src/androidTest/java/ru/aleshin/features/settings/impl/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.features.settings.impl
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.features.settings.api.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/java/ru/aleshin/features/settings/impl/presentation/models/SettingsUi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.features.settings.impl.presentation.models
17 |
18 | import android.os.Parcelable
19 | import kotlinx.parcelize.Parcelize
20 |
21 | /**
22 | * @author Stanislav Aleshin on 30.07.2023.
23 | */
24 | @Parcelize
25 | internal data class SettingsUi(
26 | val themeSettings: ThemeSettingsUi,
27 | val tasksSettings: TasksSettingsUi,
28 | ) : Parcelable
29 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_back.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_content_copy.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_fantom.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
12 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_litecoin.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/features/settings/impl/src/main/res/drawable/ic_tron.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2023 Stanislav Aleshin
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | #
16 | #Sat Oct 14 17:42:31 MSK 2023
17 | distributionBase=GRADLE_USER_HOME
18 | distributionPath=wrapper/dists
19 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
20 | zipStoreBase=GRADLE_USER_HOME
21 | zipStorePath=wrapper/dists
22 |
--------------------------------------------------------------------------------
/module-injector/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/module-injector/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/v1tzor/TimePlanner/10168baed47abe50e1635f2644b3a1f551c45f64/module-injector/consumer-rules.pro
--------------------------------------------------------------------------------
/module-injector/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/module-injector/src/androidTest/java/ru/aleshin/module_injector/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package ru.aleshin.module_injector
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import androidx.test.platform.app.InstrumentationRegistry
5 | import org.junit.Assert.*
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | /**
10 | * Instrumented test, which will execute on an Android device.
11 | *
12 | * See [testing documentation](http://d.android.com/tools/testing).
13 | */
14 | @RunWith(AndroidJUnit4::class)
15 | class ExampleInstrumentedTest {
16 | @Test
17 | fun useAppContext() {
18 | // Context of the app under test.
19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20 | assertEquals("ru.aleshin.module_injector.test", appContext.packageName)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/module-injector/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/module-injector/src/main/java/ru/aleshin/module_injector/BaseFeatureApi.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.module_injector
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface BaseFeatureApi
22 |
23 |
--------------------------------------------------------------------------------
/module-injector/src/main/java/ru/aleshin/module_injector/BaseFeatureDependencies.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.module_injector
17 |
18 | /**
19 | * @author Stanislav Aleshin on 14.02.2023.
20 | */
21 | interface BaseFeatureDependencies
22 |
--------------------------------------------------------------------------------
/module-injector/src/test/java/ru/aleshin/module_injector/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Stanislav Aleshin
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package ru.aleshin.module_injector
17 |
18 | import org.junit.Assert.*
19 | import org.junit.Test
20 |
21 | /**
22 | * Example local unit test, which will execute on the development machine (host).
23 | *
24 | * See [testing documentation](http://d.android.com/tools/testing).
25 | */
26 | class ExampleUnitTest {
27 | @Test
28 | fun addition_isCorrect() {
29 | assertEquals(4, 2 + 2)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------