From 78c6896feb960a8894578a06f1ccbb6195bb1cb9 Mon Sep 17 00:00:00 2001 From: ebert Date: Sun, 11 Feb 2024 09:33:12 +0100 Subject: [PATCH 01/11] Base from my personal application Architectural backbones remove .idea Inital commit Build Logic System Manifest for designsystem as its an android library Move Theme, Color and Type classes from app module to designsystem module AcafsxbApplication to enable Hilt functionalities Remove redundant label in app manifest AcafsxbApp and structural navigation system Create NavHost and set it in AcafsxbApp composable Replace default composable in MainActivity by AcafscbApp composable Remove composable from project creation Add planes feature screen Add Network module to core module Acafsxb source Planes screen with network connection and top/bottom bars Add Weather feature Toolbar title change WeatherDataSouce Add Simple Screen loading Rework lib and add compose 1.4.0-alpha Make test available on type lib module Add EmbeddedTabLayout component Add WeatherMap to DI Module weatherMenu as Menu and not as a bench screen Add Cache logic with WeatherMapCache Rename plane feature entry function Provide WeatherRepository Add log to flow catch for more situation awareness MenuEntry title as string resources Empty MetarTafScreen Weather internal navgraph Generic map call from repository WeatherMapScreen Repo and data source Truncate if there is too much map Uodate to compose 1.4.0 Add weather Exit from hibernation after 4 months Balance Screen Base from my application Rebase upsie --- .gitignore | 5 + .idea/.gitignore | 1 + .idea/.name | 1 - .idea/appInsightsSettings.xml | 45 ---- .idea/compiler.xml | 6 - .idea/deploymentTargetDropDown.xml | 10 - .idea/gradle.xml | 20 -- .idea/inspectionProfiles/Project_Default.xml | 41 ---- .idea/kotlinc.xml | 6 - .idea/migrations.xml | 10 - .idea/misc.xml | 9 - .idea/vcs.xml | 6 - app/build.gradle.kts | 84 +++---- app/proguard-rules.pro | 2 +- .../acafsxb/ExampleInstrumentedTest.kt | 24 ++ app/src/main/AndroidManifest.xml | 10 +- .../com/example/androidtest/MainActivity.kt | 46 ---- .../com/example/androidtest/ui/theme/Color.kt | 11 - .../com/example/androidtest/ui/theme/Theme.kt | 70 ------ .../com/shindra/acafsxb/AcafsxbApplication.kt | 7 + .../java/com/shindra/acafsxb/MainActivity.kt | 20 ++ .../acafsxb/navigation/AcafsxbNavhost.kt | 31 +++ .../java/com/shindra/acafsxb/ui/AcafsxbApp.kt | 76 ++++++ .../com/shindra/acafsxb/ui/AcafsxbAppState.kt | 34 +++ app/src/main/res/drawable/ic_navup.xml | 11 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 1 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 1 - .../res/mipmap-anydpi-v33/ic_launcher.xml | 6 + app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/themes.xml | 2 +- .../com/shindra/acafsxb/ExampleUnitTest.kt | 17 ++ build-logic/convention/.gitignore | 1 + build-logic/convention/build.gradle.kts | 44 ++++ ...droidApplicationComposeConventionPlugin.kt | 16 ++ .../AndroidApplicationConventionPlugin.kt | 22 ++ .../java/AndroidFeatureConventionPlugin.kt | 71 ++++++ .../main/java/AndroidHiltConventionPlugin.kt | 23 ++ .../AndroidLibraryComposeConventionPlugin.kt | 15 ++ .../java/AndroidLibraryConventionPlugin.kt | 39 ++++ .../com/shindra/convention/AndroidCompose.kt | 39 ++++ .../com/shindra/convention/KotlinAndroid.kt | 53 +++++ build-logic/gradle.properties | 5 + build-logic/settings.gradle.kts | 14 ++ build.gradle | 9 + build.gradle.kts | 13 +- core/data/.gitignore | 1 + core/data/build.gradle.kts | 22 ++ core/data/consumer-rules.pro | 0 core/data/proguard-rules.pro | 21 ++ .../core/data/ExampleInstrumentedTest.kt | 24 ++ core/data/src/main/AndroidManifest.xml | 4 + .../acafsxb/core/data/di/DataModule.kt | 19 ++ .../core/data/repositories/NinjaRepository.kt | 17 ++ .../acafsxb/core/data/ExampleUnitTest.kt | 17 ++ core/designsystem/.gitignore | 1 + core/designsystem/build.gradle.kts | 30 +++ .../designsystem/src/main/AndroidManifest.xml | 4 + .../components/BottomComponent.kt | 7 + .../designsystem/components/CoilAsyncImage.kt | 43 ++++ .../components/EmbeddedTabLayout.kt | 116 ++++++++++ .../components/FullLoadingScreen.kt | 39 ++++ .../core/designsystem/components/KeyValue.kt | 108 +++++++++ .../core/designsystem/components/PdfReader.kt | 84 +++++++ .../core/designsystem/components/Shimmer.kt | 47 ++++ .../designsystem/components/UiStateContent.kt | 39 ++++ .../acafsxb/core/designsystem/theme/Color.kt | 64 +++++ .../acafsxb/core/designsystem/theme/Theme.kt | 112 +++++++++ .../acafsxb/core/designsystem}/theme/Type.kt | 2 +- .../src/main/res/values/strings.xml | 6 + core/model/.gitignore | 1 + core/model/build.gradle.kts | 3 + .../shindra/acafsxb/core/model/Airplane.kt | 5 + core/network/.gitignore | 1 + core/network/build.gradle.kts | 21 ++ core/network/consumer-rules.pro | 0 core/network/proguard-rules.pro | 21 ++ .../core/network/ExampleInstrumentedTest.kt | 24 ++ core/network/src/main/AndroidManifest.xml | 4 + .../acafsxb/core/network/bo/PlanesNetwork.kt | 36 +++ .../acafsxb/core/network/di/NetworkDi.kt | 70 ++++++ .../core/network/sources/AcafsxbDataSource.kt | 28 +++ core/network/src/main/res/values/urls.xml | 7 + .../acafsxb/core/network/ExampleUnitTest.kt | 17 ++ feature/balance/.gitignore | 1 + feature/balance/build.gradle.kts | 14 ++ feature/balance/consumer-rules.pro | 0 feature/balance/proguard-rules.pro | 21 ++ .../balance/ExampleInstrumentedTest.kt | 24 ++ feature/balance/src/main/AndroidManifest.xml | 4 + .../balance/navigation/PlaneBalanceScreen.kt | 145 ++++++++++++ .../navigation/PlaneBalanceViewModel.kt | 192 +++++++++++++++ .../balance/navigation/bo/BalanceUiBo.kt | 42 ++++ .../calculator/AircraftCenteringCalculator.kt | 102 ++++++++ .../navigation/calculator/RayCasting.kt | 47 ++++ .../navigation/components/BalanceGraph.kt | 218 ++++++++++++++++++ .../navigation/components/BalanceSlider.kt | 138 +++++++++++ .../balance/navigation/components/MassCard.kt | 119 ++++++++++ .../PlaneBalanceScreenNavigation.kt | 38 +++ .../balance/src/main/res/values/string.xml | 13 ++ .../balance/AircraftMassCalculatorTests.kt | 54 +++++ .../feature/balance/ExampleUnitTest.kt | 17 ++ .../feature/balance/RayTracingTests.kt | 58 +++++ feature/feature1/.gitignore | 1 + feature/feature1/build.gradle.kts | 12 + feature/feature1/consumer-rules.pro | 0 feature/feature1/proguard-rules.pro | 21 ++ .../feature1/ExampleInstrumentedTest.kt | 24 ++ feature/feature1/src/main/AndroidManifest.xml | 4 + .../java/com/chargemap/feature1/Screen1.kt | 24 ++ .../feature1/navigation/ScreenNavigation.kt | 27 +++ .../com/chargemap/feature1/ExampleUnitTest.kt | 17 ++ feature/feature2/.gitignore | 1 + feature/feature2/build.gradle.kts | 12 + feature/feature2/consumer-rules.pro | 0 feature/feature2/proguard-rules.pro | 21 ++ .../feature2/ExampleInstrumentedTest.kt | 24 ++ feature/feature2/src/main/AndroidManifest.xml | 4 + .../java/com/chargemap/feature2/Screen2.kt | 17 ++ .../feature2/navigation/ScreenNavigation.kt | 25 ++ .../com/chargemap/feature2/ExampleUnitTest.kt | 17 ++ feature/planes/.gitignore | 1 + feature/planes/build.gradle.kts | 8 + feature/planes/consumer-rules.pro | 0 feature/planes/proguard-rules.pro | 21 ++ .../feature/planes/ExampleInstrumentedTest.kt | 24 ++ feature/planes/src/main/AndroidManifest.xml | 4 + .../acafsxb/feature/planes/PlanesScreen.kt | 61 +++++ .../acafsxb/feature/planes/PlanesViewModel.kt | 28 +++ .../feature/planes/compose/PlaneCard.kt | 215 +++++++++++++++++ .../navigation/PlanesScreenNavigation.kt | 27 +++ .../src/main/res/drawable/ic_planes.xml | 5 + .../planes/src/main/res/values/strings.xml | 8 + .../acafsxb/feature/planes/ExampleUnitTest.kt | 29 +++ feature/weather/.gitignore | 1 + feature/weather/build.gradle.kts | 8 + feature/weather/consumer-rules.pro | 0 feature/weather/proguard-rules.pro | 21 ++ .../weather/ExampleInstrumentedTest.kt | 24 ++ feature/weather/src/main/AndroidManifest.xml | 4 + .../feature/weather/bo/WeatherMapUi.kt | 15 ++ .../feature/weather/bo/WeatherMenuUi.kt | 19 ++ .../feature/weather/map/WeatherMapScreen.kt | 158 +++++++++++++ .../weather/map/WeatherMapViewModel.kt | 64 +++++ .../feature/weather/menu/WeatherMenuScreen.kt | 109 +++++++++ .../weather/menu/WeatherMenuViewModel.kt | 36 +++ .../feature/weather/metar/MetarTafScreen.kt | 165 +++++++++++++ .../weather/metar/MetarTafViewModel.kt | 37 +++ .../navigation/WeatherScreensNavigation.kt | 74 ++++++ .../src/main/res/drawable/ic_metar_taf.xml | 10 + .../src/main/res/drawable/ic_temsi.xml | 16 ++ .../src/main/res/drawable/ic_weather.xml | 5 + .../weather/src/main/res/drawable/ic_wind.xml | 19 ++ .../main/res/drawable/ic_wind_direction.xml | 10 + .../weather/src/main/res/values/strings.xml | 12 + .../feature/weather/ExampleUnitTest.kt | 17 ++ gradle/libs.versions.toml | 148 +++++++++--- gradle/wrapper/gradle-wrapper.properties | 6 +- settings.gradle.kts | 10 +- 158 files changed, 4592 insertions(+), 369 deletions(-) delete mode 100644 .idea/.name delete mode 100644 .idea/appInsightsSettings.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/deploymentTargetDropDown.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/migrations.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml create mode 100644 app/src/androidTest/java/com/shindra/acafsxb/ExampleInstrumentedTest.kt delete mode 100644 app/src/main/java/com/example/androidtest/MainActivity.kt delete mode 100644 app/src/main/java/com/example/androidtest/ui/theme/Color.kt delete mode 100644 app/src/main/java/com/example/androidtest/ui/theme/Theme.kt create mode 100644 app/src/main/java/com/shindra/acafsxb/AcafsxbApplication.kt create mode 100644 app/src/main/java/com/shindra/acafsxb/MainActivity.kt create mode 100644 app/src/main/java/com/shindra/acafsxb/navigation/AcafsxbNavhost.kt create mode 100644 app/src/main/java/com/shindra/acafsxb/ui/AcafsxbApp.kt create mode 100644 app/src/main/java/com/shindra/acafsxb/ui/AcafsxbAppState.kt create mode 100644 app/src/main/res/drawable/ic_navup.xml create mode 100644 app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml create mode 100644 app/src/test/java/com/shindra/acafsxb/ExampleUnitTest.kt create mode 100644 build-logic/convention/.gitignore create mode 100644 build-logic/convention/build.gradle.kts create mode 100644 build-logic/convention/src/main/java/AndroidApplicationComposeConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/AndroidApplicationConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/AndroidFeatureConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/AndroidHiltConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/AndroidLibraryComposeConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/AndroidLibraryConventionPlugin.kt create mode 100644 build-logic/convention/src/main/java/com/shindra/convention/AndroidCompose.kt create mode 100644 build-logic/convention/src/main/java/com/shindra/convention/KotlinAndroid.kt create mode 100644 build-logic/gradle.properties create mode 100644 build-logic/settings.gradle.kts create mode 100644 build.gradle create mode 100644 core/data/.gitignore create mode 100644 core/data/build.gradle.kts create mode 100644 core/data/consumer-rules.pro create mode 100644 core/data/proguard-rules.pro create mode 100644 core/data/src/androidTest/java/com/shindra/acafsxb/core/data/ExampleInstrumentedTest.kt create mode 100644 core/data/src/main/AndroidManifest.xml create mode 100644 core/data/src/main/java/com/shindra/acafsxb/core/data/di/DataModule.kt create mode 100644 core/data/src/main/java/com/shindra/acafsxb/core/data/repositories/NinjaRepository.kt create mode 100644 core/data/src/test/java/com/shindra/acafsxb/core/data/ExampleUnitTest.kt create mode 100644 core/designsystem/.gitignore create mode 100644 core/designsystem/build.gradle.kts create mode 100644 core/designsystem/src/main/AndroidManifest.xml create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/BottomComponent.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/CoilAsyncImage.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/EmbeddedTabLayout.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/FullLoadingScreen.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/KeyValue.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/PdfReader.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/Shimmer.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/components/UiStateContent.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/theme/Color.kt create mode 100644 core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem/theme/Theme.kt rename {app/src/main/java/com/example/androidtest/ui => core/designsystem/src/main/java/com/shindra/acafsxb/core/designsystem}/theme/Type.kt (95%) create mode 100644 core/designsystem/src/main/res/values/strings.xml create mode 100644 core/model/.gitignore create mode 100644 core/model/build.gradle.kts create mode 100644 core/model/src/main/java/com/shindra/acafsxb/core/model/Airplane.kt create mode 100644 core/network/.gitignore create mode 100644 core/network/build.gradle.kts create mode 100644 core/network/consumer-rules.pro create mode 100644 core/network/proguard-rules.pro create mode 100644 core/network/src/androidTest/java/com/shindra/acafsxb/core/network/ExampleInstrumentedTest.kt create mode 100644 core/network/src/main/AndroidManifest.xml create mode 100644 core/network/src/main/java/com/shindra/acafsxb/core/network/bo/PlanesNetwork.kt create mode 100644 core/network/src/main/java/com/shindra/acafsxb/core/network/di/NetworkDi.kt create mode 100644 core/network/src/main/java/com/shindra/acafsxb/core/network/sources/AcafsxbDataSource.kt create mode 100644 core/network/src/main/res/values/urls.xml create mode 100644 core/network/src/test/java/com/shindra/acafsxb/core/network/ExampleUnitTest.kt create mode 100644 feature/balance/.gitignore create mode 100644 feature/balance/build.gradle.kts create mode 100644 feature/balance/consumer-rules.pro create mode 100644 feature/balance/proguard-rules.pro create mode 100644 feature/balance/src/androidTest/java/com/shindra/acafsxb/feature/balance/ExampleInstrumentedTest.kt create mode 100644 feature/balance/src/main/AndroidManifest.xml create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/PlaneBalanceScreen.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/PlaneBalanceViewModel.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/bo/BalanceUiBo.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/calculator/AircraftCenteringCalculator.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/calculator/RayCasting.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/components/BalanceGraph.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/components/BalanceSlider.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/components/MassCard.kt create mode 100644 feature/balance/src/main/java/com/shindra/acafsxb/feature/balance/navigation/navigation/PlaneBalanceScreenNavigation.kt create mode 100644 feature/balance/src/main/res/values/string.xml create mode 100644 feature/balance/src/test/java/com/shindra/acafsxb/feature/balance/AircraftMassCalculatorTests.kt create mode 100644 feature/balance/src/test/java/com/shindra/acafsxb/feature/balance/ExampleUnitTest.kt create mode 100644 feature/balance/src/test/java/com/shindra/acafsxb/feature/balance/RayTracingTests.kt create mode 100644 feature/feature1/.gitignore create mode 100644 feature/feature1/build.gradle.kts create mode 100644 feature/feature1/consumer-rules.pro create mode 100644 feature/feature1/proguard-rules.pro create mode 100644 feature/feature1/src/androidTest/java/com/chargemap/feature1/ExampleInstrumentedTest.kt create mode 100644 feature/feature1/src/main/AndroidManifest.xml create mode 100644 feature/feature1/src/main/java/com/chargemap/feature1/Screen1.kt create mode 100644 feature/feature1/src/main/java/com/chargemap/feature1/navigation/ScreenNavigation.kt create mode 100644 feature/feature1/src/test/java/com/chargemap/feature1/ExampleUnitTest.kt create mode 100644 feature/feature2/.gitignore create mode 100644 feature/feature2/build.gradle.kts create mode 100644 feature/feature2/consumer-rules.pro create mode 100644 feature/feature2/proguard-rules.pro create mode 100644 feature/feature2/src/androidTest/java/com/chargemap/feature2/ExampleInstrumentedTest.kt create mode 100644 feature/feature2/src/main/AndroidManifest.xml create mode 100644 feature/feature2/src/main/java/com/chargemap/feature2/Screen2.kt create mode 100644 feature/feature2/src/main/java/com/chargemap/feature2/navigation/ScreenNavigation.kt create mode 100644 feature/feature2/src/test/java/com/chargemap/feature2/ExampleUnitTest.kt create mode 100644 feature/planes/.gitignore create mode 100644 feature/planes/build.gradle.kts create mode 100644 feature/planes/consumer-rules.pro create mode 100644 feature/planes/proguard-rules.pro create mode 100644 feature/planes/src/androidTest/java/com/shindra/acafsxb/feature/planes/ExampleInstrumentedTest.kt create mode 100644 feature/planes/src/main/AndroidManifest.xml create mode 100644 feature/planes/src/main/java/com/shindra/acafsxb/feature/planes/PlanesScreen.kt create mode 100644 feature/planes/src/main/java/com/shindra/acafsxb/feature/planes/PlanesViewModel.kt create mode 100644 feature/planes/src/main/java/com/shindra/acafsxb/feature/planes/compose/PlaneCard.kt create mode 100644 feature/planes/src/main/java/com/shindra/acafsxb/feature/planes/navigation/PlanesScreenNavigation.kt create mode 100644 feature/planes/src/main/res/drawable/ic_planes.xml create mode 100644 feature/planes/src/main/res/values/strings.xml create mode 100644 feature/planes/src/test/java/com/shindra/acafsxb/feature/planes/ExampleUnitTest.kt create mode 100644 feature/weather/.gitignore create mode 100644 feature/weather/build.gradle.kts create mode 100644 feature/weather/consumer-rules.pro create mode 100644 feature/weather/proguard-rules.pro create mode 100644 feature/weather/src/androidTest/java/com/shindra/acafsxb/feature/weather/ExampleInstrumentedTest.kt create mode 100644 feature/weather/src/main/AndroidManifest.xml create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/bo/WeatherMapUi.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/bo/WeatherMenuUi.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/map/WeatherMapScreen.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/map/WeatherMapViewModel.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/menu/WeatherMenuScreen.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/menu/WeatherMenuViewModel.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/metar/MetarTafScreen.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/metar/MetarTafViewModel.kt create mode 100644 feature/weather/src/main/java/com/shindra/acafsxb/feature/weather/navigation/WeatherScreensNavigation.kt create mode 100644 feature/weather/src/main/res/drawable/ic_metar_taf.xml create mode 100644 feature/weather/src/main/res/drawable/ic_temsi.xml create mode 100644 feature/weather/src/main/res/drawable/ic_weather.xml create mode 100644 feature/weather/src/main/res/drawable/ic_wind.xml create mode 100644 feature/weather/src/main/res/drawable/ic_wind_direction.xml create mode 100644 feature/weather/src/main/res/values/strings.xml create mode 100644 feature/weather/src/test/java/com/shindra/acafsxb/feature/weather/ExampleUnitTest.kt diff --git a/.gitignore b/.gitignore index aa724b7..4832baa 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ .externalNativeBuild .cxx local.properties + +/.idea/misc.xml +/.idea/gradle.xml +/.idea/compiler.xml +/.idea/.name diff --git a/.idea/.gitignore b/.idea/.gitignore index 26d3352..aff6f92 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,3 +1,4 @@ # Default ignored files /shelf/ /workspace.xml +/vcs.xml diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index aa39fe5..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Android Test \ No newline at end of file diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml deleted file mode 100644 index 145bb1c..0000000 --- a/.idea/appInsightsSettings.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 0c0c338..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 9f47dfb..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 44ca2d9..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index fdf8d99..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8978d23..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cee76ae..76cbe5b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,19 +1,18 @@ -@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { - alias(libs.plugins.androidApplication) - alias(libs.plugins.kotlinAndroid) + id("acafsxb.application") + id("acafsxb.application.compose") + id("acafsxb.hilt") } + android { - namespace = "com.example.androidtest" - compileSdk = 34 + namespace = "com.shindra.acafsxb" + defaultConfig { - applicationId = "com.example.androidtest" - minSdk = 23 - targetSdk = 34 + applicationId = "com.shindra.acafsxb" versionCode = 1 - versionName = "1.0" + versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { @@ -22,49 +21,54 @@ android { } buildTypes { - release { - isMinifyEnabled = false + val debug by getting { + applicationIdSuffix = ".debug" + } + + val release by getting { + isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) + + // To publish on the Play store a private signing key is required, but to allow anyone + // who clones the code to sign and run the release variant, use the debug signing key. + // TODO: Abstract the signing configuration to a separate file to avoid hardcoding this. + //signingConfig = signingConfigs.getByName("debug") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = "1.8" - } - buildFeatures { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.1" - } + packaging { resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" + excludes.add("/META-INF/{AL2.0,LGPL2.1}") } } } dependencies { - implementation(libs.core.ktx) - implementation(libs.lifecycle.runtime.ktx) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.ui) - implementation(libs.ui.graphics) - implementation(libs.ui.tooling.preview) - implementation(libs.material3) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.ui.test.junit4) - debugImplementation(libs.ui.tooling) - debugImplementation(libs.ui.test.manifest) + implementation(project(":core:designsystem")) + implementation(project(":feature:planes")) + + implementation(libs.accompanist.systemuicontroller) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.compose.runtime) + implementation(libs.androidx.lifecycle.runtimeCompose) + implementation(libs.androidx.compose.material3.windowSizeClass) + implementation(libs.androidx.hilt.navigation.compose) + implementation(libs.androidx.navigation.compose) + + implementation(libs.coil.kt) + implementation(libs.coil.kt.svg) + + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") +/* androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version") + debugImplementation("androidx.compose.ui:ui-tooling:$compose_version") + debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")*/ } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..ff59496 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,6 +1,6 @@ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. +# proguardFiles setting in build.gradle.kts. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html diff --git a/app/src/androidTest/java/com/shindra/acafsxb/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/shindra/acafsxb/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..1f946a4 --- /dev/null +++ b/app/src/androidTest/java/com/shindra/acafsxb/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.shindra.acafsxb + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.shindra.acafsxb", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fd88cc2..6e9906c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,21 +2,23 @@ + + + + android:theme="@style/Theme.AcafSxb"> diff --git a/app/src/main/java/com/example/androidtest/MainActivity.kt b/app/src/main/java/com/example/androidtest/MainActivity.kt deleted file mode 100644 index 8fa2b80..0000000 --- a/app/src/main/java/com/example/androidtest/MainActivity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.example.androidtest - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import com.example.androidtest.ui.theme.AndroidTestTheme - -class MainActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - AndroidTestTheme { - // A surface container using the 'background' color from the theme - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - Greeting("Android") - } - } - } - } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - AndroidTestTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtest/ui/theme/Color.kt b/app/src/main/java/com/example/androidtest/ui/theme/Color.kt deleted file mode 100644 index 8a10bf4..0000000 --- a/app/src/main/java/com/example/androidtest/ui/theme/Color.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.androidtest.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtest/ui/theme/Theme.kt b/app/src/main/java/com/example/androidtest/ui/theme/Theme.kt deleted file mode 100644 index 027c97f..0000000 --- a/app/src/main/java/com/example/androidtest/ui/theme/Theme.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.example.androidtest.ui.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun AndroidTestTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - window.statusBarColor = colorScheme.primary.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) -} \ No newline at end of file diff --git a/app/src/main/java/com/shindra/acafsxb/AcafsxbApplication.kt b/app/src/main/java/com/shindra/acafsxb/AcafsxbApplication.kt new file mode 100644 index 0000000..4a78658 --- /dev/null +++ b/app/src/main/java/com/shindra/acafsxb/AcafsxbApplication.kt @@ -0,0 +1,7 @@ +package com.shindra.acafsxb + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class AcafsxbApplication : Application() diff --git a/app/src/main/java/com/shindra/acafsxb/MainActivity.kt b/app/src/main/java/com/shindra/acafsxb/MainActivity.kt new file mode 100644 index 0000000..0721d79 --- /dev/null +++ b/app/src/main/java/com/shindra/acafsxb/MainActivity.kt @@ -0,0 +1,20 @@ +package com.shindra.acafsxb + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import com.shindra.acafsxb.ui.AcafsxbApp +import com.shindra.acafsxb.core.designsystem.theme.AcafSxbTheme +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + AcafSxbTheme { + AcafsxbApp() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/shindra/acafsxb/navigation/AcafsxbNavhost.kt b/app/src/main/java/com/shindra/acafsxb/navigation/AcafsxbNavhost.kt new file mode 100644 index 0000000..3456caf --- /dev/null +++ b/app/src/main/java/com/shindra/acafsxb/navigation/AcafsxbNavhost.kt @@ -0,0 +1,31 @@ +package com.shindra.acafsxb.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import com.shindra.acafsxb.core.designsystem.components.BottomComponent +import com.shindra.acafsxb.feature.planes.navigation.planesScreen +import com.shindra.acafsxb.feature.planes.navigation.planesScreenRouteId + + +@Composable +fun AcafsxbNavHost( + navController: NavHostController, + modifier: Modifier = Modifier, + startDestination: String = planesScreenRouteId, + onTitleChange: (String) -> Unit, + onBottomComponent: (BottomComponent) -> Unit, +) { + NavHost( + navController = navController, + startDestination = startDestination, + modifier = modifier, + ) { + planesScreen( + onTitleChange = onTitleChange, + onMassAndBalanceClick = { /*navController.navigateToPlanesBalanceFeature(it)*/ } + ) + + } +} diff --git a/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbApp.kt b/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbApp.kt new file mode 100644 index 0000000..2f0d917 --- /dev/null +++ b/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbApp.kt @@ -0,0 +1,76 @@ +package com.shindra.acafsxb.ui + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import com.shindra.acafsxb.R +import com.shindra.acafsxb.core.designsystem.components.BottomComponent +import com.shindra.acafsxb.navigation.AcafsxbNavHost + +@OptIn( + ExperimentalMaterial3Api::class, +) +@Composable +fun AcafsxbApp( + appState: AcafsxbAppState = rememberAcafsxbAppState() +) { + var toolbarTitle by remember { mutableStateOf("") } + var bottomComponent by remember { mutableStateOf(null) } + + Scaffold( + topBar = { + Toolbar( + title = toolbarTitle, + hasNavUp = appState.shouldShowNavUp, + onNavUpClick = { appState.navigateUp() } + ) + + } + ) { + AcafsxbNavHost( + modifier = Modifier.padding(it), + navController = appState.navController, + onTitleChange = { newTitle -> + toolbarTitle = newTitle + }, + onBottomComponent = { bottomComponent = it } + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun Toolbar( + title: String, + hasNavUp: Boolean, + onNavUpClick: () -> Unit, + scrollBehavior: TopAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() +) { + CenterAlignedTopAppBar( + title = { Text(text = title) }, + navigationIcon = { + if (hasNavUp) { + IconButton(onClick = { onNavUpClick() }) { + Icon( + painter = painterResource(id = R.drawable.ic_navup), + contentDescription = null + ) + } + } + }, + scrollBehavior = scrollBehavior + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbAppState.kt b/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbAppState.kt new file mode 100644 index 0000000..38e4fa7 --- /dev/null +++ b/app/src/main/java/com/shindra/acafsxb/ui/AcafsxbAppState.kt @@ -0,0 +1,34 @@ +package com.shindra.acafsxb.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.navigation.NavDestination +import androidx.navigation.NavHostController +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import com.shindra.acafsxb.feature.planes.navigation.planesScreenRouteId + +@Composable +fun rememberAcafsxbAppState( + navController: NavHostController = rememberNavController() +) = remember(navController) { + AcafsxbAppState(navController) +} + +class AcafsxbAppState(val navController: NavHostController) { + + val currentDestination: NavDestination? + @Composable get() = navController + .currentBackStackEntryAsState().value?.destination + + val shouldShowNavUp: Boolean + @Composable get() { + val cDestination = currentDestination?.route ?: return false + return cDestination != planesScreenRouteId + } + + fun navigateUp() { + navController.navigateUp() + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_navup.xml b/app/src/main/res/drawable/ic_navup.xml new file mode 100644 index 0000000..1686755 --- /dev/null +++ b/app/src/main/res/drawable/ic_navup.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 6f3b755..eca70cf 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,5 +2,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f3b755..eca70cf 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,5 +2,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa43411..a86a7ca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Android Test + AcafSxb \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index b28fc40..9c2b737 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,5 +1,5 @@ -