From 5049c8afa4cd5e577ffc0f6c078dfa2cb670178f Mon Sep 17 00:00:00 2001 From: Avior Date: Mon, 22 Aug 2022 00:20:11 +0200 Subject: [PATCH] feat: Global update --- .bundle/.gitignore | 1 + .bundle/config | 2 + .gitignore | 5 +- Gemfile.lock | 88 ++--- README.md | 2 +- app/build.gradle | 166 --------- app/build.gradle.kts | 174 ++++++++++ app/proguard-rules.pro | 2 +- .../drawable-v24/ic_launcher_foreground.xml | 4 +- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4358 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2686 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5703 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 9416 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 13275 -> 0 bytes app/src/debug/res/values/strings.xml | 2 +- app/src/main/AndroidManifest.xml | 29 +- .../java/com/dzeio/openhealth/Application.kt | 53 +-- .../java/com/dzeio/openhealth/Settings.kt | 19 + .../dzeio/openhealth/data/step/StepSource.kt | 6 +- .../openhealth/services/OpenHealthService.kt | 6 +- .../com/dzeio/openhealth/ui/ErrorActivity.kt | 2 +- .../com/dzeio/openhealth/ui/MainActivity.kt | 80 +++-- .../openhealth/ui/browse/BrowseFragment.kt | 25 +- .../dzeio/openhealth/ui/home/HomeFragment.kt | 51 +-- .../ui/settings/SettingsFragment.kt | 28 +- .../openhealth/ui/steps/StepsHomeFragment.kt | 77 ++--- .../com/dzeio/openhealth/utils/LocaleUtils.kt | 76 ++++ .../openhealth/utils/PermissionsManager.kt | 12 +- .../dzeio/openhealth/utils/ServiceUtils.kt | 21 ++ app/src/main/res/layout/activity_main.xml | 16 +- app/src/main/res/layout/fragment_browse.xml | 30 +- app/src/main/res/layout/fragment_home.xml | 153 +++++++-- .../res/mipmap-anydpi-v26/ic_launcher.xml | 1 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4168 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2654 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5946 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 9046 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 13253 -> 0 bytes .../main/res/navigation/mobile_navigation.xml | 4 +- app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-night/themes.xml | 1 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/themes.xml | 10 +- app/src/main/res/xml/locales.xml | 5 + app/src/main/res/xml/preferences.xml | 2 +- build.gradle | 20 -- build.gradle.kts | 20 ++ charts/build.gradle | 64 ---- charts/build.gradle.kts | 38 ++ charts/proguard-rules.pro | 2 +- charts/src/main/AndroidManifest.xml | 3 +- .../main/java/com/dzeio/charts/ChartView.kt | 160 +++------ .../java/com/dzeio/charts/ChartView.kt.old | 166 +++++++++ .../com/dzeio/charts/ChartViewInterface.kt | 35 ++ .../main/java/com/dzeio/charts/axis/XAxis.kt | 67 +++- .../java/com/dzeio/charts/axis/XAxis.kt.old | 25 ++ .../com/dzeio/charts/axis/XAxisInterface.kt | 35 ++ .../main/java/com/dzeio/charts/axis/YAxis.kt | 125 ++++--- .../java/com/dzeio/charts/axis/YAxis.kt.old | 74 ++++ .../com/dzeio/charts/axis/YAxisInterface.kt | 58 ++++ .../com/dzeio/charts/axis/YAxisPosition.kt | 6 + .../dzeio/charts/components/ChartScroll.kt | 2 +- .../java/com/dzeio/charts/series/BarSerie.kt | 193 +++-------- .../com/dzeio/charts/series/BarSerie.kt.old | 160 +++++++++ .../java/com/dzeio/charts/series/BaseSerie.kt | 33 ++ ...{SerieAbstract.kt => SerieAbstract.kt.old} | 32 +- .../com/dzeio/charts/series/SerieInterface.kt | 28 ++ .../dzeio/charts/views/BarChartView.kt.old | 324 ------------------ fastlane/Fastfile | 3 + gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle | 1 + 75 files changed, 1646 insertions(+), 1211 deletions(-) create mode 100644 .bundle/.gitignore create mode 100644 .bundle/config delete mode 100644 app/build.gradle create mode 100644 app/build.gradle.kts delete mode 100644 app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 app/src/debug/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 app/src/debug/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/java/com/dzeio/openhealth/Settings.kt create mode 100644 app/src/main/java/com/dzeio/openhealth/utils/LocaleUtils.kt create mode 100644 app/src/main/java/com/dzeio/openhealth/utils/ServiceUtils.kt delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/xml/locales.xml delete mode 100644 build.gradle create mode 100644 build.gradle.kts delete mode 100644 charts/build.gradle create mode 100644 charts/build.gradle.kts create mode 100644 charts/src/main/java/com/dzeio/charts/ChartView.kt.old create mode 100644 charts/src/main/java/com/dzeio/charts/ChartViewInterface.kt create mode 100644 charts/src/main/java/com/dzeio/charts/axis/XAxis.kt.old create mode 100644 charts/src/main/java/com/dzeio/charts/axis/XAxisInterface.kt create mode 100644 charts/src/main/java/com/dzeio/charts/axis/YAxis.kt.old create mode 100644 charts/src/main/java/com/dzeio/charts/axis/YAxisInterface.kt create mode 100644 charts/src/main/java/com/dzeio/charts/axis/YAxisPosition.kt create mode 100644 charts/src/main/java/com/dzeio/charts/series/BarSerie.kt.old create mode 100644 charts/src/main/java/com/dzeio/charts/series/BaseSerie.kt rename charts/src/main/java/com/dzeio/charts/series/{SerieAbstract.kt => SerieAbstract.kt.old} (55%) create mode 100644 charts/src/main/java/com/dzeio/charts/series/SerieInterface.kt delete mode 100644 charts/src/main/java/com/dzeio/charts/views/BarChartView.kt.old diff --git a/.bundle/.gitignore b/.bundle/.gitignore new file mode 100644 index 0000000..5657f6e --- /dev/null +++ b/.bundle/.gitignore @@ -0,0 +1 @@ +vendor \ No newline at end of file diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..3f4e4f3 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: ".bundle/vendor" diff --git a/.gitignore b/.gitignore index 0bed683..7a6e365 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,7 @@ fastlane_secret_keys.json # App /app/debug -/app/release \ No newline at end of file +/app/release + +# Fastlane / Ruby +/vendor \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index e9e0c31..9b4bb4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,23 +8,23 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.543.0) - aws-sdk-core (3.125.0) + aws-partitions (1.615.0) + aws-sdk-core (3.131.6) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.53.0) - aws-sdk-core (~> 3, >= 3.125.0) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.58.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.110.0) - aws-sdk-core (~> 3, >= 3.125.0) + aws-sdk-s3 (1.114.0) + aws-sdk-core (~> 3, >= 3.127.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) - aws-sigv4 (1.4.0) + aws-sigv4 (1.5.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - claide (1.0.3) + claide (1.1.0) colored (1.2) colored2 (3.1.2) commander (4.6.0) @@ -34,19 +34,20 @@ GEM rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.6) + dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.89.0) - faraday (1.8.0) + excon (0.92.4) + faraday (1.10.0) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) + faraday-net_http_persistent (~> 1.0) faraday-patron (~> 1.0) faraday-rack (~> 1.0) - multipart-post (>= 1.2, < 3) + faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) faraday-cookie_jar (0.0.7) faraday (>= 0.8.0) @@ -55,14 +56,17 @@ GEM faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) faraday-net_http (1.0.1) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) + faraday-retry (1.0.3) faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.199.0) + fastlane (2.208.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -102,9 +106,9 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.14.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.4.1) + google-apis-androidpublisher_v3 (0.25.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-core (0.7.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -113,40 +117,40 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.9.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.10.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.13.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-playcustomapp_v1 (0.10.0) + google-apis-core (>= 0.7, < 2.a) + google-apis-storage_v1 (0.17.0) + google-apis-core (>= 0.7, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) - google-cloud-env (1.5.0) - faraday (>= 0.17.3, < 2.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) google-cloud-errors (1.2.0) - google-cloud-storage (1.35.0) + google-cloud-storage (1.38.0) addressable (~> 2.8) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.17.0) google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.1.0) - faraday (>= 0.17.3, < 2.0) + googleauth (1.2.0) + faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.4) + http-cookie (1.0.5) domain_name (~> 0.5) httpclient (2.8.3) jmespath (1.6.1) - json (2.6.1) - jwt (2.3.0) + json (2.6.2) + jwt (2.4.1) memoist (0.16.2) mini_magick (4.11.0) mini_mime (1.1.2) @@ -157,9 +161,9 @@ GEM optparse (0.1.1) os (1.1.4) plist (3.6.0) - public_suffix (4.0.6) + public_suffix (4.0.7) rake (13.0.6) - representable (3.1.1) + representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) @@ -169,9 +173,9 @@ GEM ruby2_keywords (0.0.5) rubyzip (2.3.2) security (0.1.3) - signet (0.16.0) + signet (0.17.0) addressable (~> 2.8) - faraday (>= 0.17.3, < 2.0) + faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simctl (1.6.8) @@ -188,12 +192,12 @@ GEM uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.8) - unf_ext (0.0.8-x64-mingw32) + unf_ext (0.0.8.2) + unf_ext (0.0.8.2-x64-mingw32) unicode-display_width (1.8.0) webrick (1.7.0) word_wrap (1.0.0) - xcodeproj (1.21.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -213,4 +217,4 @@ DEPENDENCIES fastlane BUNDLED WITH - 2.2.32 + 2.3.18 diff --git a/README.md b/README.md index e386356..3367922 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ No Ads are served through this app. Permissions requests are for specifics usage and are only requests the first time they are needed: | Permission | Why is it requested | -| :--------------------: | :--------------------------------------------------------------- | +| :--------------------: |:-----------------------------------------------------------------| | ACCESS_FINE_LOCATION | Google Fit Extension Requirement (maybe not, still have to test) | | ACCESS_COARSE_LOCATION | Same as above | | ACTIVITY_RECOGNITION | Device Steps Usage | diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 9b94921..0000000 --- a/app/build.gradle +++ /dev/null @@ -1,166 +0,0 @@ -plugins { - id 'com.android.application' - id 'org.jetbrains.kotlin.android' - id 'kotlin-kapt' - id 'dagger.hilt.android.plugin' - - // Safe Navigation - id 'androidx.navigation.safeargs' -} - -android { - - signingConfigs { - - release { - - def keystorePropertiesFile = rootProject.file("./keystore.properties") - def keystoreProperties = new Properties() - try { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) - } catch (FileNotFoundException ignored) { - keystoreProperties = null - } - - if (keystoreProperties != null) { - storePassword keystoreProperties["storePassword"] - keyPassword keystoreProperties["keyPassword"] - keyAlias keystoreProperties["keyAlias"] - storeFile file(keystoreProperties["storeFile"]) - } - } - } - - compileSdk 32 - - defaultConfig { - // App ID - applicationId "com.dzeio.openhealth" - - // Android 5 Lollipop - minSdk 21 - - // Android 12 - targetSdk 32 - - // Semantic Versioning - versionName "1.0.0" - versionCode 1 - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - // Languages - def locales = ["en", "fr"] - - buildConfigField "String[]", "LOCALES", "new String[]{\""+locales.join("\",\"")+"\"}" - resConfigs locales - } - - buildTypes { - - release { - // Slimmer version - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.release - } - - debug { - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - applicationIdSuffix ".dev" - versionNameSuffix '-dev' - debuggable true - - // make it debuggable - renderscriptDebuggable true - - // Optimization Level - renderscriptOptimLevel 0 - } - } - - // Compile using JAVA 8 - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - // Enable View Binding and Data Binding - buildFeatures { - viewBinding true - dataBinding true - } -} - -dependencies { - // Dzeio Charts - implementation project(path: ":charts") - - // Core dependencies - implementation 'androidx.core:core-ktx:1.8.0' - implementation 'androidx.appcompat:appcompat:1.4.2' - implementation 'javax.inject:javax.inject:1' - implementation 'com.google.android.material:material:1.7.0-alpha03' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0' - - // Coroutines - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.3" - - // Settings - implementation "androidx.preference:preference-ktx:1.2.0" - - // DataStore - implementation "androidx.datastore:datastore:1.0.0" - - // Navigation - implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0' - implementation 'androidx.navigation:navigation-ui-ktx:2.5.0' - - // Paging - implementation "androidx.paging:paging-runtime:3.1.1" - implementation "androidx.paging:paging-runtime-ktx:3.1.1" - - - // Services - implementation 'androidx.work:work-runtime-ktx:2.7.1' - - // Tests - testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - - // Graph - implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' - - // Graphs test 2 - implementation 'com.github.HackPlan:AndroidCharts:1.0.4' - - // Hilt - implementation 'com.google.dagger:hilt-android:2.43' - kapt 'com.google.dagger:hilt-compiler:2.43' - - // Google Fit - implementation "com.google.android.gms:play-services-fitness:21.1.0" - implementation "com.google.android.gms:play-services-auth:20.2.0" - - // Samsung Health - implementation files('libs/samsung-health-data-1.5.0.aar') - implementation 'com.google.code.gson:gson:2.9.0' - - // ROOM - implementation "androidx.room:room-runtime:2.4.2" - kapt "androidx.room:room-compiler:2.4.2" - implementation "androidx.room:room-ktx:2.4.2" - testImplementation "androidx.room:room-testing:2.4.2" - - // Futures - implementation 'com.google.guava:guava:31.1-jre' - implementation "androidx.concurrent:concurrent-futures:1.1.0" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.3' -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..37b25ea --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,174 @@ +import java.util.Properties + +plugins { + id("com.android.application") + kotlin("android") + kotlin("kapt") + id("dagger.hilt.android.plugin") + + // Safe Navigation + id("androidx.navigation.safeargs") +} + +android { + + signingConfigs { + + create("release") { + + val keystoreProperties = Properties().apply { + load(rootProject.file("./keystore.properties").reader()) + } + + if (keystoreProperties.isNotEmpty()) { + storePassword = keystoreProperties["storePassword"] as String + keyPassword = keystoreProperties["keyPassword"] as String + keyAlias = keystoreProperties["keyAlias"] as String + storeFile = file(keystoreProperties["storeFile"] as String) + } + } + } + + compileSdk = 33 + + defaultConfig { + // App ID + applicationId = "com.dzeio.openhealth" + + // Android 5 Lollipop + minSdk = 21 + + // Android 12 + targetSdk = 33 + + // Semantic Versioning + versionName = "1.0.0" + versionCode = 1 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + + // Languages + val locales = listOf("en", "fr") + + buildConfigField( + "String[]", + "LOCALES", + "new String[]{\"" + locales.joinToString("\",\"") + "\"}" + ) + resourceConfigurations += locales + } + + buildTypes { + + getByName("release") { + // Slimmer version + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + signingConfig = signingConfigs.getByName("release") + } + + getByName("debug") { + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + applicationIdSuffix = ".dev" + versionNameSuffix = "-dev" + isDebuggable = true + + // make it debuggable + isRenderscriptDebuggable = true + + // Optimization Level + renderscriptOptimLevel = 0 + } + } + + // Compile using JAVA 8 + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = "1.8" + } + + // Enable View Binding and Data Binding + buildFeatures { + viewBinding = true + dataBinding = true + } + namespace = "com.dzeio.openhealth" +} + +dependencies { + // Dzeio Charts + implementation(project(":charts")) +// implementation(project(":CrashHandler")) + + implementation("com.dzeio:crashhandler:1.0.1") + + // Core dependencies + implementation("androidx.core:core-ktx:1.8.0") + implementation("androidx.appcompat:appcompat:1.6.0-alpha05") + implementation("javax.inject:javax.inject:1") + implementation("com.google.android.material:material:1.7.0-alpha03") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.5.1") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1") + +// implementation("com.github.Aviortheking:crashhandler:0.2.3") + + // Coroutines + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") + + // Settings + implementation("androidx.preference:preference-ktx:1.2.0") + + // DataStore + implementation("androidx.datastore:datastore:1.0.0") + + // Navigation + implementation("androidx.navigation:navigation-fragment-ktx:2.5.1") + implementation("androidx.navigation:navigation-ui-ktx:2.5.1") + + // Paging + implementation("androidx.paging:paging-runtime:3.1.1") + implementation("androidx.paging:paging-runtime-ktx:3.1.1") + + + // Services + implementation("androidx.work:work-runtime-ktx:2.7.1") + + // Tests + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.3") + androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") + + // Graph + implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + + // Graphs test 2 + implementation("com.github.HackPlan:AndroidCharts:1.0.4") + + // Hilt + implementation("com.google.dagger:hilt-android:2.43.2") + kapt("com.google.dagger:hilt-compiler:2.43.2") + + // Google Fit + implementation("com.google.android.gms:play-services-fitness:21.1.0") + implementation("com.google.android.gms:play-services-auth:20.2.0") + + // Samsung Health + implementation(files("libs/samsung-health-data-1.5.0.aar")) + implementation("com.google.code.gson:gson:2.9.1") + + // ROOM + implementation("androidx.room:room-runtime:2.4.3") + kapt("androidx.room:room-compiler:2.4.3") + implementation("androidx.room:room-ktx:2.4.3") + testImplementation("androidx.room:room-testing:2.4.3") + + // Futures + implementation("com.google.guava:guava:31.1-jre") + implementation("androidx.concurrent:concurrent-futures:1.1.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.4") +} 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/debug/res/drawable-v24/ic_launcher_foreground.xml b/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml index 5ec3d6a..f46d79a 100644 --- a/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml +++ b/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml @@ -1,7 +1,7 @@ - - + + + diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 7353dbd..0000000 --- a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index c33435841b2665cd8b87f2dd001f8ee0f878bd8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4358 zcmV+h5&7$;<%yRsAzV&wKs4f7AVS zf8TpUuUkOpF9{&Po3njLHX)29q8l zJtBnnC>x+Z9@bTzzX%iGc3)lDJ)|k54WutgXGz(litE>}*ORUZ;eCbp49DPDcX94L zx;ncx8gIIZ2CLJ6-rq-BO8SXprj9eHwY9ZdlINig(lJrzeVXfF`dWM;x0K;qWSSvQ z?AcE-l7P0T_=2~Jskf)xe5$*i)&2OTo=>t)*4aTZ;swiCIzDP8Yr@Z zFvIBRrX*E}mkC(7=H&L;bkj_HTYS{e>qydfS}^)=-2u8TuEGB;K%osI_3gXiMi=g< zdB28qRe+I=b|e_REUrn`h&Hv?)*E8-g7kU^K{=rrG0p8X{)S4nLHNCsXrs2x4mS;) zv7|gSL^KL!Xz)!E{FDThckSA>$F*&Dm@(n_nwy)aVi;@S=o@%TNYl2)D_5@kRoe%< zo1{+{eFc+TG(dHbx2j|t>4jBSSI^e=#cn1mq>=NIJ>WF8G_i)}dRE^};XHj^)(CCI zXs7nGva+)2+CJHAa!ArVhRJF*i5&kJ`TV*jU>h#~IE}_#B(yK(Uu&*@g^v=6-%X z*ZTBzTg3fdsv^ozS9c^K)z{bOr=+CZrR`&n zOrA{j@}<1RP7XQtatw19fYzrIq;z^uuj|tw0+qUsy`4g!2om6|Avmj(R

