From 43890d430bc096cfa7831e4c928de5f8bf65f533 Mon Sep 17 00:00:00 2001 From: Tom Hempel Date: Wed, 24 Jun 2026 16:51:26 +0200 Subject: [PATCH] prototype changes for demo --- app/build.gradle.kts | 4 +- app/src/main/AndroidManifest.xml | 4 +- .../rbarometer}/MainActivity.kt | 44 +- .../test1 => tomhempel/rbarometer}/MyApp.kt | 6 +- .../rbarometer}/data/AnswerRepository.kt | 6 +- .../rbarometer}/data/AppDatabase.kt | 2 +- .../rbarometer}/data/ClientAnswersCache.kt | 2 +- .../rbarometer}/data/ClientRepository.kt | 6 +- .../data/CoachScoringReviewRepository.kt | 6 +- .../data/CompletedQuestionnaireRepository.kt | 6 +- .../rbarometer}/data/Daos.kt | 2 +- .../rbarometer}/data/Entities.kt | 2 +- .../data/PendingUploadRepository.kt | 2 +- .../data/UnuploadedWorkRepository.kt | 2 +- .../rbarometer}/network/ApiModels.kt | 2 +- .../network/ClientAnswerSyncStore.kt | 4 +- .../rbarometer}/network/DatabaseUploader.kt | 14 +- .../rbarometer}/network/HttpModule.kt | 2 +- .../rbarometer}/network/LoginManager.kt | 2 +- .../rbarometer}/network/NetworkUtilis.kt | 2 +- .../network/QuestionnaireAnswerSync.kt | 26 +- .../network/QuestionnaireApiClient.kt | 4 +- .../rbarometer}/network/QuestionnaireCache.kt | 16 +- .../network/QuestionnaireSubmitMapper.kt | 8 +- .../network/QuestionnaireSyncService.kt | 12 +- .../rbarometer}/network/SyncCoordinator.kt | 4 +- .../rbarometer}/network/SyncLog.kt | 4 +- .../rbarometer}/network/SyncProgress.kt | 2 +- .../rbarometer}/network/SyncProgressPacer.kt | 2 +- .../rbarometer}/network/TokenStore.kt | 2 +- .../notification/UploadReminderReceiver.kt | 8 +- .../notification/UploadReminderScheduler.kt | 4 +- .../questionnaire/AnswerKeyUtils.kt | 2 +- .../rbarometer}/questionnaire/AnswerLookup.kt | 2 +- .../questionnaire/AnswerRestoreHelper.kt | 4 +- .../rbarometer}/questionnaire/AppLanguages.kt | 4 +- .../questionnaire/ClientAssignmentGuard.kt | 4 +- .../questionnaire/ConditionJsonParser.kt | 2 +- .../questionnaire/QuestionFlowResolver.kt | 4 +- .../questionnaire/QuestionHandler.kt | 2 +- .../questionnaire/QuestionHandlerFactory.kt | 22 +- .../questionnaire/QuestionNotesHelper.kt | 8 +- .../questionnaire/QuestionnaireAllInOne.kt | 32 +- .../questionnaire/QuestionnaireBase.kt | 8 +- .../QuestionnaireCompletionService.kt | 4 +- .../questionnaire/QuestionnaireGeneric.kt | 8 +- .../questionnaire/QuestionnaireItem.kt | 2 +- .../questionnaire/QuestionnaireJsonLoader.kt | 4 +- .../questionnaire/QuestionnairePersistence.kt | 26 +- .../QuestionnaireProgressiveCallbacks.kt | 2 +- .../QuestionnaireTranslationsLoader.kt | 4 +- .../questionnaire/QuestionnaireValidation.kt | 6 +- .../questionnaire/SavedAnswerLoader.kt | 4 +- .../questionnaire/SpinnerAnswerRules.kt | 4 +- .../questionnaire/SpinnerSelectionHelper.kt | 6 +- .../handlers/HandlerClientCoachCode.kt | 22 +- .../handlers/HandlerDateSpinner.kt | 30 +- .../questionnaire/handlers/HandlerFreeText.kt | 22 +- .../handlers/HandlerGlassScaleQuestion.kt | 18 +- .../questionnaire/handlers/HandlerLastPage.kt | 22 +- .../handlers/HandlerMultiCheckboxQuestion.kt | 18 +- .../handlers/HandlerRadioQuestion.kt | 18 +- .../handlers/HandlerSliderQuestion.kt | 16 +- .../handlers/HandlerStringSpinner.kt | 24 +- .../handlers/HandlerValueSpinner.kt | 24 +- .../scoring/LocalScoringReviewBuilder.kt | 16 +- .../scoring/ProfileScoringEngine.kt | 4 +- .../scoring/QuestionnaireScoreCalculator.kt | 2 +- .../security/SensitiveDataCrypto.kt | 2 +- .../security/SessionPayloadCrypto.kt | 2 +- .../rbarometer}/ui/AbTestSettingsStore.kt | 2 +- .../rbarometer}/ui/AppLanguageStore.kt | 4 +- .../rbarometer}/ui/AuthActivity.kt | 20 +- .../rbarometer}/ui/ClientPickerBottomSheet.kt | 6 +- .../rbarometer}/ui/ClientRecentStore.kt | 2 +- .../rbarometer/ui/DashboardHandler.kt | 404 ++++++++++++++++++ .../rbarometer}/ui/DevSettingsAccess.kt | 4 +- .../rbarometer}/ui/DevSettingsActivity.kt | 20 +- .../rbarometer}/ui/HandlerOpeningScreen.kt | 149 +++++-- .../rbarometer}/ui/LoadButtonHandler.kt | 26 +- .../rbarometer}/ui/LogoutDialogs.kt | 4 +- .../rbarometer}/ui/MonthsSpinner.kt | 4 +- .../ui/NotificationPermissionPrompter.kt | 4 +- .../rbarometer}/ui/QuestionnaireCardUi.kt | 6 +- .../rbarometer}/ui/ReviewScoresHandler.kt | 28 +- .../rbarometer}/ui/SessionLogout.kt | 14 +- .../rbarometer}/ui/SystemBarInsets.kt | 4 +- .../rbarometer}/ui/UploadOverviewHandler.kt | 30 +- .../rbarometer}/ui/localization/UiStrings.kt | 4 +- .../rbarometer}/utils/DateAnswerFormat.kt | 2 +- .../rbarometer}/utils/LanguageManager.kt | 2 +- .../rbarometer}/utils/ScreenLoading.kt | 4 +- .../rbarometer}/utils/SyncPhaseIcons.kt | 6 +- .../rbarometer}/utils/SyncProgressOverlay.kt | 8 +- .../rbarometer}/utils/SyncProgressTexts.kt | 4 +- .../rbarometer}/utils/TextInputSanitizer.kt | 2 +- .../rbarometer}/utils/ViewUtils.kt | 4 +- .../main/res/drawable/bg_session_metric.xml | 8 + .../res/drawable/ic_launcher_background.xml | 164 +------ .../res/drawable/ic_launcher_foreground.xml | 40 +- .../res/layout-sw360dp/opening_screen.xml | 104 ++++- app/src/main/res/layout/dashboard_screen.xml | 248 +++++++++++ app/src/main/res/layout/opening_screen.xml | 104 ++++- app/src/main/res/values-night/colors.xml | 22 +- app/src/main/res/values-night/themes.xml | 2 +- app/src/main/res/values/colors.xml | 30 +- app/src/main/res/values/strings.xml | 4 +- app/src/main/res/values/themes.xml | 4 +- 108 files changed, 1445 insertions(+), 668 deletions(-) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/MainActivity.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/MyApp.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/AnswerRepository.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/AppDatabase.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/ClientAnswersCache.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/ClientRepository.kt (90%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/CoachScoringReviewRepository.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/CompletedQuestionnaireRepository.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/Daos.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/Entities.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/PendingUploadRepository.kt (86%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/data/UnuploadedWorkRepository.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/ApiModels.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/ClientAnswerSyncStore.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/DatabaseUploader.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/HttpModule.kt (93%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/LoginManager.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/NetworkUtilis.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/QuestionnaireAnswerSync.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/QuestionnaireApiClient.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/QuestionnaireCache.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/QuestionnaireSubmitMapper.kt (96%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/QuestionnaireSyncService.kt (96%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/SyncCoordinator.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/SyncLog.kt (93%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/SyncProgress.kt (90%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/SyncProgressPacer.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/network/TokenStore.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/notification/UploadReminderReceiver.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/notification/UploadReminderScheduler.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/AnswerKeyUtils.kt (93%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/AnswerLookup.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/AnswerRestoreHelper.kt (91%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/AppLanguages.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/ClientAssignmentGuard.kt (84%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/ConditionJsonParser.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionFlowResolver.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionHandler.kt (77%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionHandlerFactory.kt (78%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionNotesHelper.kt (86%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireAllInOne.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireBase.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireCompletionService.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireGeneric.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireItem.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireJsonLoader.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnairePersistence.kt (84%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireProgressiveCallbacks.kt (84%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireTranslationsLoader.kt (80%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/QuestionnaireValidation.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/SavedAnswerLoader.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/SpinnerAnswerRules.kt (78%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/SpinnerSelectionHelper.kt (93%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerClientCoachCode.kt (90%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerDateSpinner.kt (91%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerFreeText.kt (88%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerGlassScaleQuestion.kt (96%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerLastPage.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerRadioQuestion.kt (91%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerSliderQuestion.kt (91%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerStringSpinner.kt (88%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/questionnaire/handlers/HandlerValueSpinner.kt (87%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/scoring/LocalScoringReviewBuilder.kt (85%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/scoring/ProfileScoringEngine.kt (94%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/scoring/QuestionnaireScoreCalculator.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/security/SensitiveDataCrypto.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/security/SessionPayloadCrypto.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/AbTestSettingsStore.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/AppLanguageStore.kt (89%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/AuthActivity.kt (95%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/ClientPickerBottomSheet.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/ClientRecentStore.kt (98%) create mode 100644 app/src/main/java/com/tomhempel/rbarometer/ui/DashboardHandler.kt rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/DevSettingsAccess.kt (74%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/DevSettingsActivity.kt (93%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/HandlerOpeningScreen.kt (88%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/LoadButtonHandler.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/LogoutDialogs.kt (99%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/MonthsSpinner.kt (92%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/NotificationPermissionPrompter.kt (96%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/QuestionnaireCardUi.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/ReviewScoresHandler.kt (96%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/SessionLogout.kt (85%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/SystemBarInsets.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/UploadOverviewHandler.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/ui/localization/UiStrings.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/DateAnswerFormat.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/LanguageManager.kt (98%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/ScreenLoading.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/SyncPhaseIcons.kt (85%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/SyncProgressOverlay.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/SyncProgressTexts.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/TextInputSanitizer.kt (97%) rename app/src/main/java/com/{dano/test1 => tomhempel/rbarometer}/utils/ViewUtils.kt (99%) create mode 100644 app/src/main/res/drawable/bg_session_metric.xml create mode 100644 app/src/main/res/layout/dashboard_screen.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dc63c87..0073a81 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -5,11 +5,11 @@ plugins { } android { - namespace = "com.dano.test1" + namespace = "com.tomhempel.rbarometer" compileSdk = 35 defaultConfig { - applicationId = "com.dano.test1" + applicationId = "com.tomhempel.rbarometer" minSdk = 29 targetSdk = 35 versionCode = 1 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index de469cc..a88e916 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + package="com.tomhempel.rbarometer"> @@ -19,7 +19,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.Test1" + android:theme="@style/Theme.Barometer" android:networkSecurityConfig="@xml/network_security_config" android:usesCleartextTraffic="false" tools:targetApi="31"> diff --git a/app/src/main/java/com/dano/test1/MainActivity.kt b/app/src/main/java/com/tomhempel/rbarometer/MainActivity.kt similarity index 94% rename from app/src/main/java/com/dano/test1/MainActivity.kt rename to app/src/main/java/com/tomhempel/rbarometer/MainActivity.kt index 2c92596..648362c 100644 --- a/app/src/main/java/com/dano/test1/MainActivity.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/MainActivity.kt @@ -1,4 +1,4 @@ -package com.dano.test1 +package com.tomhempel.rbarometer import android.Manifest import android.content.Context @@ -16,27 +16,27 @@ import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat -import com.dano.test1.LanguageManager -import com.dano.test1.ui.AppLanguageStore -import com.dano.test1.ui.NotificationPermissionPrompter -import com.dano.test1.ui.AuthActivity -import com.dano.test1.ui.HandlerOpeningScreen -import com.dano.test1.ui.LogoutDialogs -import com.dano.test1.ui.SessionLogout -import com.dano.test1.ui.SystemBarInsets -import com.dano.test1.utils.SyncProgressOverlay -import com.dano.test1.utils.SyncProgressTexts -import com.dano.test1.utils.ViewUtils -import com.dano.test1.data.PendingUploadRepository -import com.dano.test1.network.NetworkUtils -import com.dano.test1.network.QuestionnaireApiClient -import com.dano.test1.network.SyncLog -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.SyncCoordinator -import com.dano.test1.network.SyncProgress -import com.dano.test1.network.SyncResult -import com.dano.test1.network.TokenStore -import com.dano.test1.questionnaire.QuestionnaireBase +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.ui.AppLanguageStore +import com.tomhempel.rbarometer.ui.NotificationPermissionPrompter +import com.tomhempel.rbarometer.ui.AuthActivity +import com.tomhempel.rbarometer.ui.HandlerOpeningScreen +import com.tomhempel.rbarometer.ui.LogoutDialogs +import com.tomhempel.rbarometer.ui.SessionLogout +import com.tomhempel.rbarometer.ui.SystemBarInsets +import com.tomhempel.rbarometer.utils.SyncProgressOverlay +import com.tomhempel.rbarometer.utils.SyncProgressTexts +import com.tomhempel.rbarometer.utils.ViewUtils +import com.tomhempel.rbarometer.data.PendingUploadRepository +import com.tomhempel.rbarometer.network.NetworkUtils +import com.tomhempel.rbarometer.network.QuestionnaireApiClient +import com.tomhempel.rbarometer.network.SyncLog +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.SyncCoordinator +import com.tomhempel.rbarometer.network.SyncProgress +import com.tomhempel.rbarometer.network.SyncResult +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.questionnaire.QuestionnaireBase import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/dano/test1/MyApp.kt b/app/src/main/java/com/tomhempel/rbarometer/MyApp.kt similarity index 92% rename from app/src/main/java/com/dano/test1/MyApp.kt rename to app/src/main/java/com/tomhempel/rbarometer/MyApp.kt index 50e30d3..da106ac 100644 --- a/app/src/main/java/com/dano/test1/MyApp.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/MyApp.kt @@ -1,12 +1,12 @@ -package com.dano.test1 +package com.tomhempel.rbarometer import android.app.Application import android.util.Log import androidx.appcompat.app.AppCompatDelegate import androidx.room.Room import androidx.room.RoomDatabase -import com.dano.test1.data.AppDatabase -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.data.AppDatabase +import com.tomhempel.rbarometer.security.SensitiveDataCrypto /* MyApp (Application) diff --git a/app/src/main/java/com/dano/test1/data/AnswerRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/AnswerRepository.kt similarity index 94% rename from app/src/main/java/com/dano/test1/data/AnswerRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/AnswerRepository.kt index a2e8372..d72c789 100644 --- a/app/src/main/java/com/dano/test1/data/AnswerRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/AnswerRepository.kt @@ -1,7 +1,7 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data -import com.dano.test1.MyApp -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.security.SensitiveDataCrypto object AnswerRepository { diff --git a/app/src/main/java/com/dano/test1/data/AppDatabase.kt b/app/src/main/java/com/tomhempel/rbarometer/data/AppDatabase.kt similarity index 97% rename from app/src/main/java/com/dano/test1/data/AppDatabase.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/AppDatabase.kt index 2ae527b..c548e26 100644 --- a/app/src/main/java/com/dano/test1/data/AppDatabase.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/AppDatabase.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data import androidx.room.Database import androidx.room.RoomDatabase diff --git a/app/src/main/java/com/dano/test1/data/ClientAnswersCache.kt b/app/src/main/java/com/tomhempel/rbarometer/data/ClientAnswersCache.kt similarity index 97% rename from app/src/main/java/com/dano/test1/data/ClientAnswersCache.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/ClientAnswersCache.kt index 2b413bb..f61d317 100644 --- a/app/src/main/java/com/dano/test1/data/ClientAnswersCache.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/ClientAnswersCache.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data /** * In-memory cache of answers for the active client to avoid repeated Room reads diff --git a/app/src/main/java/com/dano/test1/data/ClientRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/ClientRepository.kt similarity index 90% rename from app/src/main/java/com/dano/test1/data/ClientRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/ClientRepository.kt index 951d624..4fe67e0 100644 --- a/app/src/main/java/com/dano/test1/data/ClientRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/ClientRepository.kt @@ -1,7 +1,7 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data -import com.dano.test1.MyApp -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.security.SensitiveDataCrypto object ClientRepository { diff --git a/app/src/main/java/com/dano/test1/data/CoachScoringReviewRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/CoachScoringReviewRepository.kt similarity index 94% rename from app/src/main/java/com/dano/test1/data/CoachScoringReviewRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/CoachScoringReviewRepository.kt index bbfa63b..c1411ce 100644 --- a/app/src/main/java/com/dano/test1/data/CoachScoringReviewRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/CoachScoringReviewRepository.kt @@ -1,7 +1,7 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data -import com.dano.test1.MyApp -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.security.SensitiveDataCrypto object CoachScoringReviewRepository { diff --git a/app/src/main/java/com/dano/test1/data/CompletedQuestionnaireRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/CompletedQuestionnaireRepository.kt similarity index 95% rename from app/src/main/java/com/dano/test1/data/CompletedQuestionnaireRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/CompletedQuestionnaireRepository.kt index 1a8a956..676ffe6 100644 --- a/app/src/main/java/com/dano/test1/data/CompletedQuestionnaireRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/CompletedQuestionnaireRepository.kt @@ -1,7 +1,7 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data -import com.dano.test1.MyApp -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.security.SensitiveDataCrypto object CompletedQuestionnaireRepository { private val dao get() = MyApp.database.completedQuestionnaireDao() diff --git a/app/src/main/java/com/dano/test1/data/Daos.kt b/app/src/main/java/com/tomhempel/rbarometer/data/Daos.kt similarity index 99% rename from app/src/main/java/com/dano/test1/data/Daos.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/Daos.kt index e54c1c4..0f09e62 100644 --- a/app/src/main/java/com/dano/test1/data/Daos.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/Daos.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data import androidx.room.* diff --git a/app/src/main/java/com/dano/test1/data/Entities.kt b/app/src/main/java/com/tomhempel/rbarometer/data/Entities.kt similarity index 99% rename from app/src/main/java/com/dano/test1/data/Entities.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/Entities.kt index 4126711..753cee9 100644 --- a/app/src/main/java/com/dano/test1/data/Entities.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/Entities.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data import androidx.room.* diff --git a/app/src/main/java/com/dano/test1/data/PendingUploadRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/PendingUploadRepository.kt similarity index 86% rename from app/src/main/java/com/dano/test1/data/PendingUploadRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/PendingUploadRepository.kt index 44c27e5..a191d9b 100644 --- a/app/src/main/java/com/dano/test1/data/PendingUploadRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/PendingUploadRepository.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data object PendingUploadRepository { diff --git a/app/src/main/java/com/dano/test1/data/UnuploadedWorkRepository.kt b/app/src/main/java/com/tomhempel/rbarometer/data/UnuploadedWorkRepository.kt similarity index 97% rename from app/src/main/java/com/dano/test1/data/UnuploadedWorkRepository.kt rename to app/src/main/java/com/tomhempel/rbarometer/data/UnuploadedWorkRepository.kt index 7752a46..85a394c 100644 --- a/app/src/main/java/com/dano/test1/data/UnuploadedWorkRepository.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/data/UnuploadedWorkRepository.kt @@ -1,4 +1,4 @@ -package com.dano.test1.data +package com.tomhempel.rbarometer.data /** * Summarises local interview data that must be uploaded (or finished) before logout. diff --git a/app/src/main/java/com/dano/test1/network/ApiModels.kt b/app/src/main/java/com/tomhempel/rbarometer/network/ApiModels.kt similarity index 98% rename from app/src/main/java/com/dano/test1/network/ApiModels.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/ApiModels.kt index e2d871a..2e6f8cf 100644 --- a/app/src/main/java/com/dano/test1/network/ApiModels.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/ApiModels.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network data class ApiError( val code: String? = null, diff --git a/app/src/main/java/com/dano/test1/network/ClientAnswerSyncStore.kt b/app/src/main/java/com/tomhempel/rbarometer/network/ClientAnswerSyncStore.kt similarity index 94% rename from app/src/main/java/com/dano/test1/network/ClientAnswerSyncStore.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/ClientAnswerSyncStore.kt index b8b8540..46b4cbe 100644 --- a/app/src/main/java/com/dano/test1/network/ClientAnswerSyncStore.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/ClientAnswerSyncStore.kt @@ -1,7 +1,7 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.security.SensitiveDataCrypto /** Persists per-client answer sync timestamps (survives process restarts). */ internal object ClientAnswerSyncStore { diff --git a/app/src/main/java/com/dano/test1/network/DatabaseUploader.kt b/app/src/main/java/com/tomhempel/rbarometer/network/DatabaseUploader.kt similarity index 94% rename from app/src/main/java/com/dano/test1/network/DatabaseUploader.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/DatabaseUploader.kt index 2770bb7..f9f9bb4 100644 --- a/app/src/main/java/com/dano/test1/network/DatabaseUploader.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/DatabaseUploader.kt @@ -1,8 +1,8 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.LanguageManager -import com.dano.test1.notification.UploadReminderScheduler +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.notification.UploadReminderScheduler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -48,9 +48,9 @@ object DatabaseUploader { onResult: (UploadResult) -> Unit, ) { CoroutineScope(Dispatchers.IO).launch { - val allPending = com.dano.test1.data.CompletedQuestionnaireRepository + val allPending = com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository .getAllPendingUploads() - val pendingScoring = com.dano.test1.data.CoachScoringReviewRepository + val pendingScoring = com.tomhempel.rbarometer.data.CoachScoringReviewRepository .getAllPendingUploads() if (allPending.isEmpty() && pendingScoring.isEmpty()) { val assigned = QuestionnaireCache.getAssignedClients(context) @@ -113,7 +113,7 @@ object DatabaseUploader { QuestionnaireApiClient.submitQuestionnaire(token, request) }.onSuccess { response -> submittedQuestionnaires++ - com.dano.test1.data.CompletedQuestionnaireRepository + com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository .markUploaded(clientCode, entry.questionnaireId, System.currentTimeMillis()) if (response.legacySubmit) { val submitRev = response.structureRevision @@ -162,7 +162,7 @@ object DatabaseUploader { ) }.onSuccess { submittedScoringReviews++ - com.dano.test1.data.CoachScoringReviewRepository.markUploaded( + com.tomhempel.rbarometer.data.CoachScoringReviewRepository.markUploaded( review.clientCode, review.profileID, System.currentTimeMillis(), diff --git a/app/src/main/java/com/dano/test1/network/HttpModule.kt b/app/src/main/java/com/tomhempel/rbarometer/network/HttpModule.kt similarity index 93% rename from app/src/main/java/com/dano/test1/network/HttpModule.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/HttpModule.kt index ac56504..1f26d0d 100644 --- a/app/src/main/java/com/dano/test1/network/HttpModule.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/HttpModule.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import okhttp3.Dispatcher import okhttp3.OkHttpClient diff --git a/app/src/main/java/com/dano/test1/network/LoginManager.kt b/app/src/main/java/com/tomhempel/rbarometer/network/LoginManager.kt similarity index 98% rename from app/src/main/java/com/dano/test1/network/LoginManager.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/LoginManager.kt index 40b7e14..1d78d98 100644 --- a/app/src/main/java/com/dano/test1/network/LoginManager.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/LoginManager.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context import kotlinx.coroutines.CoroutineScope diff --git a/app/src/main/java/com/dano/test1/network/NetworkUtilis.kt b/app/src/main/java/com/tomhempel/rbarometer/network/NetworkUtilis.kt similarity index 97% rename from app/src/main/java/com/dano/test1/network/NetworkUtilis.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/NetworkUtilis.kt index 0a2bb0e..77e151d 100644 --- a/app/src/main/java/com/dano/test1/network/NetworkUtilis.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/NetworkUtilis.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context import android.net.ConnectivityManager diff --git a/app/src/main/java/com/dano/test1/network/QuestionnaireAnswerSync.kt b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireAnswerSync.kt similarity index 95% rename from app/src/main/java/com/dano/test1/network/QuestionnaireAnswerSync.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireAnswerSync.kt index c4d600e..1f07328 100644 --- a/app/src/main/java/com/dano/test1/network/QuestionnaireAnswerSync.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireAnswerSync.kt @@ -1,14 +1,14 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.MyApp -import com.dano.test1.data.AnswerEntity -import com.dano.test1.data.AnswerRepository -import com.dano.test1.data.CompletedQuestionnaire -import com.dano.test1.data.CompletedQuestionnaireRepository -import com.dano.test1.data.Question -import com.dano.test1.data.Questionnaire -import com.dano.test1.questionnaire.AnswerKeyUtils +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.data.AnswerEntity +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaire +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.data.Question +import com.tomhempel.rbarometer.data.Questionnaire +import com.tomhempel.rbarometer.questionnaire.AnswerKeyUtils import com.google.gson.JsonArray import com.google.gson.JsonObject import com.google.gson.JsonParser @@ -367,7 +367,7 @@ object QuestionnaireAnswerSync { val completedAtMs = (block.completedAt ?: 0L).let { if (it > 0) it * 1000L else System.currentTimeMillis() } val sumPoints = block.sumPoints - val clientKey = com.dano.test1.security.SensitiveDataCrypto.clientCodeKey(clientCode) + val clientKey = com.tomhempel.rbarometer.security.SensitiveDataCrypto.clientCodeKey(clientCode) return PreparedBlockImport( questionnaireId = questionnaireId, @@ -382,7 +382,7 @@ object QuestionnaireAnswerSync { AnswerEntity( clientCodeKey = clientKey, questionId = AnswerKeyUtils.roomQuestionId(questionnaireId, key), - answerValueEnc = com.dano.test1.security.SensitiveDataCrypto.encrypt(value), + answerValueEnc = com.tomhempel.rbarometer.security.SensitiveDataCrypto.encrypt(value), ) }, completion = CompletedQuestionnaire( @@ -461,8 +461,8 @@ object QuestionnaireAnswerSync { } private fun CompletedQuestionnaire.toEntity(clientCode: String) = - com.dano.test1.data.CompletedQuestionnaireEntity( - clientCodeKey = com.dano.test1.security.SensitiveDataCrypto.clientCodeKey(clientCode), + com.tomhempel.rbarometer.data.CompletedQuestionnaireEntity( + clientCodeKey = com.tomhempel.rbarometer.security.SensitiveDataCrypto.clientCodeKey(clientCode), questionnaireId = questionnaireId, timestamp = timestamp, isDone = isDone, diff --git a/app/src/main/java/com/dano/test1/network/QuestionnaireApiClient.kt b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireApiClient.kt similarity index 99% rename from app/src/main/java/com/dano/test1/network/QuestionnaireApiClient.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireApiClient.kt index 0382579..a0e9ae3 100644 --- a/app/src/main/java/com/dano/test1/network/QuestionnaireApiClient.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireApiClient.kt @@ -1,6 +1,6 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network -import com.dano.test1.security.SessionPayloadCrypto +import com.tomhempel.rbarometer.security.SessionPayloadCrypto import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonElement diff --git a/app/src/main/java/com/dano/test1/network/QuestionnaireCache.kt b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireCache.kt similarity index 94% rename from app/src/main/java/com/dano/test1/network/QuestionnaireCache.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireCache.kt index 543dc03..a5f2608 100644 --- a/app/src/main/java/com/dano/test1/network/QuestionnaireCache.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireCache.kt @@ -1,11 +1,11 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.LanguageManager -import com.dano.test1.MyApp -import com.dano.test1.data.ClientRepository -import com.dano.test1.security.SensitiveDataCrypto -import com.dano.test1.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.data.ClientRepository +import com.tomhempel.rbarometer.security.SensitiveDataCrypto +import com.tomhempel.rbarometer.questionnaire.GlobalValues import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.JsonParser @@ -102,9 +102,9 @@ object QuestionnaireCache { */ suspend fun wipeEntireLocalStore(context: Context) { clearAssignedClients(context) - com.dano.test1.MyApp.database.clearAllTables() + com.tomhempel.rbarometer.MyApp.database.clearAllTables() cacheDir(context).deleteRecursively() - com.dano.test1.notification.UploadReminderScheduler.cancel(context) + com.tomhempel.rbarometer.notification.UploadReminderScheduler.cancel(context) LanguageManager.setApiTranslations(emptyMap()) LanguageManager.setQuestionnaireTranslations(emptyMap()) } diff --git a/app/src/main/java/com/dano/test1/network/QuestionnaireSubmitMapper.kt b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSubmitMapper.kt similarity index 96% rename from app/src/main/java/com/dano/test1/network/QuestionnaireSubmitMapper.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSubmitMapper.kt index 9e8fa7c..786a4d8 100644 --- a/app/src/main/java/com/dano/test1/network/QuestionnaireSubmitMapper.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSubmitMapper.kt @@ -1,9 +1,9 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.data.AnswerRepository -import com.dano.test1.data.CompletedQuestionnaireRepository -import com.dano.test1.questionnaire.AnswerKeyUtils +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.questionnaire.AnswerKeyUtils import com.google.gson.JsonArray import com.google.gson.JsonObject import com.google.gson.JsonParser diff --git a/app/src/main/java/com/dano/test1/network/QuestionnaireSyncService.kt b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSyncService.kt similarity index 96% rename from app/src/main/java/com/dano/test1/network/QuestionnaireSyncService.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSyncService.kt index 07e3347..c2b2281 100644 --- a/app/src/main/java/com/dano/test1/network/QuestionnaireSyncService.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/QuestionnaireSyncService.kt @@ -1,9 +1,9 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context -import com.dano.test1.MyApp -import com.dano.test1.data.CompletedQuestionnaire -import com.dano.test1.data.Questionnaire +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.data.CompletedQuestionnaire +import com.tomhempel.rbarometer.data.Questionnaire import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -203,7 +203,7 @@ object QuestionnaireSyncService { private suspend fun seedServerCompletions(clientInfosFromApi: List) { val toInsert = mutableListOf() for (clientInfo in clientInfosFromApi) { - val existingByQn = com.dano.test1.data.CompletedQuestionnaireRepository + val existingByQn = com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository .getAllForClient(clientInfo.clientCode) .associateBy { it.questionnaireId } for (serverCompletion in clientInfo.completedQuestionnaires) { @@ -225,7 +225,7 @@ object QuestionnaireSyncService { } if (toInsert.isNotEmpty()) { runCatching { - com.dano.test1.data.CompletedQuestionnaireRepository.insertAll(toInsert) + com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository.insertAll(toInsert) }.onSuccess { SyncLog.d(TAG, "seeded ${toInsert.size} server completion(s)") }.onFailure { e -> diff --git a/app/src/main/java/com/dano/test1/network/SyncCoordinator.kt b/app/src/main/java/com/tomhempel/rbarometer/network/SyncCoordinator.kt similarity index 97% rename from app/src/main/java/com/dano/test1/network/SyncCoordinator.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/SyncCoordinator.kt index 4430043..2b10958 100644 --- a/app/src/main/java/com/dano/test1/network/SyncCoordinator.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/SyncCoordinator.kt @@ -1,8 +1,8 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context import android.widget.Toast -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager sealed class SyncResult { data object Success : SyncResult() diff --git a/app/src/main/java/com/dano/test1/network/SyncLog.kt b/app/src/main/java/com/tomhempel/rbarometer/network/SyncLog.kt similarity index 93% rename from app/src/main/java/com/dano/test1/network/SyncLog.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/SyncLog.kt index a759f04..de67b6d 100644 --- a/app/src/main/java/com/dano/test1/network/SyncLog.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/SyncLog.kt @@ -1,7 +1,7 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.util.Log -import com.dano.test1.BuildConfig +import com.tomhempel.rbarometer.BuildConfig import java.security.MessageDigest /** Debug-gated logging for sync/API paths (avoids logging full JSON bodies in production). */ diff --git a/app/src/main/java/com/dano/test1/network/SyncProgress.kt b/app/src/main/java/com/tomhempel/rbarometer/network/SyncProgress.kt similarity index 90% rename from app/src/main/java/com/dano/test1/network/SyncProgress.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/SyncProgress.kt index 74414b6..1cd3ffa 100644 --- a/app/src/main/java/com/dano/test1/network/SyncProgress.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/SyncProgress.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network /** User-facing sync step — no counts; shown as friendly status text only. */ enum class SyncPhase { diff --git a/app/src/main/java/com/dano/test1/network/SyncProgressPacer.kt b/app/src/main/java/com/tomhempel/rbarometer/network/SyncProgressPacer.kt similarity index 95% rename from app/src/main/java/com/dano/test1/network/SyncProgressPacer.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/SyncProgressPacer.kt index 5ae8393..738c717 100644 --- a/app/src/main/java/com/dano/test1/network/SyncProgressPacer.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/SyncProgressPacer.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/dano/test1/network/TokenStore.kt b/app/src/main/java/com/tomhempel/rbarometer/network/TokenStore.kt similarity index 98% rename from app/src/main/java/com/dano/test1/network/TokenStore.kt rename to app/src/main/java/com/tomhempel/rbarometer/network/TokenStore.kt index d5bbdcf..f58e007 100644 --- a/app/src/main/java/com/dano/test1/network/TokenStore.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/network/TokenStore.kt @@ -1,4 +1,4 @@ -package com.dano.test1.network +package com.tomhempel.rbarometer.network import android.content.Context import android.util.Log diff --git a/app/src/main/java/com/dano/test1/notification/UploadReminderReceiver.kt b/app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderReceiver.kt similarity index 94% rename from app/src/main/java/com/dano/test1/notification/UploadReminderReceiver.kt rename to app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderReceiver.kt index 751c012..4b45bd7 100644 --- a/app/src/main/java/com/dano/test1/notification/UploadReminderReceiver.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderReceiver.kt @@ -1,4 +1,4 @@ -package com.dano.test1.notification +package com.tomhempel.rbarometer.notification import android.app.NotificationChannel import android.app.NotificationManager @@ -8,9 +8,9 @@ import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat -import com.dano.test1.MainActivity -import com.dano.test1.MyApp -import com.dano.test1.R +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.R import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/dano/test1/notification/UploadReminderScheduler.kt b/app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderScheduler.kt similarity index 95% rename from app/src/main/java/com/dano/test1/notification/UploadReminderScheduler.kt rename to app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderScheduler.kt index 55ce480..085c9e6 100644 --- a/app/src/main/java/com/dano/test1/notification/UploadReminderScheduler.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/notification/UploadReminderScheduler.kt @@ -1,4 +1,4 @@ -package com.dano.test1.notification +package com.tomhempel.rbarometer.notification import android.app.AlarmManager import android.app.PendingIntent @@ -51,7 +51,7 @@ object UploadReminderScheduler { */ suspend fun hasPendingUploads(): Boolean { return try { - com.dano.test1.data.PendingUploadRepository.hasAny() + com.tomhempel.rbarometer.data.PendingUploadRepository.hasAny() } catch (e: Exception) { Log.w(TAG, "hasPendingUploads check failed: ${e.message}") false diff --git a/app/src/main/java/com/dano/test1/questionnaire/AnswerKeyUtils.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerKeyUtils.kt similarity index 93% rename from app/src/main/java/com/dano/test1/questionnaire/AnswerKeyUtils.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerKeyUtils.kt index e7a4b2e..affb41b 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/AnswerKeyUtils.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerKeyUtils.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire /** * Stable keys for Room answer rows and submit mapping. diff --git a/app/src/main/java/com/dano/test1/questionnaire/AnswerLookup.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerLookup.kt similarity index 94% rename from app/src/main/java/com/dano/test1/questionnaire/AnswerLookup.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerLookup.kt index a59d881..e67a016 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/AnswerLookup.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerLookup.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire /** * Resolves stored answers from the in-memory map using the same keys as persistence/sync. diff --git a/app/src/main/java/com/dano/test1/questionnaire/AnswerRestoreHelper.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerRestoreHelper.kt similarity index 91% rename from app/src/main/java/com/dano/test1/questionnaire/AnswerRestoreHelper.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerRestoreHelper.kt index 0ce2180..9588f90 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/AnswerRestoreHelper.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AnswerRestoreHelper.kt @@ -1,6 +1,6 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.data.AnswerRepository +import com.tomhempel.rbarometer.data.AnswerRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/dano/test1/questionnaire/AppLanguages.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AppLanguages.kt similarity index 95% rename from app/src/main/java/com/dano/test1/questionnaire/AppLanguages.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/AppLanguages.kt index c3f2a9e..5392995 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/AppLanguages.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/AppLanguages.kt @@ -1,6 +1,6 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager /** * Single source for coach language selection across opening screen and questionnaires. diff --git a/app/src/main/java/com/dano/test1/questionnaire/ClientAssignmentGuard.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/ClientAssignmentGuard.kt similarity index 84% rename from app/src/main/java/com/dano/test1/questionnaire/ClientAssignmentGuard.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/ClientAssignmentGuard.kt index 78f87ce..443afce 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/ClientAssignmentGuard.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/ClientAssignmentGuard.kt @@ -1,7 +1,7 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.QuestionnaireCache object ClientAssignmentGuard { diff --git a/app/src/main/java/com/dano/test1/questionnaire/ConditionJsonParser.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/ConditionJsonParser.kt similarity index 98% rename from app/src/main/java/com/dano/test1/questionnaire/ConditionJsonParser.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/ConditionJsonParser.kt index 3f29ca2..eba4cdb 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/ConditionJsonParser.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/ConditionJsonParser.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.util.Log import org.json.JSONArray diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionFlowResolver.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionFlowResolver.kt similarity index 98% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionFlowResolver.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionFlowResolver.kt index 9e7e5e7..fe3a5a0 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionFlowResolver.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionFlowResolver.kt @@ -1,6 +1,6 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager object QuestionFlowResolver { diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionHandler.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandler.kt similarity index 77% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionHandler.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandler.kt index fda19e2..6a878f2 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionHandler.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandler.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.view.View interface QuestionHandler { diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionHandlerFactory.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandlerFactory.kt similarity index 78% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionHandlerFactory.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandlerFactory.kt index e6b6180..f7aabd2 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionHandlerFactory.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionHandlerFactory.kt @@ -1,16 +1,16 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.questionnaire.handlers.HandlerClientCoachCode -import com.dano.test1.questionnaire.handlers.HandlerDateSpinner -import com.dano.test1.questionnaire.handlers.HandlerFreeText -import com.dano.test1.questionnaire.handlers.HandlerGlassScaleQuestion -import com.dano.test1.questionnaire.handlers.HandlerLastPage -import com.dano.test1.questionnaire.handlers.HandlerMultiCheckboxQuestion -import com.dano.test1.questionnaire.handlers.HandlerRadioQuestion -import com.dano.test1.questionnaire.handlers.HandlerSliderQuestion -import com.dano.test1.questionnaire.handlers.HandlerStringSpinner -import com.dano.test1.questionnaire.handlers.HandlerValueSpinner +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerClientCoachCode +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerDateSpinner +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerFreeText +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerGlassScaleQuestion +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerLastPage +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerMultiCheckboxQuestion +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerRadioQuestion +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerSliderQuestion +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerStringSpinner +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerValueSpinner enum class NavigationMode { Step, Embedded } diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionNotesHelper.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionNotesHelper.kt similarity index 86% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionNotesHelper.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionNotesHelper.kt index de29648..9c418e5 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionNotesHelper.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionNotesHelper.kt @@ -1,10 +1,10 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.view.View import android.widget.TextView -import com.dano.test1.LanguageManager -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils /** Renders optional noteBeforeKey / noteAfterKey above and below the main question text. */ object QuestionNotesHelper { diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireAllInOne.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireAllInOne.kt similarity index 98% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireAllInOne.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireAllInOne.kt index 24c2a72..006e258 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireAllInOne.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireAllInOne.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.graphics.Color import android.text.Editable @@ -9,19 +9,19 @@ import android.view.ViewGroup import android.widget.* import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity -import com.dano.test1.R -import com.dano.test1.network.TokenStore -import com.dano.test1.questionnaire.handlers.HandlerStringSpinner -import com.dano.test1.questionnaire.handlers.HandlerValueSpinner -import com.dano.test1.ui.AppLanguageStore -import com.dano.test1.ui.ReviewScoresHandler -import com.dano.test1.utils.DateAnswerFormat -import com.dano.test1.utils.DatePrecision -import com.dano.test1.utils.ScreenLoading -import com.dano.test1.utils.TextInputSanitizer -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerStringSpinner +import com.tomhempel.rbarometer.questionnaire.handlers.HandlerValueSpinner +import com.tomhempel.rbarometer.ui.AppLanguageStore +import com.tomhempel.rbarometer.ui.ReviewScoresHandler +import com.tomhempel.rbarometer.utils.DateAnswerFormat +import com.tomhempel.rbarometer.utils.DatePrecision +import com.tomhempel.rbarometer.utils.ScreenLoading +import com.tomhempel.rbarometer.utils.TextInputSanitizer +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import kotlinx.coroutines.* @@ -296,7 +296,7 @@ class QuestionnaireAllInOne(private val questionnaireFileName: String) : Questio } } languageID = newLang - com.dano.test1.ui.AppLanguageStore.set(context, newLang) + com.tomhempel.rbarometer.ui.AppLanguageStore.set(context, newLang) persistedBaselineAnswers = snapshotAnswerKeys(answers) uiChangedSinceBaseline = false buildAllInOneUi() @@ -927,7 +927,7 @@ class QuestionnaireAllInOne(private val questionnaireFileName: String) : Questio private fun selectedMonthNumber(view: View): Int? { val month = view.findViewById(R.id.spinner_value_month)?.selectedItem - val months = com.dano.test1.ui.Months.getAllMonths(languageID) + val months = com.tomhempel.rbarometer.ui.Months.getAllMonths(languageID) val idx = months.indexOf(month) return if (idx >= 0) idx + 1 else null } diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireBase.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireBase.kt similarity index 95% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireBase.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireBase.kt index 27dadba..b74b6ed 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireBase.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireBase.kt @@ -1,12 +1,12 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.R import android.app.Activity import android.util.Log import android.view.View import android.widget.* -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity import kotlinx.coroutines.* import java.io.File import java.util.Calendar @@ -77,7 +77,7 @@ abstract class QuestionnaireBase { protected fun showEmptyScreen() { navigateTo(getLayoutResId("empty")) { - setupPrevButton(com.dano.test1.R.id.Qprev) { goToPreviousQuestion() } + setupPrevButton(com.tomhempel.rbarometer.R.id.Qprev) { goToPreviousQuestion() } } } diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireCompletionService.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireCompletionService.kt similarity index 92% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireCompletionService.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireCompletionService.kt index 797e05d..3bd4df5 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireCompletionService.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireCompletionService.kt @@ -1,7 +1,7 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.MainActivity +import com.tomhempel.rbarometer.MainActivity import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireGeneric.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireGeneric.kt similarity index 92% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireGeneric.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireGeneric.kt index 3984827..cacb76f 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireGeneric.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireGeneric.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.view.Gravity import android.view.View @@ -6,8 +6,8 @@ import android.widget.AdapterView import android.widget.Button import android.widget.FrameLayout import android.widget.Spinner -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils open class QuestionnaireGeneric(private val questionnaireFileName: String) : QuestionnaireBase() { @@ -70,7 +70,7 @@ open class QuestionnaireGeneric(private val questionnaireFileName: String) : Que val newLang = AppLanguages.ids[position] if (newLang == languageID) return languageID = newLang - com.dano.test1.ui.AppLanguageStore.set(context, newLang) + com.tomhempel.rbarometer.ui.AppLanguageStore.set(context, newLang) spinner.post { showCurrentQuestion() } } override fun onNothingSelected(parent: AdapterView<*>?) {} diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireItem.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireItem.kt similarity index 99% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireItem.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireItem.kt index d11f336..93cd6f0 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireItem.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireItem.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire data class Option( val key: String, // Must always be set diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireJsonLoader.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireJsonLoader.kt similarity index 97% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireJsonLoader.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireJsonLoader.kt index ec0fb02..109351b 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireJsonLoader.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireJsonLoader.kt @@ -1,7 +1,7 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.QuestionnaireCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.JsonParser diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnairePersistence.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnairePersistence.kt similarity index 84% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnairePersistence.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnairePersistence.kt index 64bf063..56ffa37 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnairePersistence.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnairePersistence.kt @@ -1,18 +1,18 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.LanguageManager -import com.dano.test1.MyApp -import com.dano.test1.data.Answer -import com.dano.test1.data.AnswerRepository -import com.dano.test1.data.ClientAnswersCache -import com.dano.test1.data.ClientRepository -import com.dano.test1.data.CompletedQuestionnaireRepository -import com.dano.test1.data.CompletedQuestionnaire -import com.dano.test1.data.Question -import com.dano.test1.data.Questionnaire -import com.dano.test1.network.SyncLog -import com.dano.test1.notification.UploadReminderScheduler +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.data.Answer +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.data.ClientAnswersCache +import com.tomhempel.rbarometer.data.ClientRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaire +import com.tomhempel.rbarometer.data.Question +import com.tomhempel.rbarometer.data.Questionnaire +import com.tomhempel.rbarometer.network.SyncLog +import com.tomhempel.rbarometer.notification.UploadReminderScheduler object QuestionnairePersistence { diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireProgressiveCallbacks.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireProgressiveCallbacks.kt similarity index 84% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireProgressiveCallbacks.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireProgressiveCallbacks.kt index 8c029dc..e209b35 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireProgressiveCallbacks.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireProgressiveCallbacks.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire object QuestionnaireProgressiveCallbacks { @JvmStatic diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireTranslationsLoader.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireTranslationsLoader.kt similarity index 80% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireTranslationsLoader.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireTranslationsLoader.kt index 531ad5f..4e0470b 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireTranslationsLoader.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireTranslationsLoader.kt @@ -1,7 +1,7 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.content.Context -import com.dano.test1.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.QuestionnaireCache /** Applies per-questionnaire translation tables from synced JSON cache. */ object QuestionnaireTranslationsLoader { diff --git a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireValidation.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireValidation.kt similarity index 94% rename from app/src/main/java/com/dano/test1/questionnaire/QuestionnaireValidation.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireValidation.kt index e4bf98a..68c895e 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/QuestionnaireValidation.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/QuestionnaireValidation.kt @@ -1,10 +1,10 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire import android.app.Activity import android.util.Log import android.widget.Toast -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity /** * Validates questionnaire JSON before the coach opens a flow. diff --git a/app/src/main/java/com/dano/test1/questionnaire/SavedAnswerLoader.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SavedAnswerLoader.kt similarity index 97% rename from app/src/main/java/com/dano/test1/questionnaire/SavedAnswerLoader.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/SavedAnswerLoader.kt index 8ed0304..e14faf0 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/SavedAnswerLoader.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SavedAnswerLoader.kt @@ -1,6 +1,6 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.data.ClientAnswersCache +import com.tomhempel.rbarometer.data.ClientAnswersCache /** * Loads prior answers from Room (or session cache) into the in-memory map before UI bind, diff --git a/app/src/main/java/com/dano/test1/questionnaire/SpinnerAnswerRules.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerAnswerRules.kt similarity index 78% rename from app/src/main/java/com/dano/test1/questionnaire/SpinnerAnswerRules.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerAnswerRules.kt index 4dfc627..e22c882 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/SpinnerAnswerRules.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerAnswerRules.kt @@ -1,6 +1,6 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager object SpinnerAnswerRules { diff --git a/app/src/main/java/com/dano/test1/questionnaire/SpinnerSelectionHelper.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerSelectionHelper.kt similarity index 93% rename from app/src/main/java/com/dano/test1/questionnaire/SpinnerSelectionHelper.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerSelectionHelper.kt index deebb27..9ce5268 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/SpinnerSelectionHelper.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/SpinnerSelectionHelper.kt @@ -1,7 +1,7 @@ -package com.dano.test1.questionnaire +package com.tomhempel.rbarometer.questionnaire -import com.dano.test1.LanguageManager -import com.dano.test1.ui.localization.UiStrings +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.ui.localization.UiStrings /** * Resolves stored answer values to spinner indices (keys, localized labels, or free text). diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerClientCoachCode.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerClientCoachCode.kt similarity index 90% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerClientCoachCode.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerClientCoachCode.kt index d182b47..2d93af1 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerClientCoachCode.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerClientCoachCode.kt @@ -1,17 +1,17 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.view.View import android.widget.* -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.LanguageManager -import com.dano.test1.data.ClientRepository -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.R -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.TokenStore -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.ClientRepository +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.utils.ViewUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerDateSpinner.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerDateSpinner.kt similarity index 91% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerDateSpinner.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerDateSpinner.kt index 5157c2a..6af3b72 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerDateSpinner.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerDateSpinner.kt @@ -1,24 +1,24 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.View import android.widget.Button import android.widget.Spinner import android.widget.TextView -import com.dano.test1.LanguageManager -import com.dano.test1.data.AnswerRepository -import com.dano.test1.R -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.questionnaire.MAX_VALUE_YEAR -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.QuestionNotesHelper -import com.dano.test1.ui.Month -import com.dano.test1.ui.Months -import com.dano.test1.utils.DateAnswerFormat -import com.dano.test1.utils.DatePrecision -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.questionnaire.MAX_VALUE_YEAR +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.QuestionNotesHelper +import com.tomhempel.rbarometer.ui.Month +import com.tomhempel.rbarometer.ui.Months +import com.tomhempel.rbarometer.utils.DateAnswerFormat +import com.tomhempel.rbarometer.utils.DatePrecision +import com.tomhempel.rbarometer.utils.ViewUtils import java.util.Calendar import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerFreeText.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerFreeText.kt similarity index 88% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerFreeText.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerFreeText.kt index 1b8d813..843470e 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerFreeText.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerFreeText.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.text.InputFilter @@ -6,16 +6,16 @@ import android.view.View import android.widget.Button import android.widget.EditText import android.widget.TextView -import com.dano.test1.LanguageManager -import com.dano.test1.data.AnswerRepository -import com.dano.test1.R -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.QuestionNotesHelper -import com.dano.test1.utils.TextInputSanitizer -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.QuestionNotesHelper +import com.tomhempel.rbarometer.utils.TextInputSanitizer +import com.tomhempel.rbarometer.utils.ViewUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerGlassScaleQuestion.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerGlassScaleQuestion.kt similarity index 96% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerGlassScaleQuestion.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerGlassScaleQuestion.kt index 4f0c70e..3d5f974 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerGlassScaleQuestion.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerGlassScaleQuestion.kt @@ -1,17 +1,17 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.Gravity import android.view.View import android.widget.* -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.LanguageManager -import com.dano.test1.data.AnswerRepository -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils import kotlinx.coroutines.* /* diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerLastPage.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerLastPage.kt similarity index 92% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerLastPage.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerLastPage.kt index 5cc3faf..56cfa28 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerLastPage.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerLastPage.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.util.TypedValue import android.view.View @@ -6,16 +6,16 @@ import android.widget.* import android.text.Html import androidx.core.widget.TextViewCompat import kotlinx.coroutines.* -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity -import com.dano.test1.network.TokenStore -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.R -import com.dano.test1.ui.AppLanguageStore -import com.dano.test1.ui.ReviewScoresHandler -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.ui.AppLanguageStore +import com.tomhempel.rbarometer.ui.ReviewScoresHandler +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.button.MaterialButton /* diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt similarity index 94% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt index ec9b08c..7c48a67 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerMultiCheckboxQuestion.kt @@ -1,4 +1,4 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.util.TypedValue @@ -6,14 +6,14 @@ import android.view.View import android.widget.* import androidx.core.widget.TextViewCompat import kotlinx.coroutines.* -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.LanguageManager -import com.dano.test1.data.AnswerRepository -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils /* Zweck: diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerRadioQuestion.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerRadioQuestion.kt similarity index 91% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerRadioQuestion.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerRadioQuestion.kt index 13df7ee..14a1801 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerRadioQuestion.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerRadioQuestion.kt @@ -1,18 +1,18 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.View import android.text.Html import android.widget.* import kotlinx.coroutines.* -import com.dano.test1.questionnaire.AnswerRestoreHelper -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.LanguageManager -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.AnswerRestoreHelper +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils /* Zweck: diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerSliderQuestion.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerSliderQuestion.kt similarity index 91% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerSliderQuestion.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerSliderQuestion.kt index 0f49f77..bf45faa 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerSliderQuestion.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerSliderQuestion.kt @@ -1,17 +1,17 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.View import android.widget.Button import android.widget.SeekBar import android.widget.TextView -import com.dano.test1.LanguageManager -import com.dano.test1.R -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.QuestionNotesHelper -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.QuestionNotesHelper +import com.tomhempel.rbarometer.utils.ViewUtils class HandlerSliderQuestion( private val context: Context, diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerStringSpinner.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerStringSpinner.kt similarity index 88% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerStringSpinner.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerStringSpinner.kt index 17d22e9..bb3582f 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerStringSpinner.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerStringSpinner.kt @@ -1,20 +1,20 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.View import android.widget.* import kotlinx.coroutines.* -import com.dano.test1.questionnaire.AnswerLookup -import com.dano.test1.questionnaire.AnswerRestoreHelper -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.LanguageManager -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.SpinnerAnswerRules -import com.dano.test1.questionnaire.SpinnerSelectionHelper -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.AnswerLookup +import com.tomhempel.rbarometer.questionnaire.AnswerRestoreHelper +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.SpinnerAnswerRules +import com.tomhempel.rbarometer.questionnaire.SpinnerSelectionHelper +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils class HandlerStringSpinner( private val context: Context, diff --git a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerValueSpinner.kt b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerValueSpinner.kt similarity index 87% rename from app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerValueSpinner.kt rename to app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerValueSpinner.kt index 1cba6dd..1a19e0b 100644 --- a/app/src/main/java/com/dano/test1/questionnaire/handlers/HandlerValueSpinner.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/questionnaire/handlers/HandlerValueSpinner.kt @@ -1,20 +1,20 @@ -package com.dano.test1.questionnaire.handlers +package com.tomhempel.rbarometer.questionnaire.handlers import android.content.Context import android.view.View import android.widget.* import kotlinx.coroutines.* -import com.dano.test1.questionnaire.AnswerLookup -import com.dano.test1.questionnaire.AnswerRestoreHelper -import com.dano.test1.questionnaire.QuestionFlowResolver -import com.dano.test1.questionnaire.SpinnerAnswerRules -import com.dano.test1.questionnaire.SpinnerSelectionHelper -import com.dano.test1.LanguageManager -import com.dano.test1.questionnaire.QuestionHandler -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.QuestionNotesHelper -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.questionnaire.AnswerLookup +import com.tomhempel.rbarometer.questionnaire.AnswerRestoreHelper +import com.tomhempel.rbarometer.questionnaire.QuestionFlowResolver +import com.tomhempel.rbarometer.questionnaire.SpinnerAnswerRules +import com.tomhempel.rbarometer.questionnaire.SpinnerSelectionHelper +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.questionnaire.QuestionHandler +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.QuestionNotesHelper +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils class HandlerValueSpinner( private val context: Context, diff --git a/app/src/main/java/com/dano/test1/scoring/LocalScoringReviewBuilder.kt b/app/src/main/java/com/tomhempel/rbarometer/scoring/LocalScoringReviewBuilder.kt similarity index 85% rename from app/src/main/java/com/dano/test1/scoring/LocalScoringReviewBuilder.kt rename to app/src/main/java/com/tomhempel/rbarometer/scoring/LocalScoringReviewBuilder.kt index 534fc65..49bc394 100644 --- a/app/src/main/java/com/dano/test1/scoring/LocalScoringReviewBuilder.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/scoring/LocalScoringReviewBuilder.kt @@ -1,13 +1,13 @@ -package com.dano.test1.scoring +package com.tomhempel.rbarometer.scoring import android.content.Context -import com.dano.test1.data.AnswerRepository -import com.dano.test1.data.CompletedQuestionnaireRepository -import com.dano.test1.network.ClientScoringReview -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.ScoringProfileDefinition -import com.dano.test1.network.ScoringReviewProfile -import com.dano.test1.questionnaire.AnswerKeyUtils +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.network.ClientScoringReview +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.ScoringProfileDefinition +import com.tomhempel.rbarometer.network.ScoringReviewProfile +import com.tomhempel.rbarometer.questionnaire.AnswerKeyUtils import com.google.gson.JsonParser object LocalScoringReviewBuilder { diff --git a/app/src/main/java/com/dano/test1/scoring/ProfileScoringEngine.kt b/app/src/main/java/com/tomhempel/rbarometer/scoring/ProfileScoringEngine.kt similarity index 94% rename from app/src/main/java/com/dano/test1/scoring/ProfileScoringEngine.kt rename to app/src/main/java/com/tomhempel/rbarometer/scoring/ProfileScoringEngine.kt index b2a2240..f081b19 100644 --- a/app/src/main/java/com/dano/test1/scoring/ProfileScoringEngine.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/scoring/ProfileScoringEngine.kt @@ -1,6 +1,6 @@ -package com.dano.test1.scoring +package com.tomhempel.rbarometer.scoring -import com.dano.test1.network.ScoringProfileDefinition +import com.tomhempel.rbarometer.network.ScoringProfileDefinition import kotlin.math.round /** diff --git a/app/src/main/java/com/dano/test1/scoring/QuestionnaireScoreCalculator.kt b/app/src/main/java/com/tomhempel/rbarometer/scoring/QuestionnaireScoreCalculator.kt similarity index 99% rename from app/src/main/java/com/dano/test1/scoring/QuestionnaireScoreCalculator.kt rename to app/src/main/java/com/tomhempel/rbarometer/scoring/QuestionnaireScoreCalculator.kt index c0e00d2..5190d32 100644 --- a/app/src/main/java/com/dano/test1/scoring/QuestionnaireScoreCalculator.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/scoring/QuestionnaireScoreCalculator.kt @@ -1,4 +1,4 @@ -package com.dano.test1.scoring +package com.tomhempel.rbarometer.scoring import com.google.gson.JsonArray import com.google.gson.JsonObject diff --git a/app/src/main/java/com/dano/test1/security/SensitiveDataCrypto.kt b/app/src/main/java/com/tomhempel/rbarometer/security/SensitiveDataCrypto.kt similarity index 99% rename from app/src/main/java/com/dano/test1/security/SensitiveDataCrypto.kt rename to app/src/main/java/com/tomhempel/rbarometer/security/SensitiveDataCrypto.kt index 476c433..1f5fba7 100644 --- a/app/src/main/java/com/dano/test1/security/SensitiveDataCrypto.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/security/SensitiveDataCrypto.kt @@ -1,4 +1,4 @@ -package com.dano.test1.security +package com.tomhempel.rbarometer.security import android.content.Context import android.security.keystore.KeyGenParameterSpec diff --git a/app/src/main/java/com/dano/test1/security/SessionPayloadCrypto.kt b/app/src/main/java/com/tomhempel/rbarometer/security/SessionPayloadCrypto.kt similarity index 99% rename from app/src/main/java/com/dano/test1/security/SessionPayloadCrypto.kt rename to app/src/main/java/com/tomhempel/rbarometer/security/SessionPayloadCrypto.kt index fd72bd0..5c14642 100644 --- a/app/src/main/java/com/dano/test1/security/SessionPayloadCrypto.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/security/SessionPayloadCrypto.kt @@ -1,4 +1,4 @@ -package com.dano.test1.security +package com.tomhempel.rbarometer.security import android.util.Base64 import com.google.gson.JsonObject diff --git a/app/src/main/java/com/dano/test1/ui/AbTestSettingsStore.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/AbTestSettingsStore.kt similarity index 97% rename from app/src/main/java/com/dano/test1/ui/AbTestSettingsStore.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/AbTestSettingsStore.kt index 1cbaae8..8706ad2 100644 --- a/app/src/main/java/com/dano/test1/ui/AbTestSettingsStore.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/AbTestSettingsStore.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Context diff --git a/app/src/main/java/com/dano/test1/ui/AppLanguageStore.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/AppLanguageStore.kt similarity index 89% rename from app/src/main/java/com/dano/test1/ui/AppLanguageStore.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/AppLanguageStore.kt index 7ee3853..2f3de2e 100644 --- a/app/src/main/java/com/dano/test1/ui/AppLanguageStore.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/AppLanguageStore.kt @@ -1,7 +1,7 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Context -import com.dano.test1.questionnaire.AppLanguages +import com.tomhempel.rbarometer.questionnaire.AppLanguages /** * Persists the coach's chosen UI language across app restarts and screens. diff --git a/app/src/main/java/com/dano/test1/ui/AuthActivity.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/AuthActivity.kt similarity index 95% rename from app/src/main/java/com/dano/test1/ui/AuthActivity.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/AuthActivity.kt index 7eee1da..335b79f 100644 --- a/app/src/main/java/com/dano/test1/ui/AuthActivity.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/AuthActivity.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Intent import android.os.Bundle @@ -9,17 +9,17 @@ import android.widget.TextView import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity -import com.dano.test1.LanguageManager -import com.dano.test1.R -import com.dano.test1.network.LoginManager -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.SyncCoordinator -import com.dano.test1.network.TokenStore -import com.dano.test1.questionnaire.AppLanguages +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.LoginManager +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.SyncCoordinator +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.questionnaire.AppLanguages import com.google.android.material.button.MaterialButton import com.google.android.material.textfield.TextInputEditText -import com.dano.test1.utils.ScreenLoading -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.utils.ScreenLoading +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.textfield.TextInputLayout import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/dano/test1/ui/ClientPickerBottomSheet.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/ClientPickerBottomSheet.kt similarity index 98% rename from app/src/main/java/com/dano/test1/ui/ClientPickerBottomSheet.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/ClientPickerBottomSheet.kt index 6988ec2..08e244a 100644 --- a/app/src/main/java/com/dano/test1/ui/ClientPickerBottomSheet.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/ClientPickerBottomSheet.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.text.Editable import android.text.TextWatcher @@ -10,8 +10,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout diff --git a/app/src/main/java/com/dano/test1/ui/ClientRecentStore.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/ClientRecentStore.kt similarity index 98% rename from app/src/main/java/com/dano/test1/ui/ClientRecentStore.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/ClientRecentStore.kt index eff711c..6fd57fe 100644 --- a/app/src/main/java/com/dano/test1/ui/ClientRecentStore.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/ClientRecentStore.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Context import androidx.security.crypto.EncryptedSharedPreferences diff --git a/app/src/main/java/com/tomhempel/rbarometer/ui/DashboardHandler.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/DashboardHandler.kt new file mode 100644 index 0000000..c5bf553 --- /dev/null +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/DashboardHandler.kt @@ -0,0 +1,404 @@ +package com.tomhempel.rbarometer.ui + +import android.text.Editable +import android.text.TextWatcher +import android.content.res.ColorStateList +import android.graphics.Typeface +import android.view.Gravity +import android.view.View +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.PopupMenu +import android.widget.TextView +import android.widget.Toast +import androidx.core.content.ContextCompat +import com.google.android.material.button.MaterialButton +import com.google.android.material.card.MaterialCardView +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.R + +class DashboardHandler( + private val activity: MainActivity, + private val onClose: () -> Unit, +) { + private data class DashboardClient( + val code: String, + val status: String, + val cycle: Int, + val session: Int, + val totalSessions: Int, + val lastSession: String, + val nextSession: String, + val pendingMeasures: Int, + val syncStatus: String, + val trend: String, + val participation: String, + val cadence: String, + val ownerNote: String, + ) + + private val clients = listOf( + DashboardClient( + code = "A102", + status = "Due today", + cycle = 3, + session = 2, + totalSessions = 6, + lastSession = "Jun 17", + nextSession = "Today", + pendingMeasures = 2, + syncStatus = "Sync OK", + trend = "Stable", + participation = "Active", + cadence = "Weekly", + ownerNote = "Continue current cycle", + ), + DashboardClient( + code = "B447", + status = "Overdue", + cycle = 1, + session = 5, + totalSessions = 6, + lastSession = "Jun 10", + nextSession = "Jun 18", + pendingMeasures = 4, + syncStatus = "3 pending sync", + trend = "Needs review", + participation = "Active", + cadence = "Weekly", + ownerNote = "Needs scheduling contact", + ), + DashboardClient( + code = "C083", + status = "Upcoming", + cycle = 2, + session = 1, + totalSessions = 6, + lastSession = "Jun 21", + nextSession = "Jun 28", + pendingMeasures = 0, + syncStatus = "Sync OK", + trend = "Improving", + participation = "Active", + cadence = "Every 2 weeks", + ownerNote = "Ready for next cycle", + ), + DashboardClient( + code = "D219", + status = "Paused", + cycle = 4, + session = 6, + totalSessions = 6, + lastSession = "Jun 03", + nextSession = "Not planned", + pendingMeasures = 1, + syncStatus = "1 pending sync", + trend = "Participation paused", + participation = "Inactive", + cadence = "On hold", + ownerNote = "Confirm continuation", + ), + ) + + fun show() { + activity.setContentView(R.layout.dashboard_screen) + activity.setBackPressInterceptor { + close() + true + } + bind() + } + + private fun bind() { + activity.findViewById(R.id.dashboardBackButton).setOnClickListener { + close() + } + activity.findViewById(R.id.dashboardSubtitle).text = + "Prototype view for repeated limited-session cycles" + activity.findViewById(R.id.dashboardDueValue).text = + clients.count { it.status == "Due today" || it.status == "Overdue" }.toString() + activity.findViewById(R.id.dashboardActiveValue).text = + clients.count { it.status != "Paused" }.toString() + activity.findViewById(R.id.dashboardSyncValue).text = + clients.count { it.syncStatus.contains("pending") }.toString() + + activity.findViewById(R.id.dashboardSearchInput).addTextChangedListener( + object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + renderClients(s?.toString().orEmpty()) + } + override fun afterTextChanged(s: Editable?) = Unit + }, + ) + renderClients("") + } + + private fun renderClients(query: String) { + val list = activity.findViewById(R.id.dashboardClientList) + list.removeAllViews() + val normalized = query.trim() + val visibleClients = if (normalized.isBlank()) { + clients + } else { + clients.filter { client -> + client.code.contains(normalized, ignoreCase = true) || + client.status.contains(normalized, ignoreCase = true) || + client.participation.contains(normalized, ignoreCase = true) || + client.trend.contains(normalized, ignoreCase = true) || + client.nextSession.contains(normalized, ignoreCase = true) + } + } + visibleClients.forEach { client -> + list.addView(createClientCard(client)) + } + } + + private fun createClientCard(client: DashboardClient): View { + val card = MaterialCardView(activity).apply { + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT, + ).also { it.setMargins(0, dp(10), 0, 0) } + radius = dp(10).toFloat() + strokeWidth = dp(1) + setStrokeColor(ContextCompat.getColor(activity, R.color.brand_header_stroke)) + setCardBackgroundColor(ContextCompat.getColor(activity, R.color.brand_header_surface)) + cardElevation = dp(1).toFloat() + } + + val content = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + setPadding(dp(16), dp(14), dp(16), dp(16)) + } + + val header = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + } + val titleBlock = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f) + } + val title = TextView(activity).apply { + text = client.code + textSize = 20f + setTypeface(typeface, Typeface.BOLD) + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_dark)) + } + val subtitle = TextView(activity).apply { + text = "Cycle ${client.cycle} - Session ${client.session} of ${client.totalSessions} - ${client.cadence}" + textSize = 13f + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_muted)) + } + titleBlock.addView(title) + titleBlock.addView(subtitle) + header.addView(titleBlock) + header.addView(statusChip(client.status)) + + val scheduleRow = metricRow( + leftTitle = "Last session", + leftValue = client.lastSession, + rightTitle = "Next planned", + rightValue = client.nextSession, + rightAction = "Edit", + ) + + val workRow = metricRow( + leftTitle = "Open measures", + leftValue = client.pendingMeasures.toString(), + rightTitle = "Data state", + rightValue = client.syncStatus, + rightAction = null, + ) + + val trend = TextView(activity).apply { + text = "Trend: ${client.trend} - Participation: ${client.participation}\n${client.ownerNote}" + textSize = 14f + setLineSpacing(dp(2).toFloat(), 1f) + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_dark)) + setPadding(0, dp(12), 0, 0) + } + + val actionRow = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(14), 0, 0) + } + actionRow.addView(primaryAction("Select client", weight = 1.25f)) + actionRow.addView(statusDropdown(client.participation, weight = 1.15f)) + actionRow.addView(destructiveAction("Remove", weight = 0.8f)) + + content.addView(header) + content.addView(scheduleRow) + content.addView(workRow) + content.addView(trend) + content.addView(actionRow) + card.addView(content) + return card + } + + private fun metricRow( + leftTitle: String, + leftValue: String, + rightTitle: String, + rightValue: String, + rightAction: String?, + ): View { + val row = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + isBaselineAligned = false + setPadding(0, dp(12), 0, 0) + } + row.addView(metricBlock(leftTitle, leftValue, weight = 1f)) + row.addView(metricBlock(rightTitle, rightValue, weight = 1f, action = rightAction)) + return row + } + + private fun metricBlock( + title: String, + value: String, + weight: Float, + action: String? = null, + ): View { + val block = LinearLayout(activity).apply { + orientation = LinearLayout.VERTICAL + layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, weight) + .also { it.setMargins(0, 0, dp(8), 0) } + background = ContextCompat.getDrawable(activity, R.drawable.bg_session_metric) + setPadding(dp(12), dp(10), dp(12), dp(10)) + } + val titleView = TextView(activity).apply { + text = title + textSize = 11f + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_muted)) + } + val valueRow = LinearLayout(activity).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + setPadding(0, dp(3), 0, 0) + } + val valueView = TextView(activity).apply { + text = value + textSize = 16f + setTypeface(typeface, Typeface.BOLD) + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_dark)) + layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f) + } + valueRow.addView(valueView) + if (action != null) { + valueRow.addView(smallAction(action)) + } + block.addView(titleView) + block.addView(valueRow) + return block + } + + private fun statusChip(status: String): TextView { + val bg = when (status) { + "Overdue" -> R.drawable.bg_chip_amber + "Paused" -> R.drawable.bg_chip_locked + else -> R.drawable.bg_chip_green + } + return TextView(activity).apply { + text = status + textSize = 12f + setTypeface(typeface, Typeface.BOLD) + setTextColor( + ContextCompat.getColor( + activity, + if (status == "Paused") R.color.brand_chip_locked_text else R.color.brand_text_on_dark, + ), + ) + setBackgroundResource(bg) + setPadding(dp(10), dp(6), dp(10), dp(6)) + } + } + + private fun primaryAction(label: String, weight: Float): MaterialButton = + dashboardButton(label, weight).apply { + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_on_dark)) + backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_purple)) + strokeColor = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_purple)) + } + + private fun lifecycleAction(label: String, weight: Float): MaterialButton = + dashboardButton(label, weight).apply { + setTextColor(ContextCompat.getColor(activity, R.color.brand_text_dark)) + backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_header_surface)) + strokeColor = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_header_stroke)) + } + + private fun statusDropdown(status: String, weight: Float): MaterialButton = + lifecycleAction("Status: $status", weight).apply { + setOnClickListener { anchor -> + PopupMenu(activity, anchor).apply { + menu.add("Active") + menu.add("Inactive") + menu.add("Archived") + setOnMenuItemClickListener { item -> + Toast.makeText( + activity, + "Set status to ${item.title} is prototype-only", + Toast.LENGTH_SHORT, + ).show() + true + } + }.show() + } + } + + private fun destructiveAction(label: String, weight: Float): MaterialButton = + dashboardButton(label, weight).apply { + setTextColor(ContextCompat.getColor(activity, R.color.brand_destructive_text)) + backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_destructive_fill)) + strokeColor = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_destructive_fill)) + } + + private fun dashboardButton(label: String, weight: Float): MaterialButton = + MaterialButton(activity).apply { + layoutParams = LinearLayout.LayoutParams(0, dp(42), weight).also { + it.setMargins(0, 0, dp(6), 0) + } + text = label + textSize = 11f + isAllCaps = false + cornerRadius = dp(18) + strokeWidth = dp(1) + insetTop = 0 + insetBottom = 0 + setPadding(dp(6), 0, dp(6), 0) + setOnClickListener { + Toast.makeText(activity, "$label is prototype-only", Toast.LENGTH_SHORT).show() + } + } + + private fun smallAction(label: String): MaterialButton = + MaterialButton(activity).apply { + layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, dp(32)) + text = label + textSize = 11f + isAllCaps = false + cornerRadius = dp(16) + strokeWidth = dp(1) + insetTop = 0 + insetBottom = 0 + minWidth = dp(52) + minimumWidth = dp(52) + setPadding(dp(8), 0, dp(8), 0) + setTextColor(ContextCompat.getColor(activity, R.color.brand_purple)) + backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_header_surface)) + strokeColor = ColorStateList.valueOf(ContextCompat.getColor(activity, R.color.brand_purple)) + setOnClickListener { + Toast.makeText(activity, "$label next session is prototype-only", Toast.LENGTH_SHORT).show() + } + } + + private fun close() { + activity.setBackPressInterceptor(null) + onClose() + } + + private fun dp(value: Int): Int = + (value * activity.resources.displayMetrics.density).toInt() +} diff --git a/app/src/main/java/com/dano/test1/ui/DevSettingsAccess.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsAccess.kt similarity index 74% rename from app/src/main/java/com/dano/test1/ui/DevSettingsAccess.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsAccess.kt index 51ebb1f..e16ea1a 100644 --- a/app/src/main/java/com/dano/test1/ui/DevSettingsAccess.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsAccess.kt @@ -1,7 +1,7 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Context -import com.dano.test1.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.QuestionnaireCache object DevSettingsAccess { const val CLIENT_CODE = "DEVELOPER-SETTINGS" diff --git a/app/src/main/java/com/dano/test1/ui/DevSettingsActivity.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsActivity.kt similarity index 93% rename from app/src/main/java/com/dano/test1/ui/DevSettingsActivity.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsActivity.kt index 070bff8..e2d17f8 100644 --- a/app/src/main/java/com/dano/test1/ui/DevSettingsActivity.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/DevSettingsActivity.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Intent import android.os.Bundle @@ -12,16 +12,16 @@ import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.Toolbar -import com.dano.test1.MainActivity -import com.dano.test1.R -import com.dano.test1.network.QuestionnaireSyncService -import com.dano.test1.network.TokenStore -import com.dano.test1.utils.SyncProgressOverlay -import com.dano.test1.utils.SyncProgressTexts +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.QuestionnaireSyncService +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.utils.SyncProgressOverlay +import com.tomhempel.rbarometer.utils.SyncProgressTexts import com.google.android.material.button.MaterialButton -import com.dano.test1.ui.AppLanguageStore -import com.dano.test1.ui.LogoutDialogs -import com.dano.test1.ui.SessionLogout +import com.tomhempel.rbarometer.ui.AppLanguageStore +import com.tomhempel.rbarometer.ui.LogoutDialogs +import com.tomhempel.rbarometer.ui.SessionLogout import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/dano/test1/ui/HandlerOpeningScreen.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/HandlerOpeningScreen.kt similarity index 88% rename from app/src/main/java/com/dano/test1/ui/HandlerOpeningScreen.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/HandlerOpeningScreen.kt index 2fb3acb..d783d18 100644 --- a/app/src/main/java/com/dano/test1/ui/HandlerOpeningScreen.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/HandlerOpeningScreen.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Intent import android.content.res.ColorStateList @@ -12,36 +12,36 @@ import androidx.appcompat.widget.AppCompatImageButton import android.widget.* import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity -import com.dano.test1.R -import com.dano.test1.data.PendingUploadRepository -import com.dano.test1.data.UnuploadedWorkRepository -import com.dano.test1.network.NetworkUtils -import com.dano.test1.network.QuestionnaireAnswerSync -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.SyncCoordinator -import com.dano.test1.network.SyncResult -import com.dano.test1.questionnaire.AppLanguages -import com.dano.test1.network.TokenStore +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.data.PendingUploadRepository +import com.tomhempel.rbarometer.data.UnuploadedWorkRepository +import com.tomhempel.rbarometer.network.NetworkUtils +import com.tomhempel.rbarometer.network.QuestionnaireAnswerSync +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.SyncCoordinator +import com.tomhempel.rbarometer.network.SyncResult +import com.tomhempel.rbarometer.questionnaire.AppLanguages +import com.tomhempel.rbarometer.network.TokenStore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import com.dano.test1.questionnaire.ConditionJsonParser -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.questionnaire.QuestionItem -import com.dano.test1.questionnaire.QuestionnaireBase -import com.dano.test1.questionnaire.QuestionnaireAllInOne -import com.dano.test1.questionnaire.QuestionnaireGeneric -import com.dano.test1.questionnaire.QuestionnaireValidation +import com.tomhempel.rbarometer.questionnaire.ConditionJsonParser +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.questionnaire.QuestionItem +import com.tomhempel.rbarometer.questionnaire.QuestionnaireBase +import com.tomhempel.rbarometer.questionnaire.QuestionnaireAllInOne +import com.tomhempel.rbarometer.questionnaire.QuestionnaireGeneric +import com.tomhempel.rbarometer.questionnaire.QuestionnaireValidation import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.google.android.material.bottomsheet.BottomSheetDialog import org.json.JSONObject -import com.dano.test1.utils.ScreenLoading -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.utils.ScreenLoading +import com.tomhempel.rbarometer.utils.ViewUtils class HandlerOpeningScreen(private val activity: MainActivity) { @@ -60,6 +60,9 @@ class HandlerOpeningScreen(private val activity: MainActivity) { private lateinit var spinner: Spinner private lateinit var textView: TextView private lateinit var noClientsAssignedText: TextView + private lateinit var sessionMetricClientsValue: TextView + private lateinit var sessionMetricMeasuresValue: TextView + private lateinit var sessionMetricSyncValue: TextView private lateinit var nextStepBannerCard: View private lateinit var nextStepEyebrow: TextView private lateinit var nextStepTitle: TextView @@ -213,6 +216,9 @@ class HandlerOpeningScreen(private val activity: MainActivity) { spinner = activity.findViewById(R.id.string_spinner1) textView = activity.findViewById(R.id.textView) noClientsAssignedText = activity.findViewById(R.id.noClientsAssignedText) + sessionMetricClientsValue = activity.findViewById(R.id.sessionMetricClientsValue) + sessionMetricMeasuresValue = activity.findViewById(R.id.sessionMetricMeasuresValue) + sessionMetricSyncValue = activity.findViewById(R.id.sessionMetricSyncValue) nextStepBannerCard = activity.findViewById(R.id.nextStepBannerCard) nextStepEyebrow = activity.findViewById(R.id.nextStepEyebrow) nextStepTitle = activity.findViewById(R.id.nextStepTitle) @@ -233,23 +239,40 @@ class HandlerOpeningScreen(private val activity: MainActivity) { refreshProgress = activity.findViewById(R.id.refreshProgress) refreshButton.contentDescription = t("refresh") settingsButton.contentDescription = tOr("settings", hubFallback("Einstellungen", "Settings")) - textView.text = t("questionnaire_title") + textView.text = hubFallback("Sitzungsinstrumente", "Session measures") applyHubLabels() + updateSessionMetrics() applyCoachDisplay() } private fun applyHubLabels() { if (!::labelLanguage.isInitialized) return - headerWelcome.text = tOr("hub_welcome_back", hubFallback("Willkommen zurück", "Welcome back")) + headerWelcome.text = "Barometer" labelLanguage.text = tOr("language", hubFallback("Sprache", "Language")) - labelClientCode.text = tOr("client_code", hubFallback("Klientencode", "Client code")) + labelClientCode.text = hubFallback("Aktiver Klient", "Active client") } private fun applyCoachDisplay() { if (!::coachNameDisplay.isInitialized) return val username = TokenStore.getUsername(activity)?.trim().orEmpty() - coachNameDisplay.text = username.ifBlank { - tOr("coach_code", hubFallback("Coach", "Coach")) + coachNameDisplay.text = if (username.isBlank()) { + hubFallback("Sitzungskonsole", "Session console") + } else { + hubFallback("Beraterkonsole: $username", "Counselor console: $username") + } + } + + private fun updateSessionMetrics() { + if (!::sessionMetricClientsValue.isInitialized) return + sessionMetricClientsValue.text = assignedClientsForUi().size.toString() + sessionMetricMeasuresValue.text = questionnaireEntries.size.toString() + CoroutineScope(Dispatchers.Main).launch { + val count = withContext(Dispatchers.IO) { + PendingUploadRepository.countAll() + } + if (::sessionMetricSyncValue.isInitialized) { + sessionMetricSyncValue.text = if (count > 0) count.toString() else "OK" + } } } @@ -529,6 +552,38 @@ class HandlerOpeningScreen(private val activity: MainActivity) { setTypeface(typeface, android.graphics.Typeface.BOLD) } + val dashboardButton = MaterialButton(activity).apply { + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT, + ).also { + it.bottomMargin = dp(10) + } + text = hubFallback("Dashboard", "Dashboard") + isAllCaps = false + icon = ContextCompat.getDrawable(activity, R.drawable.ic_person_24) + iconGravity = MaterialButton.ICON_GRAVITY_TEXT_START + iconPadding = dp(10) + iconTint = ColorStateList.valueOf(color(R.color.brand_purple)) + setTextColor(color(R.color.brand_text_dark)) + textAlignment = View.TEXT_ALIGNMENT_VIEW_START + gravity = Gravity.START or Gravity.CENTER_VERTICAL + backgroundTintList = ColorStateList.valueOf(color(R.color.brand_header_surface)) + strokeColor = ColorStateList.valueOf(color(R.color.brand_header_stroke)) + strokeWidth = dp(1) + cornerRadius = dp(20) + insetTop = 0 + insetBottom = 0 + setPadding(dp(12), dp(14), dp(12), dp(14)) + setOnClickListener { + dialog.dismiss() + DashboardHandler(activity) { + activity.setBackPressInterceptor(null) + init() + }.show() + } + } + val logoutButton = MaterialButton(activity).apply { layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, @@ -557,6 +612,14 @@ class HandlerOpeningScreen(private val activity: MainActivity) { } container.addView(handle) + container.addView(titleView) + container.addView(View(activity).apply { + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + dp(14), + ) + }) + container.addView(dashboardButton) container.addView(logoutButton) dialog.setContentView(container) dialog.show() @@ -688,6 +751,7 @@ class HandlerOpeningScreen(private val activity: MainActivity) { refreshClientSpinner() applyUpdateButtonTexts(force = true) updateStatusStrip() + updateSessionMetrics() updateQuestionnaireSectionVisibility() refreshLoadedClientUi() } @@ -711,6 +775,7 @@ class HandlerOpeningScreen(private val activity: MainActivity) { noClientsAssignedText.text = t("no_clients_assigned") noClientsAssignedText.visibility = View.VISIBLE textView.visibility = View.GONE + updateSessionMetrics() nextStepBannerCard.visibility = View.GONE questionnaireScroll.visibility = View.GONE bottomUploadDock.visibility = View.GONE @@ -728,9 +793,9 @@ class HandlerOpeningScreen(private val activity: MainActivity) { nextStepBannerCard.visibility = View.VISIBLE val completed = dynamicButtons.count { isCompleted(it) } - nextStepEyebrow.text = t("next_step_label") - nextStepTitle.text = t("next_step_loading_title") - nextStepBody.text = t("next_step_loading_body") + nextStepEyebrow.text = hubFallback("Nächster Sitzungsschritt", "Next session step") + nextStepTitle.text = hubFallback("Sitzungsstatus wird geprüft", "Checking session status") + nextStepBody.text = hubFallback("Lokale Daten, Reviews und Synchronisation werden ausgewertet.", "Reviewing local measures, scoring work, and sync status.") nextStepActionButton.visibility = View.GONE nextStepActionButton.setOnClickListener(null) @@ -769,9 +834,19 @@ class HandlerOpeningScreen(private val activity: MainActivity) { } private fun applyNextStepBanner(titleKey: String, bodyKey: String, action: NextStepAction) { - nextStepEyebrow.text = t("next_step_label") - nextStepTitle.text = t(titleKey) - nextStepBody.text = t(bodyKey) + nextStepEyebrow.text = hubFallback("Nächster Sitzungsschritt", "Next session step") + nextStepTitle.text = when (action) { + NextStepAction.UPLOAD -> hubFallback("Synchronisation offen", "Sync required") + NextStepAction.REVIEW -> hubFallback("Score-Review offen", "Score review pending") + NextStepAction.QUESTIONNAIRE -> hubFallback("Sitzung fortsetzen", "Continue session") + NextStepAction.NONE -> hubFallback("Sitzung vollständig", "Session complete") + } + nextStepBody.text = when (action) { + NextStepAction.UPLOAD -> hubFallback("Es gibt fertige lokale Sitzungsdaten, die hochgeladen werden müssen.", "Completed local session data is waiting to be uploaded.") + NextStepAction.REVIEW -> hubFallback("Mindestens ein Score benötigt noch eine fachliche Prüfung.", "At least one score still needs counselor review.") + NextStepAction.QUESTIONNAIRE -> hubFallback("Der nächste verfügbare Messpunkt ist bereit für diese Sitzung.", "The next available measure is ready for this session.") + NextStepAction.NONE -> hubFallback("Alle verfügbaren Messpunkte für diesen Klienten sind abgeschlossen.", "All available measures for this client are complete.") + } when (action) { NextStepAction.UPLOAD -> { nextStepActionButton.visibility = View.VISIBLE @@ -793,7 +868,7 @@ class HandlerOpeningScreen(private val activity: MainActivity) { } NextStepAction.QUESTIONNAIRE -> { nextStepActionButton.visibility = View.VISIBLE - nextStepActionButton.text = t("next_step_show_questionnaire") + nextStepActionButton.text = hubFallback("Messpunkt anzeigen", "Show measure") nextStepActionButton.setOnClickListener { highlightNextAvailableQuestionnaire() } } NextStepAction.NONE -> { @@ -952,6 +1027,9 @@ class HandlerOpeningScreen(private val activity: MainActivity) { val base = t("upload") uploadButton.text = if (count > 0) "$base ($count)" else base uploadButton.contentDescription = uploadButton.text + if (::sessionMetricSyncValue.isInitialized) { + sessionMetricSyncValue.text = if (count > 0) count.toString() else "OK" + } } } @@ -1045,7 +1123,8 @@ class HandlerOpeningScreen(private val activity: MainActivity) { uploadButton.text = t("upload") applyHubLabels() applyCoachDisplay() - textView.text = t("questionnaire_title") + textView.text = hubFallback("Sitzungsinstrumente", "Session measures") + updateSessionMetrics() updateNextStepBanner() } diff --git a/app/src/main/java/com/dano/test1/ui/LoadButtonHandler.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/LoadButtonHandler.kt similarity index 92% rename from app/src/main/java/com/dano/test1/ui/LoadButtonHandler.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/LoadButtonHandler.kt index 33a105c..1abdda3 100644 --- a/app/src/main/java/com/dano/test1/ui/LoadButtonHandler.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/LoadButtonHandler.kt @@ -1,21 +1,21 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Intent import android.widget.Button import android.widget.Toast -import com.dano.test1.LanguageManager -import com.dano.test1.MainActivity -import com.dano.test1.data.ClientAnswersCache -import com.dano.test1.data.ClientRepository -import com.dano.test1.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.data.ClientAnswersCache +import com.tomhempel.rbarometer.data.ClientRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository import kotlinx.coroutines.* -import com.dano.test1.data.CompletedQuestionnaire -import com.dano.test1.network.NetworkUtils -import com.dano.test1.network.QuestionnaireAnswerSync -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.TokenStore -import com.dano.test1.questionnaire.GlobalValues -import com.dano.test1.questionnaire.QuestionItem +import com.tomhempel.rbarometer.data.CompletedQuestionnaire +import com.tomhempel.rbarometer.network.NetworkUtils +import com.tomhempel.rbarometer.network.QuestionnaireAnswerSync +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.TokenStore +import com.tomhempel.rbarometer.questionnaire.GlobalValues +import com.tomhempel.rbarometer.questionnaire.QuestionItem class LoadButtonHandler( private val activity: MainActivity, diff --git a/app/src/main/java/com/dano/test1/ui/LogoutDialogs.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/LogoutDialogs.kt similarity index 99% rename from app/src/main/java/com/dano/test1/ui/LogoutDialogs.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/LogoutDialogs.kt index 523103b..aff0a62 100644 --- a/app/src/main/java/com/dano/test1/ui/LogoutDialogs.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/LogoutDialogs.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.app.Dialog import android.content.res.ColorStateList @@ -13,7 +13,7 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.widget.NestedScrollView -import com.dano.test1.R +import com.tomhempel.rbarometer.R import com.google.android.material.button.MaterialButton /** diff --git a/app/src/main/java/com/dano/test1/ui/MonthsSpinner.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/MonthsSpinner.kt similarity index 92% rename from app/src/main/java/com/dano/test1/ui/MonthsSpinner.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/MonthsSpinner.kt index 1e25bf7..6977706 100644 --- a/app/src/main/java/com/dano/test1/ui/MonthsSpinner.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/MonthsSpinner.kt @@ -1,6 +1,6 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager data class Month(val name: String) { override fun toString(): String = name diff --git a/app/src/main/java/com/dano/test1/ui/NotificationPermissionPrompter.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/NotificationPermissionPrompter.kt similarity index 96% rename from app/src/main/java/com/dano/test1/ui/NotificationPermissionPrompter.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/NotificationPermissionPrompter.kt index bceb0ce..3633347 100644 --- a/app/src/main/java/com/dano/test1/ui/NotificationPermissionPrompter.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/NotificationPermissionPrompter.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.Manifest import android.app.Activity @@ -7,7 +7,7 @@ import android.os.Build import android.view.LayoutInflater import androidx.activity.result.ActivityResultLauncher import androidx.core.content.ContextCompat -import com.dano.test1.R +import com.tomhempel.rbarometer.R import com.google.android.material.dialog.MaterialAlertDialogBuilder /** diff --git a/app/src/main/java/com/dano/test1/ui/QuestionnaireCardUi.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/QuestionnaireCardUi.kt similarity index 97% rename from app/src/main/java/com/dano/test1/ui/QuestionnaireCardUi.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/QuestionnaireCardUi.kt index a77ddde..fb85554 100644 --- a/app/src/main/java/com/dano/test1/ui/QuestionnaireCardUi.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/QuestionnaireCardUi.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.res.ColorStateList import android.graphics.Typeface @@ -8,8 +8,8 @@ import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat -import com.dano.test1.R -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.button.MaterialButton import kotlin.math.roundToInt diff --git a/app/src/main/java/com/dano/test1/ui/ReviewScoresHandler.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/ReviewScoresHandler.kt similarity index 96% rename from app/src/main/java/com/dano/test1/ui/ReviewScoresHandler.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/ReviewScoresHandler.kt index 6941d12..30cdae6 100644 --- a/app/src/main/java/com/dano/test1/ui/ReviewScoresHandler.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/ReviewScoresHandler.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.res.ColorStateList import android.graphics.Typeface @@ -15,19 +15,19 @@ import android.widget.Toast import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.dano.test1.MainActivity -import com.dano.test1.R -import com.dano.test1.data.CoachScoringReviewRepository -import com.dano.test1.network.ClientScoringReview -import com.dano.test1.network.QuestionnaireApiClient -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.ScoringReviewProfile -import com.dano.test1.notification.UploadReminderScheduler -import com.dano.test1.scoring.LocalScoringReviewBuilder -import com.dano.test1.questionnaire.AppLanguages -import com.dano.test1.ui.localization.UiStrings -import com.dano.test1.utils.ScreenLoading -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.data.CoachScoringReviewRepository +import com.tomhempel.rbarometer.network.ClientScoringReview +import com.tomhempel.rbarometer.network.QuestionnaireApiClient +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.ScoringReviewProfile +import com.tomhempel.rbarometer.notification.UploadReminderScheduler +import com.tomhempel.rbarometer.scoring.LocalScoringReviewBuilder +import com.tomhempel.rbarometer.questionnaire.AppLanguages +import com.tomhempel.rbarometer.ui.localization.UiStrings +import com.tomhempel.rbarometer.utils.ScreenLoading +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.button.MaterialButton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/dano/test1/ui/SessionLogout.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/SessionLogout.kt similarity index 85% rename from app/src/main/java/com/dano/test1/ui/SessionLogout.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/SessionLogout.kt index f531894..f65927a 100644 --- a/app/src/main/java/com/dano/test1/ui/SessionLogout.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/SessionLogout.kt @@ -1,12 +1,12 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.content.Context -import com.dano.test1.LanguageManager -import com.dano.test1.data.UnuploadedWorkRepository -import com.dano.test1.network.ClientAnswerSyncStore -import com.dano.test1.network.NetworkUtils -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.network.TokenStore +import com.tomhempel.rbarometer.LanguageManager +import com.tomhempel.rbarometer.data.UnuploadedWorkRepository +import com.tomhempel.rbarometer.network.ClientAnswerSyncStore +import com.tomhempel.rbarometer.network.NetworkUtils +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.network.TokenStore import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/dano/test1/ui/SystemBarInsets.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/SystemBarInsets.kt similarity index 97% rename from app/src/main/java/com/dano/test1/ui/SystemBarInsets.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/SystemBarInsets.kt index 1f26b05..4f06712 100644 --- a/app/src/main/java/com/dano/test1/ui/SystemBarInsets.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/SystemBarInsets.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.app.Activity import android.view.View @@ -6,7 +6,7 @@ import android.view.ViewGroup import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding -import com.dano.test1.R +import com.tomhempel.rbarometer.R import kotlin.math.max /** diff --git a/app/src/main/java/com/dano/test1/ui/UploadOverviewHandler.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/UploadOverviewHandler.kt similarity index 97% rename from app/src/main/java/com/dano/test1/ui/UploadOverviewHandler.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/UploadOverviewHandler.kt index 6539e3b..2d11eed 100644 --- a/app/src/main/java/com/dano/test1/ui/UploadOverviewHandler.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/UploadOverviewHandler.kt @@ -1,4 +1,4 @@ -package com.dano.test1.ui +package com.tomhempel.rbarometer.ui import android.graphics.Typeface import android.util.Log @@ -9,20 +9,20 @@ import android.widget.* import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.dano.test1.MainActivity -import com.dano.test1.MyApp -import com.dano.test1.R -import com.dano.test1.data.AnswerRepository -import com.dano.test1.data.CoachScoringReviewRepository -import com.dano.test1.data.CompletedQuestionnaireRepository -import com.dano.test1.data.Question -import com.dano.test1.network.DatabaseUploader -import com.dano.test1.network.QuestionnaireCache -import com.dano.test1.questionnaire.AppLanguages -import com.dano.test1.questionnaire.QuestionnaireTranslationsLoader -import com.dano.test1.ui.localization.UiStrings -import com.dano.test1.utils.ScreenLoading -import com.dano.test1.utils.ViewUtils +import com.tomhempel.rbarometer.MainActivity +import com.tomhempel.rbarometer.MyApp +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.data.AnswerRepository +import com.tomhempel.rbarometer.data.CoachScoringReviewRepository +import com.tomhempel.rbarometer.data.CompletedQuestionnaireRepository +import com.tomhempel.rbarometer.data.Question +import com.tomhempel.rbarometer.network.DatabaseUploader +import com.tomhempel.rbarometer.network.QuestionnaireCache +import com.tomhempel.rbarometer.questionnaire.AppLanguages +import com.tomhempel.rbarometer.questionnaire.QuestionnaireTranslationsLoader +import com.tomhempel.rbarometer.ui.localization.UiStrings +import com.tomhempel.rbarometer.utils.ScreenLoading +import com.tomhempel.rbarometer.utils.ViewUtils import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.gson.JsonParser diff --git a/app/src/main/java/com/dano/test1/ui/localization/UiStrings.kt b/app/src/main/java/com/tomhempel/rbarometer/ui/localization/UiStrings.kt similarity index 97% rename from app/src/main/java/com/dano/test1/ui/localization/UiStrings.kt rename to app/src/main/java/com/tomhempel/rbarometer/ui/localization/UiStrings.kt index b7f6f35..0a0f9a3 100644 --- a/app/src/main/java/com/dano/test1/ui/localization/UiStrings.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/ui/localization/UiStrings.kt @@ -1,6 +1,6 @@ -package com.dano.test1.ui.localization +package com.tomhempel.rbarometer.ui.localization -import com.dano.test1.LanguageManager +import com.tomhempel.rbarometer.LanguageManager /** * Shared UI string helpers for upload overview and activities. diff --git a/app/src/main/java/com/dano/test1/utils/DateAnswerFormat.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/DateAnswerFormat.kt similarity index 98% rename from app/src/main/java/com/dano/test1/utils/DateAnswerFormat.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/DateAnswerFormat.kt index cb58e74..801b42d 100644 --- a/app/src/main/java/com/dano/test1/utils/DateAnswerFormat.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/DateAnswerFormat.kt @@ -1,4 +1,4 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils import java.util.Calendar import java.util.Locale diff --git a/app/src/main/java/com/dano/test1/utils/LanguageManager.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/LanguageManager.kt similarity index 98% rename from app/src/main/java/com/dano/test1/utils/LanguageManager.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/LanguageManager.kt index a0e5fe5..66481b1 100644 --- a/app/src/main/java/com/dano/test1/utils/LanguageManager.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/LanguageManager.kt @@ -1,4 +1,4 @@ -package com.dano.test1 +package com.tomhempel.rbarometer /** * Resolves UI strings from API translations (synced from the website). diff --git a/app/src/main/java/com/dano/test1/utils/ScreenLoading.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/ScreenLoading.kt similarity index 97% rename from app/src/main/java/com/dano/test1/utils/ScreenLoading.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/ScreenLoading.kt index 2a86eb7..5f6dcf4 100644 --- a/app/src/main/java/com/dano/test1/utils/ScreenLoading.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/ScreenLoading.kt @@ -1,10 +1,10 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils import android.util.Log import android.view.View import android.view.ViewGroup import android.view.animation.DecelerateInterpolator -import com.dano.test1.R +import com.tomhempel.rbarometer.R import com.google.android.material.progressindicator.CircularProgressIndicator /** diff --git a/app/src/main/java/com/dano/test1/utils/SyncPhaseIcons.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncPhaseIcons.kt similarity index 85% rename from app/src/main/java/com/dano/test1/utils/SyncPhaseIcons.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/SyncPhaseIcons.kt index 6941f2f..b31a45e 100644 --- a/app/src/main/java/com/dano/test1/utils/SyncPhaseIcons.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncPhaseIcons.kt @@ -1,8 +1,8 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils import androidx.annotation.DrawableRes -import com.dano.test1.R -import com.dano.test1.network.SyncPhase +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.SyncPhase /** Flat Material-style icons per sync phase — no emoji or decorative chrome. */ object SyncPhaseIcons { diff --git a/app/src/main/java/com/dano/test1/utils/SyncProgressOverlay.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressOverlay.kt similarity index 97% rename from app/src/main/java/com/dano/test1/utils/SyncProgressOverlay.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressOverlay.kt index dfa4ecf..2bc8f69 100644 --- a/app/src/main/java/com/dano/test1/utils/SyncProgressOverlay.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressOverlay.kt @@ -1,4 +1,4 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils import android.app.Activity import android.graphics.drawable.GradientDrawable @@ -12,9 +12,9 @@ import android.widget.TextView import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.core.widget.ImageViewCompat -import com.dano.test1.R -import com.dano.test1.network.SyncPhase -import com.dano.test1.network.SyncProgress +import com.tomhempel.rbarometer.R +import com.tomhempel.rbarometer.network.SyncPhase +import com.tomhempel.rbarometer.network.SyncProgress import com.google.android.material.progressindicator.LinearProgressIndicator /** diff --git a/app/src/main/java/com/dano/test1/utils/SyncProgressTexts.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressTexts.kt similarity index 97% rename from app/src/main/java/com/dano/test1/utils/SyncProgressTexts.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressTexts.kt index 8f034db..c41ee7d 100644 --- a/app/src/main/java/com/dano/test1/utils/SyncProgressTexts.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/SyncProgressTexts.kt @@ -1,6 +1,6 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils -import com.dano.test1.network.SyncPhase +import com.tomhempel.rbarometer.network.SyncPhase /** Professional DE/EN copy for the sync overlay — phase messages only, no counts. */ object SyncProgressTexts { diff --git a/app/src/main/java/com/dano/test1/utils/TextInputSanitizer.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/TextInputSanitizer.kt similarity index 97% rename from app/src/main/java/com/dano/test1/utils/TextInputSanitizer.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/TextInputSanitizer.kt index cfa7236..f8d46a8 100644 --- a/app/src/main/java/com/dano/test1/utils/TextInputSanitizer.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/TextInputSanitizer.kt @@ -1,4 +1,4 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils /** * Strips patterns commonly used in SQL injection attempts from free-text answers. diff --git a/app/src/main/java/com/dano/test1/utils/ViewUtils.kt b/app/src/main/java/com/tomhempel/rbarometer/utils/ViewUtils.kt similarity index 99% rename from app/src/main/java/com/dano/test1/utils/ViewUtils.kt rename to app/src/main/java/com/tomhempel/rbarometer/utils/ViewUtils.kt index 95d5482..7e0a24b 100644 --- a/app/src/main/java/com/dano/test1/utils/ViewUtils.kt +++ b/app/src/main/java/com/tomhempel/rbarometer/utils/ViewUtils.kt @@ -1,4 +1,4 @@ -package com.dano.test1.utils +package com.tomhempel.rbarometer.utils import android.content.Context import android.os.Build @@ -14,7 +14,7 @@ import android.widget.Spinner import android.widget.TextView import androidx.core.content.ContextCompat import androidx.core.widget.TextViewCompat -import com.dano.test1.R +import com.tomhempel.rbarometer.R import kotlin.math.roundToInt object ViewUtils { diff --git a/app/src/main/res/drawable/bg_session_metric.xml b/app/src/main/res/drawable/bg_session_metric.xml new file mode 100644 index 0000000..3adf4bd --- /dev/null +++ b/app/src/main/res/drawable/bg_session_metric.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..ea7d677 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -5,166 +5,12 @@ android:viewportWidth="108" android:viewportHeight="108"> + android:fillColor="#0E7490" + android:pathData="M0,78 C26,62 48,65 73,49 C88,39 99,27 108,15 L108,108 L0,108 Z" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:fillColor="#14B8A6" + android:pathData="M0,0h108v26 C86,36 64,39 44,32 C27,26 14,17 0,14 Z" /> diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 2b068d1..69c6784 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,30 +1,22 @@ + - - - - - - - - - \ No newline at end of file + android:fillColor="#FFFFFFFF" + android:pathData="M54,23C36.88,23 23,36.88 23,54C23,71.12 36.88,85 54,85C71.12,85 85,71.12 85,54C85,36.88 71.12,23 54,23ZM54,31C66.7,31 77,41.3 77,54C77,66.7 66.7,77 54,77C41.3,77 31,66.7 31,54C31,41.3 41.3,31 54,31Z" /> + + + + + diff --git a/app/src/main/res/layout-sw360dp/opening_screen.xml b/app/src/main/res/layout-sw360dp/opening_screen.xml index c7f99db..c46c28b 100644 --- a/app/src/main/res/layout-sw360dp/opening_screen.xml +++ b/app/src/main/res/layout-sw360dp/opening_screen.xml @@ -223,6 +223,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/sessionMetricsRow" /> + app:layout_constraintTop_toBottomOf="@id/sessionMetricsRow"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/opening_screen.xml b/app/src/main/res/layout/opening_screen.xml index b140b25..379db8e 100644 --- a/app/src/main/res/layout/opening_screen.xml +++ b/app/src/main/res/layout/opening_screen.xml @@ -228,6 +228,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/sessionMetricsRow" /> + app:layout_constraintTop_toBottomOf="@id/sessionMetricsRow"> - #9D8EF5 + #2DD4BF #B3121218 #3D3858 #121218 @@ -12,18 +12,18 @@ #3D3858 #252530 #4A4560 - #9D8EF5 - #4A4560 - #2D2648 - #2A2540 - #46346F + #2DD4BF + #36514C + #123D39 + #183A36 + #14534D #252530 #E8E6F0 #A8A4B8 #3A3848 #D0CCE0 - #E5A83A - #4CAF70 + #0E7490 + #059669 #66BB6A #FFD54F #EF5350 @@ -35,7 +35,7 @@ #33FFFFFF #66BB6A #EF5350 - #9D8EF5 + #22D3EE #3A3A48 #757575 #3D3858 @@ -46,13 +46,13 @@ #252530 #3D3858 #252530 - #9D8EF5 + #2DD4BF #1B3D1F #A5D6A7 #4A2020 #EF9A9A - #2A2540 + #183A36 #1E1E28 #1B3D1F #243328 diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index fe0d192..671cba5 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,5 +1,5 @@ - -