8NJCxS 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 A>;M1& diff --git a/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 3d45a57b99b479b92a4643696eab37d46600ccca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2686 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 diff --git a/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 32e2771343e548b7a22296e126f609f29e5fd944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9416 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 diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 8c77946c3176ebcd9c5d942cf1dfe0237d0f81b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13275 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 - OpenHealth - Debug + Open Health - Debug diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9b99bee..598e614 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ - + + + + @@ -15,11 +18,11 @@ @@ -44,14 +47,22 @@ - - - + + + + + + diff --git a/app/src/main/java/com/dzeio/openhealth/Application.kt b/app/src/main/java/com/dzeio/openhealth/Application.kt index 38ae96d..491b442 100644 --- a/app/src/main/java/com/dzeio/openhealth/Application.kt +++ b/app/src/main/java/com/dzeio/openhealth/Application.kt @@ -1,16 +1,13 @@ package com.dzeio.openhealth import android.app.Application -import android.content.Intent -import android.content.SharedPreferences -import android.os.Process -import android.util.Log +import android.content.Context import androidx.preference.PreferenceManager +import com.dzeio.crashhandler.CrashHandler import com.dzeio.openhealth.ui.ErrorActivity +import com.dzeio.openhealth.utils.LocaleUtils import com.google.android.material.color.DynamicColors import dagger.hilt.android.HiltAndroidApp -import java.util.Locale -import kotlin.system.exitProcess @HiltAndroidApp class Application : Application() { @@ -20,42 +17,24 @@ class Application : Application() { override fun onCreate() { - // Application Error Handling - Thread.setDefaultUncaughtExceptionHandler { paramThread, paramThrowable -> - //Log error to logcat if it wasn't done before - Log.e(TAG, "En error was detected in the Thread ${paramThread.id}, trying to go to ErrorActivity") + val prefs = PreferenceManager.getDefaultSharedPreferences(this) - // send use to the Error Activity - val intent = Intent(applicationContext, ErrorActivity::class.java) - - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) - intent.putExtra("error", paramThrowable.stackTraceToString()) - intent.putExtra("threadId", paramThread.id) - startActivity(intent) - Log.e(TAG, "Activity should have started") - - Process.killProcess(Process.myPid()) - exitProcess(10) - } + CrashHandler.Builder() + .withActivity(ErrorActivity::class.java) + .withPrefs(prefs) + .witheErrorReporterCrashKey(R.string.error_reporter_crash) + .withPrefsKey(Settings.CRASH_LAST_TIME) + .withPrefix("${BuildConfig.APPLICATION_ID} v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})") + .build() + .setup(this) // Android Dynamics Colors DynamicColors.applyToActivitiesIfAvailable(this) - // Change application Language based on setting - val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) - val lang = preferences.getString("global_language", Locale.getDefault().language) - if (lang == null) { - Log.e(TAG, "lang is null") - } else { - val locale = Locale(lang) - Locale.setDefault(locale) - } - -// val overrideConfiguration = baseContext.resources.configuration -// overrideConfiguration.locale = locale -// val context: Context = createConfigurationContext(overrideConfiguration) -// val resources: Resources = context.resources - super.onCreate() } + + override fun attachBaseContext(base: Context) { + super.attachBaseContext(LocaleUtils.onAttach(base)) + } } diff --git a/app/src/main/java/com/dzeio/openhealth/Settings.kt b/app/src/main/java/com/dzeio/openhealth/Settings.kt new file mode 100644 index 0000000..7f23c07 --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/Settings.kt @@ -0,0 +1,19 @@ +package com.dzeio.openhealth + +object Settings { + + /** + * get the last time the Application has crashed + * + * type: Long + */ + const val CRASH_LAST_TIME = "com.dzeio.open-health.crash.last_time" + + /** + * The software override application language + * + * note: also change it in `preferences.xml` + */ + const val APP_LANGUAGE = "com.dzeio.open-health.app.language" + +} \ No newline at end of file diff --git a/app/src/main/java/com/dzeio/openhealth/data/step/StepSource.kt b/app/src/main/java/com/dzeio/openhealth/data/step/StepSource.kt index 79a8e6c..f8a2d1e 100644 --- a/app/src/main/java/com/dzeio/openhealth/data/step/StepSource.kt +++ b/app/src/main/java/com/dzeio/openhealth/data/step/StepSource.kt @@ -10,8 +10,6 @@ import android.util.Log import androidx.preference.PreferenceManager import com.dzeio.openhealth.Application import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking class StepSource( @@ -78,7 +76,9 @@ class StepSource( timeSinceLastRecord = timeSinceLastBoot runBlocking { - events.send(diff) + if (events != null) { + events.send(diff) + } } callback?.invoke(diff) } diff --git a/app/src/main/java/com/dzeio/openhealth/services/OpenHealthService.kt b/app/src/main/java/com/dzeio/openhealth/services/OpenHealthService.kt index 70c4a48..461da37 100644 --- a/app/src/main/java/com/dzeio/openhealth/services/OpenHealthService.kt +++ b/app/src/main/java/com/dzeio/openhealth/services/OpenHealthService.kt @@ -120,9 +120,9 @@ class OpenHealthService : Service() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_IMMUTABLE else 0 val intent = NavDeepLinkBuilder(this) .setGraph(R.navigation.mobile_navigation) - .setDestination(R.id.nav_home) - // Will nav to water home when there will be a way to add it there -// .setDestination(R.id.nav_water_home) +// .setDestination(R.id.nav_home) +// Will nav to water home when there will be a way to add it there + .setDestination(R.id.nav_steps_home) .createTaskStackBuilder() .getPendingIntent(0, flag) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt index 676df6f..77dcfd6 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/ErrorActivity.kt @@ -17,7 +17,7 @@ import kotlin.system.exitProcess class ErrorActivity : BaseActivity() { companion object { - const val TAG = "${Application.TAG}/ErrorActivity" + const val TAG = "${Application.TAG}/ErrorActivit" } override val bindingInflater: (LayoutInflater) -> ActivityErrorBinding = diff --git a/app/src/main/java/com/dzeio/openhealth/ui/MainActivity.kt b/app/src/main/java/com/dzeio/openhealth/ui/MainActivity.kt index aee042b..302b907 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/MainActivity.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/MainActivity.kt @@ -1,6 +1,5 @@ package com.dzeio.openhealth.ui -import android.app.ActivityManager import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context @@ -12,7 +11,9 @@ import android.util.Log import android.view.LayoutInflater import android.view.Menu import android.view.MenuItem +import android.view.WindowManager import androidx.core.view.WindowCompat +import androidx.core.view.updatePadding import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.AppBarConfiguration @@ -26,8 +27,8 @@ import com.dzeio.openhealth.core.BaseActivity import com.dzeio.openhealth.databinding.ActivityMainBinding import com.dzeio.openhealth.interfaces.NotificationChannels import com.dzeio.openhealth.services.OpenHealthService +import com.dzeio.openhealth.utils.ServiceUtils import com.dzeio.openhealth.workers.WaterReminderWorker -import com.google.android.material.color.MaterialColors import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -55,28 +56,52 @@ class MainActivity : BaseActivity() { setSupportActionBar(binding.toolbar) - window.navigationBarColor = MaterialColors.getColor( - window.decorView, - com.google.android.material.R.attr.colorSecondaryContainer - ) - window.statusBarColor = MaterialColors.getColor( - window.decorView, - com.google.android.material.R.attr.colorSecondaryContainer - ) + // Comportement chelou API 28- + // Comportement normal 31+ - when (this.resources.configuration.uiMode.and(Configuration.UI_MODE_NIGHT_MASK)) { - Configuration.UI_MODE_NIGHT_YES -> { - WindowCompat.getInsetsController(window, window.decorView).apply { - isAppearanceLightNavigationBars = true - isAppearanceLightStatusBars = false - } - } - Configuration.UI_MODE_NIGHT_NO, Configuration.UI_MODE_NIGHT_UNDEFINED -> { - WindowCompat.getInsetsController(window, window.decorView).apply { - isAppearanceLightNavigationBars = false - isAppearanceLightStatusBars = true + // do not do the cool status/navigation bars for API 29 & 30 + if (Build.VERSION.SDK_INT != Build.VERSION_CODES.R && Build.VERSION.SDK_INT != Build.VERSION_CODES.Q) { + // allow to put the content behind the status bar & Navigation bar (one of them at least lul) + // ALSO: make the status/navigation bars semi-transparent + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + + // Make the color of the navigation bar semi-transparent +// window.navigationBarColor = Color.TRANSPARENT + // Make the color of the status bar transparent +// window.statusBarColor = Color.TRANSPARENT + // Apply the previous changes +// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + + // Update toolbar height with the statusbar size included + // ALSO: make both the status/navigation bars transparent (WHYYYYYYY) + val toolbarHeight = binding.toolbar.layoutParams.height + window.decorView.setOnApplyWindowInsetsListener { _, insets -> + val statusBarSize = insets.systemWindowInsetTop + // Add padding to the toolbar (YaY I know how something works) + binding.toolbar.updatePadding(top = statusBarSize) + binding.toolbar.layoutParams.height = toolbarHeight + statusBarSize + return@setOnApplyWindowInsetsListener insets + } + + // normally makes sure icons are at the correct color but idk if it works + when (this.resources.configuration.uiMode.and(Configuration.UI_MODE_NIGHT_MASK)) { + Configuration.UI_MODE_NIGHT_YES -> { + WindowCompat.getInsetsController(window, window.decorView).apply { + // force to display the bars in light color + isAppearanceLightNavigationBars = true + isAppearanceLightStatusBars = false // WHY + } + } + Configuration.UI_MODE_NIGHT_NO, Configuration.UI_MODE_NIGHT_UNDEFINED -> { + WindowCompat.getInsetsController(window, window.decorView).apply { + // force to display the bars in dark color + isAppearanceLightNavigationBars = false + isAppearanceLightStatusBars = true // WHY + } } } + } val navHostFragment = @@ -108,20 +133,9 @@ class MainActivity : BaseActivity() { WaterReminderWorker.setup(this) // StepCountService.setup(this) - this.betterStartService(OpenHealthService::class.java) + ServiceUtils.startService(this, OpenHealthService::class.java) } - private fun betterStartService(service: Class) { - val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager - for (runninService in activityManager.getRunningServices(Integer.MAX_VALUE)) { - if (service.name.equals(runninService.service.className)) { - Log.w(TAG, "Service already existing, not starting again") - return - } - } - Log.i(TAG, "Starting service ${service.name}") - Intent(this, service).also { intent -> startService(intent) } - } override fun onCreateOptionsMenu(menu: Menu): Boolean { super.onCreateOptionsMenu(menu) diff --git a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt index b8110dd..c62e087 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/browse/BrowseFragment.kt @@ -31,9 +31,9 @@ class BrowseFragment : private lateinit var button: MaterialCardView private val activityResult = registerForActivityResult( - ActivityResultContracts.RequestPermission() + ActivityResultContracts.RequestMultiplePermissions() ) { - if (!it) { + if (it.containsValue(false)) { // TODO: Show a popup with choice to change it Toast.makeText(requireContext(), R.string.permission_declined, Toast.LENGTH_LONG).show() return@registerForActivityResult @@ -55,14 +55,29 @@ class BrowseFragment : binding.steps.setOnClickListener { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val hasPermission = PermissionsManager.hasPermission( + val activityPermission = PermissionsManager.hasPermission( requireContext(), Manifest.permission.ACTIVITY_RECOGNITION ) - if (!hasPermission) { + val notificationPermission = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && PermissionsManager.hasPermission( + requireContext(), + Manifest.permission.POST_NOTIFICATIONS + ) + + val permissionsToAsk = arrayListOf() + + if (!activityPermission) { + permissionsToAsk.add(Manifest.permission.ACTIVITY_RECOGNITION) + } + + if (!notificationPermission && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissionsToAsk.add(Manifest.permission.POST_NOTIFICATIONS) + } + + if (permissionsToAsk.isNotEmpty()) { button = binding.steps - activityResult.launch(Manifest.permission.ACTIVITY_RECOGNITION) + activityResult.launch(permissionsToAsk.toTypedArray()) return@setOnClickListener } } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt index 1e33b0c..1aef91b 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/home/HomeFragment.kt @@ -5,9 +5,7 @@ import android.content.SharedPreferences import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.RectF -import android.os.Bundle import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController @@ -37,9 +35,8 @@ class HomeFragment : BaseFragment(HomeViewMo PreferenceManager.getDefaultSharedPreferences(requireContext()) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - + override fun onStart() { + super.onStart() // Bindings binding.addWeight.setOnClickListener { AddWeightDialog().show(requireActivity().supportFragmentManager, null) @@ -56,10 +53,12 @@ class HomeFragment : BaseFragment(HomeViewMo viewModel.updateWater(water) } } + val waterUnit = + UnitFactory.volume(settings.getString("water_unit", "milliliter") ?: "Milliliter") binding.fragmentHomeWaterTotal.text = String.format( - resources.getString(viewModel.waterUnit.unit), + resources.getString(waterUnit.unit), viewModel.dailyWaterIntake ) @@ -94,6 +93,21 @@ class HomeFragment : BaseFragment(HomeViewMo com.google.android.material.R.attr.colorOnBackground ) ) + + lifecycleScope.launchWhenStarted { + viewModel.fetchWeights().collectLatest { + updateGraph(it) + } + updateWater(0) + } + + viewModel.water.observe(viewLifecycleOwner) { + if (it != null) { + updateWater(it.value) + } else { + updateWater(0) + } + } } private fun updateGraph(list: List) { @@ -119,25 +133,6 @@ class HomeFragment : BaseFragment(HomeViewMo // } } - override fun onStart() { - super.onStart() - - lifecycleScope.launchWhenStarted { - viewModel.fetchWeights().collectLatest { - updateGraph(it) - } - updateWater(0) - } - - viewModel.water.observe(viewLifecycleOwner) { - if (it != null) { - updateWater(it.value) - } else { - updateWater(0) - } - } - } - private var oldValue = 0f private fun updateWater(newValue: Int) { @@ -151,6 +146,12 @@ class HomeFragment : BaseFragment(HomeViewMo (newValue * waterUnit.modifier).toInt() ) + binding.fragmentHomeWaterTotal.text = + String.format( + resources.getString(waterUnit.unit), + viewModel.dailyWaterIntake + ) + var width = 1500 var height = 750 diff --git a/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt index f6a29b3..5fc4988 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/settings/SettingsFragment.kt @@ -1,7 +1,7 @@ package com.dzeio.openhealth.ui.settings import android.content.SharedPreferences -import android.content.res.Configuration +import android.os.Build import android.os.Bundle import android.text.InputType import android.util.Log @@ -9,13 +9,20 @@ import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.dzeio.openhealth.Application import com.dzeio.openhealth.BuildConfig import com.dzeio.openhealth.R +import com.dzeio.openhealth.Settings import com.dzeio.openhealth.units.UnitFactory +import com.dzeio.openhealth.utils.LocaleUtils import java.util.Locale class SettingsFragment : PreferenceFragmentCompat() { + private companion object { + const val TAG = "${Application.TAG}/SttngsFrgmnt" + } + val settings: SharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(requireContext()) } @@ -71,8 +78,8 @@ class SettingsFragment : PreferenceFragmentCompat() { } } - val languagesPreference = findPreference("global_language") - Log.d("TAG", Locale.getDefault().language) + val languagesPreference = findPreference(Settings.APP_LANGUAGE) + Log.d(TAG, Locale.getDefault().language) languagesPreference?.apply { entries = BuildConfig.LOCALES entryValues = BuildConfig.LOCALES @@ -81,17 +88,10 @@ class SettingsFragment : PreferenceFragmentCompat() { // Update App Locale languagesPreference?.setOnPreferenceChangeListener { _, newValue -> - val locale = Locale(newValue as String) - Locale.setDefault(locale) - val config = Configuration() - config.locale = locale - - requireActivity().baseContext.resources.updateConfiguration( - config, - requireActivity().baseContext.resources.displayMetrics - ) - - requireActivity().recreate() + LocaleUtils.setLanguage(requireContext(), newValue as String) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + requireActivity().recreate() + } return@setOnPreferenceChangeListener true } diff --git a/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt b/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt index 0d166b6..434b4b0 100644 --- a/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt +++ b/app/src/main/java/com/dzeio/openhealth/ui/steps/StepsHomeFragment.kt @@ -13,9 +13,6 @@ import com.dzeio.openhealth.core.BaseFragment import com.dzeio.openhealth.databinding.FragmentStepsHomeBinding import com.google.android.material.color.MaterialColors import dagger.hilt.android.AndroidEntryPoint -import java.text.DateFormat -import java.util.Date -import java.util.Locale @AndroidEntryPoint class StepsHomeFragment : @@ -50,66 +47,64 @@ class StepsHomeFragment : val chart = binding.chart - val serie = BarSerie() + val serie = BarSerie(chart) chart.series = arrayListOf(serie) viewModel.items.observe(viewLifecycleOwner) { list -> adapter.set(list) -// chart.debug = true - - chart.xAxis.entriesDisplayed = 10 -// chart.numberOfLabels = 2 + chart.debug = true // chart.animation.enabled = false - chart.animation.refreshRate = 60 - chart.animation.duration = 300 +// chart.animation.refreshRate = 60 +// chart.animation.duration = 300 - chart.scroller.zoomEnabled = false +// chart.scroller.zoomEnabled = false - chart.xAxis.labels.color = MaterialColors.getColor( - requireView(), - com.google.android.material.R.attr.colorOnBackground - ) +// chart.xAxis.labels.color = MaterialColors.getColor( +// requireView(), +// com.google.android.material.R.attr.colorOnBackground +// ) - chart.xAxis.labels.size = 32f +// chart.xAxis.labels.size = 32f chart.yAxis.apply { - color = MaterialColors.getColor( - requireView(), - com.google.android.material.R.attr.colorPrimary - ) - textPaint.color = MaterialColors.getColor( + setYMin(0f) + textLabel.color = MaterialColors.getColor( requireView(), com.google.android.material.R.attr.colorOnBackground ) - linePaint.color = MaterialColors.getColor( - requireView(), - com.google.android.material.R.attr.colorOutline - ) - onValueFormat = onValueFormat@{ value, short -> - if (short) { - return@onValueFormat value.toInt().toString() - } else { - return@onValueFormat "${value.toInt()} steps" - } - } +// linePaint.color = MaterialColors.getColor( +// requireView(), +// com.google.android.material.R.attr.colorOutline +// ) +// onValueFormat = onValueFormat@{ value, short -> +// if (short) { +// return@onValueFormat value.toInt().toString() +// } else { +// return@onValueFormat "${value.toInt()} steps" +// } +// } } - serie.datas = list.reversed().map { + serie.entries = list.reversed().map { return@map Entry(it.timestamp.toDouble(), it.value.toFloat()) } as ArrayList - chart.xAxis.onValueFormat = onValueFormat@{ - val formatter = DateFormat.getDateTimeInstance( - DateFormat.SHORT, - DateFormat.SHORT, - Locale.getDefault() - ) - return@onValueFormat formatter.format(Date(it.toLong())) + chart.xAxis.apply { + increment = (1000 * 60 * 60).toDouble() + displayCount = 24 * 7 + x = serie.entries.first().x } -// chart.yAxis.max = (total / list.size).toInt() +// chart.xAxis.onValueFormat = onValueFormat@{ +// val formatter = DateFormat.getDateTimeInstance( +// DateFormat.SHORT, +// DateFormat.SHORT, +// Locale.getDefault() +// ) +// return@onValueFormat formatter.format(Date(it.toLong())) +// } chart.refresh() } diff --git a/app/src/main/java/com/dzeio/openhealth/utils/LocaleUtils.kt b/app/src/main/java/com/dzeio/openhealth/utils/LocaleUtils.kt new file mode 100644 index 0000000..70819d5 --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/utils/LocaleUtils.kt @@ -0,0 +1,76 @@ +package com.dzeio.openhealth.utils + +import android.app.LocaleManager +import android.content.Context +import android.content.res.Configuration +import android.os.Build +import android.os.LocaleList +import android.util.Log +import androidx.preference.PreferenceManager +import com.dzeio.openhealth.Settings +import java.util.Locale + + +/** + * Utils object for [Locale] + * + * @see https://github.com/gunhansancar/ChangeLanguageExample/blob/master/app/src/main/java/com/gunhansancar/changelanguageexample/helper/LocaleHelper.java + */ +object LocaleUtils { + fun onAttach(context: Context): Context { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + val lang = getPersistedData(context) + return setLanguage(context, lang) + } + return context + } + + fun getLanguage(context: Context): String { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return context.getSystemService(LocaleManager::class.java) + .applicationLocales.get(0).language + } + return getPersistedData(context) + } + + fun setLanguage(context: Context, language: String): Context { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.getSystemService(LocaleManager::class.java) + .applicationLocales = + LocaleList.forLanguageTags(language) + } + persist(context, language) + return updateResources(context, language) + } + + private fun getPersistedData(context: Context): String { + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + return preferences.getString(Settings.APP_LANGUAGE, Locale.getDefault().language) + ?: Locale.getDefault().language + } + + private fun persist(context: Context, language: String?) { + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + preferences.edit().putString(Settings.APP_LANGUAGE, language).apply() + } + + private fun updateResources(context: Context, language: String): Context { + Log.d("LocaleUtils", language) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val locale = Locale(language) + Locale.setDefault(locale) + val configuration = context.resources.configuration + configuration.setLocale(locale) + configuration.setLayoutDirection(locale) + return context.createConfigurationContext(configuration) + } + val locale = Locale(language) + Locale.setDefault(locale) + val resources = context.resources + val configuration: Configuration = resources.configuration + configuration.locale = locale + configuration.setLayoutDirection(locale) + resources.updateConfiguration(configuration, resources.displayMetrics) + return context + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dzeio/openhealth/utils/PermissionsManager.kt b/app/src/main/java/com/dzeio/openhealth/utils/PermissionsManager.kt index 0014a1e..a8c6a76 100644 --- a/app/src/main/java/com/dzeio/openhealth/utils/PermissionsManager.kt +++ b/app/src/main/java/com/dzeio/openhealth/utils/PermissionsManager.kt @@ -2,10 +2,20 @@ package com.dzeio.openhealth.utils import android.content.Context import android.content.pm.PackageManager +import android.os.Build +import androidx.core.content.ContextCompat object PermissionsManager { - fun hasPermission(context: Context, permission: String): Boolean = context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED + fun hasPermission(context: Context, permission: String): Boolean = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED + } else { + ContextCompat.checkSelfPermission( + context, + permission + ) == PackageManager.PERMISSION_GRANTED + } fun hasPermission(context: Context, permissions: Array): Boolean { for (permission in permissions) { diff --git a/app/src/main/java/com/dzeio/openhealth/utils/ServiceUtils.kt b/app/src/main/java/com/dzeio/openhealth/utils/ServiceUtils.kt new file mode 100644 index 0000000..4413afe --- /dev/null +++ b/app/src/main/java/com/dzeio/openhealth/utils/ServiceUtils.kt @@ -0,0 +1,21 @@ +package com.dzeio.openhealth.utils + +import android.app.ActivityManager +import android.content.Context +import android.content.Intent +import android.util.Log +import com.dzeio.openhealth.ui.MainActivity + +object ServiceUtils { + fun startService(context: Context, service: Class) { + val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + for (runninService in activityManager.getRunningServices(Integer.MAX_VALUE)) { + if (service.name.equals(runninService.service.className)) { + Log.w(MainActivity.TAG, "Service already existing, not starting again") + return + } + } + Log.i(MainActivity.TAG, "Starting service ${service.name}") + Intent(context, service).also { intent -> context.startService(intent) } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2ffcc7d..be7f15c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,6 +2,7 @@ @@ -14,28 +15,32 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" + android:fitsSystemWindows="false" tools:context=".ui.MainActivity"> + android:layout_height="wrap_content" + android:fitsSystemWindows="false"> + android:fitsSystemWindows="false" + android:background="@android:color/transparent" + app:titleCentered="true" + app:layout_collapseMode="pin" + android:elevation="0dp" /> @@ -59,6 +64,7 @@ + android:layout_marginBottom="16dp" + app:cardBackgroundColor="?attr/colorOnSurfaceInverse"> + android:paddingVertical="8dp" + android:src="@drawable/ic_outline_favorite_24" + app:backgroundTint="@android:color/transparent" + app:tint="?attr/colorSurfaceInverse" /> + android:text="Heart Rate" + android:textColor="?attr/colorSurfaceInverse" /> + + + @@ -209,10 +217,9 @@ + app:backgroundTint="@android:color/transparent" + app:tint="?attr/colorSurfaceInverse" /> diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index f775b2c..d949f54 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -17,9 +17,8 @@ style="?attr/materialCardViewFilledStyle" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginHorizontal="16dp" android:layout_marginTop="16dp" - android:layout_marginEnd="16dp" android:layout_weight="1"> + android:orientation="horizontal"> - - - - + @@ -90,17 +82,23 @@ + android:textAlignment="center" + android:textColor="?attr/colorPrimary" /> + @@ -135,6 +133,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -153,9 +258,8 @@ style="?attr/materialCardViewFilledStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="16dp" - android:layout_marginTop="16dp" - android:layout_marginEnd="16dp"> + android:layout_marginHorizontal="16dp" + android:layout_marginTop="16dp"> + 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 deleted file mode 100644 index 7353dbd..0000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index a4b162cb2d4c960ac29d9ee5851e4c636f477009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4168 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 SJtx!v0000a5MrIJxf2~grGkgF0 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 M07*qoM6N<$f}PIdc>n+a diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index ead7fc935d18671feb3c4ba58af7554bc13a078e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5946 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 9bcd7974a5beb3e13a9d26431cf98d1f2a7bb3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9046 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index f6274b003d4a3c0abf02f9b3acb15d0f2944c4c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13253 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 diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 8043ba8..e28e400 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -170,7 +170,7 @@ app:destination="@id/nav_list_weight" /> + app:destination="@id/nav_steps_home" /> @@ -180,7 +180,7 @@ android:label="@string/menu_activity" tools:layout="@layout/fragment_activity" /> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index be35cd3..e0f0b41 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -47,4 +47,7 @@ Envoyer par Email Envoyer depuis Github Quitter + Pas pris + Erreur lors de la géneration d\'un rapport d\'erreur + diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index fb9b599..a4e53a7 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,3 +1,4 @@ + - -