From afb2b234d922c66e4765e7f72c605ac2b05ff08c Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 13 Feb 2023 14:24:37 +0100 Subject: [PATCH] fix formatting --- .github/workflows/android.yml | 2 +- Habitica/build.gradle | 74 +++----- .../ui/activities/TaskFormActivityTest.kt | 6 +- .../fragments/NavigationDrawerFragmentTest.kt | 6 +- .../items/ItemRecyclerFragmentTest.kt | 4 +- .../inventory/stable/PetDetailFragmentTest.kt | 7 +- .../stable/StableRecyclerFragmentTest.kt | 6 +- .../tasks/TaskRecyclerViewFragmentTest.kt | 6 +- .../habitica/HabiticaBaseApplication.kt | 1 - .../android/habitica/api/ApiService.kt | 2 +- .../habitica/api/MaintenanceApiService.kt | 2 +- .../habitica/data/ContentRepository.kt | 2 +- .../android/habitica/data/TaskRepository.kt | 1 - .../data/implementation/ApiClientImpl.kt | 8 +- .../implementation/ChallengeRepositoryImpl.kt | 2 +- .../implementation/InventoryRepositoryImpl.kt | 2 +- .../implementation/SocialRepositoryImpl.kt | 12 +- .../data/implementation/UserRepositoryImpl.kt | 5 +- .../data/local/InventoryLocalRepository.kt | 1 - .../RealmBaseLocalRepository.kt | 8 +- .../RealmChallengeLocalRepository.kt | 66 +++---- .../RealmContentLocalRepository.kt | 8 +- .../RealmCustomizationLocalRepository.kt | 8 +- .../implementation/RealmFAQLocalRepository.kt | 16 +- .../RealmInventoryLocalRepository.kt | 3 +- .../RealmSocialLocalRepository.kt | 88 ++++----- .../RealmTaskLocalRepository.kt | 38 ++-- .../RealmTutorialLocalRepository.kt | 16 +- .../RealmUserLocalRepository.kt | 45 ++--- .../habitica/helpers/AppConfigManager.kt | 6 +- .../habitica/helpers/ExceptionHandler.kt | 18 +- .../helpers/MainNavigationController.kt | 2 +- .../habitica/helpers/NotificationsManager.kt | 17 +- .../habitica/helpers/PurchaseHandler.kt | 34 ++-- .../android/habitica/helpers/PurchaseTypes.kt | 2 +- .../habitica/helpers/SoundFileLoader.kt | 58 +++--- .../habitica/helpers/TaskAlarmManager.kt | 8 +- .../helpers/TaskDescriptionBuilder.kt | 6 +- .../HabiticaFirebaseMessagingService.kt | 2 +- .../notifications/PushNotificationManager.kt | 7 +- .../interactors/DisplayItemDropUseCase.kt | 2 +- .../habitica/interactors/HatchPetUseCase.kt | 3 +- .../android/habitica/interactors/UseCase.kt | 2 +- .../android/habitica/models/members/Member.kt | 4 +- .../models/members/MemberPreferences.kt | 3 +- .../GiftOneGetOneHabiticaPromotion.kt | 2 +- .../android/habitica/models/shops/ShopItem.kt | 2 +- .../android/habitica/models/social/Group.kt | 6 +- .../android/habitica/models/tasks/Days.kt | 4 +- .../android/habitica/models/tasks/Task.kt | 9 +- .../habitica/models/tasks/TaskGroupPlan.kt | 2 +- .../android/habitica/models/tasks/TaskList.kt | 2 +- .../habitica/models/user/Permissions.kt | 2 +- .../habitica/models/user/SubscriptionPlan.kt | 20 +- .../habitica/models/user/UserQuestStatus.kt | 2 +- .../models/user/UserTaskPreferences.kt | 2 +- .../android/habitica/modules/UserModule.kt | 2 +- .../receivers/DeviceCommunicationService.kt | 2 +- .../ui/activities/AddTaskWidgetActivity.kt | 2 +- .../habitica/ui/activities/ArmoireActivity.kt | 2 +- .../habitica/ui/activities/BaseActivity.kt | 13 +- .../ui/activities/BirthdayActivity.kt | 50 +++-- .../ui/activities/ChallengeFormActivity.kt | 18 +- .../habitica/ui/activities/DeathActivity.kt | 9 +- .../activities/FixCharacterValuesActivity.kt | 3 +- .../ui/activities/FullProfileActivity.kt | 48 ++--- .../habitica/ui/activities/LoginActivity.kt | 20 +- .../ui/activities/ReportMessageActivity.kt | 8 +- .../habitica/ui/activities/SetupActivity.kt | 1 - .../ui/activities/SkillTasksActivity.kt | 2 +- .../ui/activities/TaskFormActivity.kt | 31 ++-- .../ui/activities/TaskSummaryActivity.kt | 16 +- .../ui/adapter/AchievementsAdapter.kt | 2 +- ...stomizationEquipmentRecyclerViewAdapter.kt | 11 +- .../CustomizationRecyclerViewAdapter.kt | 26 ++- .../ui/adapter/NavigationDrawerAdapter.kt | 1 - .../adapter/inventory/ItemRecyclerAdapter.kt | 14 +- .../inventory/StableRecyclerAdapter.kt | 3 +- .../social/AchievementProfileAdapter.kt | 2 +- .../social/ChallengesListViewAdapter.kt | 1 - .../tasks/DailiesRecyclerViewHolder.kt | 7 +- .../tasks/HabitsRecyclerViewAdapter.kt | 9 +- .../tasks/RewardsRecyclerViewAdapter.kt | 7 +- .../adapter/tasks/TodosRecyclerViewAdapter.kt | 9 +- .../ui/fragments/AchievementsFragment.kt | 8 +- .../habitica/ui/fragments/BaseMainFragment.kt | 2 +- .../ui/fragments/NavigationDrawerFragment.kt | 18 +- .../habitica/ui/fragments/NewsFragment.kt | 2 +- .../AvatarCustomizationFragment.kt | 74 ++++---- .../customization/AvatarEquipmentFragment.kt | 2 +- .../customization/AvatarOverviewFragment.kt | 42 +++-- .../EquipmentOverviewFragment.kt | 2 +- .../inventory/items/ItemDialogFragment.kt | 57 +++--- .../inventory/items/ItemRecyclerFragment.kt | 2 +- .../fragments/inventory/shops/ShopFragment.kt | 2 +- .../stable/MountDetailRecyclerFragment.kt | 2 +- .../stable/PetDetailRecyclerFragment.kt | 1 - .../stable/StableRecyclerFragment.kt | 2 - .../preferences/AccountPreferenceFragment.kt | 18 +- .../preferences/HabiticaAccountDialog.kt | 9 +- .../preferences/PreferencesFragment.kt | 25 ++- .../purchases/GemsPurchaseFragment.kt | 7 +- .../purchases/SubscriptionFragment.kt | 27 +-- .../ui/fragments/setup/AvatarSetupFragment.kt | 2 +- .../ui/fragments/setup/TaskSetupFragment.kt | 4 +- .../social/InboxMessageListFragment.kt | 31 ++-- .../fragments/social/InboxOverviewFragment.kt | 4 +- .../fragments/social/TavernDetailFragment.kt | 2 +- .../challenges/ChallengeDetailFragment.kt | 58 +++--- .../challenges/ChallengeFilterOptions.kt | 5 +- .../challenges/ChallengeListFragment.kt | 11 +- .../fragments/social/guilds/GuildFragment.kt | 2 +- .../social/guilds/GuildListFragment.kt | 6 +- .../social/party/NoPartyFragmentFragment.kt | 46 ++--- .../social/party/PartyDetailFragment.kt | 2 +- .../fragments/social/party/PartyFragment.kt | 2 +- .../fragments/support/FAQOverviewFragment.kt | 21 ++- .../fragments/support/SupportMainFragment.kt | 1 - .../tasks/RewardsRecyclerviewFragment.kt | 8 +- .../tasks/TaskRecyclerViewFragment.kt | 23 ++- .../ui/helpers/RecyclerViewEmptySupport.kt | 9 +- .../habitica/ui/menu/BottomSheetMenu.kt | 2 +- .../habitica/ui/theme/HabiticaTheme.kt | 13 +- .../ui/viewHolders/ComposableViewHolder.kt | 3 +- .../tasks/ChecklistedViewHolder.kt | 1 - .../ui/viewHolders/tasks/RewardViewHolder.kt | 6 +- .../habitica/ui/viewmodels/GroupViewModel.kt | 35 ++-- .../habitica/ui/viewmodels/InboxViewModel.kt | 10 +- .../ui/viewmodels/MainActivityViewModel.kt | 1 - .../ui/viewmodels/MainUserViewModel.kt | 2 +- .../habitica/ui/viewmodels/StableViewModel.kt | 3 +- .../ui/viewmodels/TaskFormViewModel.kt | 2 +- .../habitica/ui/viewmodels/TasksViewModel.kt | 10 +- .../habitica/ui/views/AppHeaderView.kt | 174 +++++++++--------- .../habitica/ui/views/AvatarCircleShape.kt | 2 +- .../habitica/ui/views/BottomSheetUtils.kt | 5 +- .../android/habitica/ui/views/BuffIcon.kt | 2 +- .../android/habitica/ui/views/ClassIcon.kt | 2 +- .../android/habitica/ui/views/CompletedAt.kt | 14 +- .../habitica/ui/views/ComposableAvatarView.kt | 2 +- .../android/habitica/ui/views/CurrencyText.kt | 2 +- .../android/habitica/ui/views/FlowLayout.kt | 14 +- .../habitica/ui/views/GroupPlanMemberList.kt | 45 ++--- .../ui/views/HabiticaListPreference.kt | 6 +- .../android/habitica/ui/views/LabeledBar.kt | 8 +- .../android/habitica/ui/views/PixelArtView.kt | 2 +- .../habitica/ui/views/SegmentedControl.kt | 7 +- .../android/habitica/ui/views/UserRow.kt | 14 +- .../habitica/ui/views/UsernameLabel.kt | 3 +- .../android/habitica/ui/views/ads/AdButton.kt | 2 +- .../ui/views/dialogs/AchievementDialog.kt | 4 +- .../ui/views/dialogs/HabiticaAlertDialog.kt | 2 +- .../dialogs/QuestCompletedDialogContent.kt | 4 +- .../ui/views/dialogs/WonChallengeDialog.kt | 2 +- .../views/equipment/EquipmentOverviewView.kt | 96 ++++++---- .../views/navigation/BottomNavigationItem.kt | 2 +- .../ui/views/promo/BirthdayMenuView.kt | 18 +- .../habitica/ui/views/promo/PromoMenuView.kt | 1 - .../promo/SubscriptionBuyGemsPromoView.kt | 1 - .../shops/PurchaseDialogBackgroundContent.kt | 2 +- .../views/shops/PurchaseDialogGearContent.kt | 2 +- .../views/shops/PurchaseDialogGemsContent.kt | 2 +- .../views/shops/PurchaseDialogItemContent.kt | 2 +- .../habitica/ui/views/social/ChatBarView.kt | 4 +- .../ui/views/social/InvitationsView.kt | 2 +- .../ui/views/social/OldQuestProgressView.kt | 4 +- .../habitica/ui/views/social/QuestMenuView.kt | 2 +- .../ui/views/social/QuestProgressView.kt | 1 - .../ui/views/stats/StatsSliderView.kt | 2 +- .../habitica/ui/views/stats/StatsView.kt | 31 ++-- .../habitica/ui/views/tasks/AssignSheet.kt | 19 +- .../habitica/ui/views/tasks/AssignedView.kt | 35 ++-- .../ui/views/tasks/TaskFilterDialog.kt | 1 - .../ui/views/tasks/form/ChecklistContainer.kt | 2 +- .../tasks/form/HabitScoringButtonsView.kt | 11 +- .../ui/views/tasks/form/ReminderContainer.kt | 2 +- .../views/tasks/form/StepperValueFormView.kt | 2 +- .../views/tasks/form/TaskDifficultyButtons.kt | 8 +- .../ui/views/tasks/form/TaskFormSelector.kt | 8 +- .../tasks/form/TaskSchedulingControls.kt | 14 +- .../views/yesterdailies/YesterdailyDialog.kt | 8 +- .../utils/AssignedDetailsDeserializer.kt | 6 +- .../utils/CustomizationDeserializer.kt | 8 +- .../android/habitica/utils/TaskSerializer.kt | 1 - .../widget/AvatarStatsWidgetProvider.kt | 6 +- .../widget/HabitButtonWidgetService.kt | 1 - .../habitica/helpers/HealthFormatterTest.kt | 2 +- .../habitica/helpers/NumberAbbreviatorTest.kt | 2 +- build.gradle | 19 +- .../habitica/ExampleInstrumentedTest.kt | 24 --- .../common/habitica/api/HostConfig.kt | 2 +- .../habitrpg/common/habitica/api/Server.kt | 2 +- .../extensions/Application-Extensions.kt | 2 +- .../habitica/extensions/DataBindingUtils.kt | 5 +- .../habitica/extensions/HabitResetOption.kt | 8 +- .../habitica/extensions/Int-Extensions.kt | 2 +- .../habitica/extensions/String-Extensions.kt | 6 +- .../extensions/TaskDifficulty-Extensions.kt | 2 +- .../habitica/helpers/AppConfigManager.kt | 2 +- .../habitica/helpers/DeviceCommunication.kt | 2 +- .../common/habitica/helpers/MarkdownParser.kt | 6 +- .../habitica/helpers/NumberAbbreviator.kt | 8 +- .../helpers/RecyclerViewEmptySupport.kt | 9 +- .../common/habitica/models/auth/UserAuth.kt | 10 +- .../habitica/models/auth/UserAuthResponse.kt | 2 +- .../habitica/models/auth/UserAuthSocial.kt | 2 +- .../models/auth/UserAuthSocialTokens.kt | 2 +- .../notifications/GuildInvitationData.kt | 1 - .../models/notifications/ItemReceivedData.kt | 4 +- .../common/habitica/views/AvatarView.kt | 18 +- .../habitica/views/HabiticaProgressBar.kt | 3 +- .../common/habitica/views/PixelArtView.kt | 8 +- .../common/habitica/ExampleUnitTest.kt | 17 -- detekt.yml | 14 +- detekt_baseline.xml | 154 ++++++++-------- shared/build.gradle.kts | 5 +- .../com/habitrpg/shared/habitica/Platform.kt | 2 +- .../shared/habitica/PlatformLogger.kt | 2 +- .../com/habitrpg/shared/habitica/Platform.kt | 2 +- .../habitrpg/shared/habitica/models/Avatar.kt | 11 +- .../shared/habitica/models/AvatarFlags.kt | 2 +- .../shared/habitica/models/AvatarOutfit.kt | 1 - .../habitica/models/AvatarPreferences.kt | 2 +- .../models/responses/MaintenanceResponse.kt | 2 +- .../models/responses/TaskDirectionDataTemp.kt | 2 +- .../models/responses/TaskScoringResult.kt | 6 +- .../shared/habitica/models/tasks/BaseTask.kt | 3 +- .../habitica/models/tasks/HabitResetOption.kt | 2 +- .../habitica/models/tasks/TaskDifficulty.kt | 4 +- .../habitica/models/tasks/TasksOrder.kt | 2 +- .../com/habitrpg/shared/habitica/Platform.kt | 2 +- .../shared/habitica/PlatformLogger.kt | 2 +- version.properties | 2 +- wearos/build.gradle | 2 +- .../wearos/habitica/MainApplication.kt | 22 +-- .../wearos/habitica/data/ApiClient.kt | 33 ++-- .../wearos/habitica/data/ApiService.kt | 2 +- .../data/repositories/TaskLocalRepository.kt | 14 +- .../data/repositories/TaskRepository.kt | 2 +- .../data/repositories/UserLocalRepository.kt | 2 +- .../data/repositories/UserRepository.kt | 4 +- .../wearos/habitica/extensions/ViewExt.kt | 2 - .../habitica/managers/AppStateManager.kt | 2 +- .../wearos/habitica/models/DisplayedError.kt | 2 +- .../models/{Result.kt => NetworkResult.kt} | 16 +- .../habitica/models/WearableHabitResponse.kt | 2 +- .../models/tasks/BulkTaskScoringData.kt | 10 +- .../wearos/habitica/models/tasks/Days.kt | 4 +- .../wearos/habitica/models/tasks/Task.kt | 9 +- .../wearos/habitica/models/tasks/TaskList.kt | 2 +- .../wearos/habitica/models/user/Buffs.kt | 4 +- .../wearos/habitica/models/user/Flags.kt | 4 +- .../wearos/habitica/models/user/Gear.kt | 4 +- .../wearos/habitica/models/user/Hair.kt | 4 +- .../wearos/habitica/models/user/Items.kt | 4 +- .../wearos/habitica/models/user/MenuItem.kt | 2 +- .../wearos/habitica/models/user/Outfit.kt | 4 +- .../habitica/models/user/Preferences.kt | 4 +- .../wearos/habitica/models/user/Profile.kt | 2 +- .../wearos/habitica/models/user/Stats.kt | 4 +- .../wearos/habitica/models/user/User.kt | 6 +- .../wearos/habitica/modules/AppModule.kt | 2 +- .../habitica/ui/activities/AvatarActivity.kt | 4 +- .../habitica/ui/activities/BaseActivity.kt | 14 +- .../ui/activities/ConfirmationActivity.kt | 4 +- .../ui/activities/ContinuePhoneActivity.kt | 2 +- .../habitica/ui/activities/FaintActivity.kt | 14 +- .../ui/activities/HabitDirectionActivity.kt | 6 +- .../habitica/ui/activities/InputActivity.kt | 4 +- .../habitica/ui/activities/LevelupActivity.kt | 14 +- .../habitica/ui/activities/LoginActivity.kt | 79 ++++---- .../habitica/ui/activities/MainActivity.kt | 5 +- .../habitica/ui/activities/RYAActivity.kt | 5 +- .../ui/activities/SettingsActivity.kt | 10 +- .../habitica/ui/activities/SplashActivity.kt | 4 +- .../habitica/ui/activities/StatsActivity.kt | 3 - .../ui/activities/TaskDetailActivity.kt | 5 +- .../ui/activities/TaskFormActivity.kt | 38 ++-- .../ui/activities/TaskListActivity.kt | 24 ++- .../ui/activities/TaskResultActivity.kt | 36 ++-- .../habitica/ui/adapters/BaseAdapter.kt | 22 +-- .../habitica/ui/adapters/DailyListAdapter.kt | 6 +- .../habitica/ui/adapters/HabitListAdapter.kt | 6 +- .../wearos/habitica/ui/adapters/HubAdapter.kt | 3 +- .../habitica/ui/adapters/RewardListAdapter.kt | 6 +- .../habitica/ui/adapters/SettingsAdapter.kt | 2 +- .../habitica/ui/adapters/TaskListAdapter.kt | 8 +- .../habitica/ui/adapters/ToDoListAdapter.kt | 6 +- .../ui/viewHolders/BindableViewHolder.kt | 2 +- .../ui/viewHolders/DisconnectedViewHolder.kt | 2 +- .../ui/viewHolders/FooterViewHolder.kt | 4 +- .../ui/viewHolders/HeaderViewHolder.kt | 4 +- .../habitica/ui/viewHolders/HubViewHolder.kt | 4 +- .../ui/viewHolders/SpacerViewHolder.kt | 4 +- .../tasks/CheckedTaskViewHolder.kt | 2 +- .../ui/viewHolders/tasks/DailyViewHolder.kt | 2 +- .../ui/viewHolders/tasks/HabitViewHolder.kt | 2 +- .../ui/viewHolders/tasks/RewardViewHolder.kt | 2 +- .../ui/viewHolders/tasks/TaskViewHolder.kt | 2 +- .../ui/viewHolders/tasks/ToDoViewHolder.kt | 2 +- .../habitica/ui/viewmodels/AvatarViewModel.kt | 5 +- .../habitica/ui/viewmodels/BaseViewModel.kt | 4 +- .../habitica/ui/viewmodels/FaintViewModel.kt | 6 +- .../ui/viewmodels/HabitDirectionViewModel.kt | 3 +- .../habitica/ui/viewmodels/LoginViewModel.kt | 6 +- .../habitica/ui/viewmodels/MainViewModel.kt | 5 +- .../habitica/ui/viewmodels/RYAViewModel.kt | 5 +- .../ui/viewmodels/SettingsViewModel.kt | 5 +- .../habitica/ui/viewmodels/SplashViewModel.kt | 20 +- .../habitica/ui/viewmodels/StatsViewModel.kt | 13 +- .../ui/viewmodels/TaskDetailViewModel.kt | 3 +- .../ui/viewmodels/TaskFormViewModel.kt | 5 +- .../ui/viewmodels/TaskListViewModel.kt | 26 +-- .../ui/viewmodels/TaskResultViewModel.kt | 7 +- .../wearos/habitica/ui/views/AddTaskButton.kt | 7 +- .../habitica/ui/views/CircularProgressView.kt | 12 +- .../ui/views/ConnectedActionChipView.kt | 2 +- .../ui/views/HabitDirectionPickerButton.kt | 5 +- .../habitica/ui/views/HabiticaRecyclerView.kt | 11 +- .../habitica/ui/views/HabiticaScrollView.kt | 7 +- .../ui/views/IndeterminateProgressView.kt | 6 +- .../wearos/habitica/ui/views/StatValueView.kt | 3 +- .../habitica/ui/views/TaskRewardChip.kt | 34 ++-- .../wearos/habitica/ui/views/TaskTextView.kt | 13 +- .../habitica/ui/views/TextActionChipView.kt | 2 +- .../wearos/habitica/util/DateJSONAdapter.kt | 2 +- ...nhandler.kt => ExceptionHandlerBuilder.kt} | 2 +- .../util/HabiticaScrollingLayoutCallback.kt | 2 +- .../habitica/util/ScrollAwayBehavior.kt | 17 +- 329 files changed, 1782 insertions(+), 1622 deletions(-) delete mode 100644 common/src/androidTest/java/com/habitrpg/common/habitica/ExampleInstrumentedTest.kt delete mode 100644 common/src/test/java/com/habitrpg/common/habitica/ExampleUnitTest.kt rename wearos/src/main/java/com/habitrpg/wearos/habitica/models/{Result.kt => NetworkResult.kt} (77%) rename wearos/src/main/java/com/habitrpg/wearos/habitica/util/{HabiticaCoroutineExceptionhandler.kt => ExceptionHandlerBuilder.kt} (99%) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f7ec0a105..21caada18 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -87,7 +87,7 @@ jobs: - name: Run with Gradle uses: gradle/gradle-build-action@v2 with: - arguments: ktlint + arguments: ktlintCheck detekt: runs-on: ubuntu-latest diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 5766f8990..723a78bd0 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -21,10 +21,6 @@ repositories { maven { url "https://jitpack.io" } } -configurations { - ktlint -} - dependencies { implementation fileTree(include: ['*.jar'], dir: '../common/libs') //Networking @@ -42,15 +38,15 @@ dependencies { compileOnly 'javax.annotation:javax.annotation-api:1.3.2' //App Compatibility and Material Design implementation "androidx.appcompat:appcompat:$appcompat_version" - implementation 'com.google.android.material:material:1.7.0' + implementation 'com.google.android.material:material:1.8.0' implementation "androidx.recyclerview:recyclerview:$recyclerview_version" implementation "androidx.preference:preference-ktx:$preferences_version" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" //Desugaring - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.2' - implementation('com.jaredrummler:android-device-names:2.1.0') + implementation('com.jaredrummler:android-device-names:2.1.1') // IAP Handling / Verification implementation "com.android.billingclient:billing-ktx:5.1.0" @@ -62,38 +58,38 @@ dependencies { implementation "com.amplitude:analytics-android:$amplitude_version" //Tests - testImplementation 'io.kotest:kotest-runner-junit5:5.3.0' + testImplementation 'io.kotest:kotest-runner-junit5:5.5.5' testImplementation 'androidx.test:core:1.5.0' - testImplementation 'io.mockk:mockk:1.13.3' - testImplementation 'io.mockk:mockk-android:1.13.3' - testImplementation 'io.kotest:kotest-assertions-core:5.3.0' - testImplementation 'io.kotest:kotest-framework-datatest:5.3.0' - androidTestImplementation ('com.kaspersky.android-components:kaspresso:1.4.1') { + testImplementation 'io.mockk:mockk:1.13.4' + testImplementation 'io.mockk:mockk-android:1.13.4' + testImplementation 'io.kotest:kotest-assertions-core:5.5.5' + testImplementation 'io.kotest:kotest-framework-datatest:5.5.5' + androidTestImplementation ('com.kaspersky.android-components:kaspresso:1.5.1') { exclude module: "protobuf-lite" } - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' - androidTestImplementation 'androidx.test:runner:1.5.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + androidTestImplementation 'androidx.test:runner:1.5.2' androidTestImplementation 'androidx.test:rules:1.5.0' debugImplementation 'androidx.fragment:fragment-testing:1.5.5' - androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test:core-ktx:1.5.0' - androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.4' - androidTestImplementation 'io.mockk:mockk-android:1.13.3' - androidTestImplementation 'io.kotest:kotest-assertions-core:5.3.0' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.5' + androidTestImplementation 'io.mockk:mockk-android:1.13.4' + androidTestImplementation 'io.kotest:kotest-assertions-core:5.5.5' androidTestUtil("androidx.test:orchestrator:1.4.2") implementation 'com.facebook.shimmer:shimmer:0.5.0' //Leak Detection - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10' //Push Notifications implementation platform("com.google.firebase:firebase-bom:$firebase_bom") + implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-crashlytics-ktx' - implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-messaging-ktx' implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-perf-ktx' - implementation 'com.google.android.gms:play-services-ads:21.4.0' + implementation 'com.google.android.gms:play-services-ads:21.5.0' implementation "com.google.android.gms:play-services-auth:$play_auth_version" implementation 'com.google.android.flexbox:flexbox:3.0.0' implementation "com.google.android.gms:play-services-wearable:$play_wearables_version" @@ -114,7 +110,7 @@ dependencies { implementation 'androidx.activity:activity-compose:1.6.1' implementation "androidx.compose.runtime:runtime-livedata:$compose_version" - implementation "androidx.compose.material:material:$compose_version" + implementation "androidx.compose.material:material:1.3.1" implementation "androidx.compose.animation:animation:$compose_version" implementation "androidx.compose.ui:ui-tooling:$compose_version" implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" @@ -124,18 +120,12 @@ dependencies { implementation project(':common') implementation project(':shared') - ktlint('com.pinterest:ktlint:0.45.2') { - attributes { - attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL)) - } - } - androidTestImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } android { compileSdkVersion target_sdk - buildToolsVersion '30.0.3' + buildToolsVersion '33.0.2' testOptions { unitTests { includeAndroidResources = true @@ -169,7 +159,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = "1.4.0-alpha02" + kotlinCompilerExtensionVersion = "1.4.2" } signingConfigs { @@ -387,24 +377,4 @@ gradle.projectsEvaluated { } } -apply plugin: 'com.google.gms.google-services' - -task ktlint(type: JavaExec, group: "verification") { - description = "Check Kotlin code style." - classpath = configurations.ktlint - mainClass.set("com.pinterest.ktlint.Main") - args "--disabled_rules=max-line-length", "--android", "--reporter=plain?group_by_file", "src/**/*.kt" - // to generate report in checkstyle format prepend following args: - // "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml" - // to add a baseline to check against prepend following args: - // "--baseline=ktlint-baseline.xml" - // see https://github.com/pinterest/ktlint#usage for more -} -check.dependsOn ktlint - -task ktlintFormat(type: JavaExec, group: "formatting") { - description = "Fix Kotlin code style deviations." - classpath = configurations.ktlint - mainClass.set("com.pinterest.ktlint.Main") - args "--disabled_rules=max-lint-length", "--android", "-F", "src/**/*.kt" -} +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt index 8abb38a6c..9b01fd857 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivityTest.kt @@ -11,8 +11,8 @@ import androidx.test.filters.LargeTest import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent -import com.habitrpg.shared.habitica.models.tasks.Frequency import com.habitrpg.android.habitica.models.tasks.Task +import com.habitrpg.shared.habitica.models.tasks.Frequency import com.habitrpg.shared.habitica.models.tasks.TaskType import io.github.kakaocup.kakao.common.assertions.BaseAssertions import io.github.kakaocup.kakao.common.matchers.ChildCountMatcher @@ -31,12 +31,12 @@ import io.mockk.mockkObject import io.mockk.slot import io.mockk.verify import io.reactivex.rxjava3.core.Flowable -import java.util.Date -import java.util.UUID import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import java.util.Date +import java.util.UUID class TaskFormScreen : Screen() { val toolbar = KToolbar { withId(R.id.toolbar) } diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt index 7027d699b..e3a4091ae 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragmentTest.kt @@ -26,9 +26,9 @@ class NavigationDrawerScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionHeaderItem) - itemType(::MainItem) - }) + itemType(::SectionHeaderItem) + itemType(::MainItem) + }) } @LargeTest diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt index ca01795b6..8dd625cfa 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragmentTest.kt @@ -63,8 +63,8 @@ class ItemScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::ItemItem) - }) + itemType(::ItemItem) + }) } internal class ItemRecyclerFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt index 10689e9e1..95f8768b7 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailFragmentTest.kt @@ -21,7 +21,6 @@ import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject import io.mockk.spyk -import io.mockk.verify import kotlinx.coroutines.flow.flowOf import org.junit.Test @@ -29,9 +28,9 @@ class PetDetailScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionItem) - itemType(::PetItem) - }) + itemType(::SectionItem) + itemType(::PetItem) + }) } internal class PetDetailRecyclerFragmentTest : diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt index fcfbee05a..455e5466f 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragmentTest.kt @@ -33,9 +33,9 @@ class StableScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::SectionItem) - itemType(::PetItem) - }) + itemType(::SectionItem) + itemType(::PetItem) + }) } internal class StableRecyclerFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt index bff26317d..ce7701288 100644 --- a/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt +++ b/Habitica/src/androidTest/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragmentTest.kt @@ -7,8 +7,8 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.TaskList -import com.habitrpg.shared.habitica.models.tasks.TaskType import com.habitrpg.android.habitica.ui.fragments.FragmentTestCase +import com.habitrpg.shared.habitica.models.tasks.TaskType import io.github.kakaocup.kakao.common.views.KView import io.github.kakaocup.kakao.recycler.KRecyclerItem import io.github.kakaocup.kakao.recycler.KRecyclerView @@ -30,8 +30,8 @@ class TaskListScreen : Screen() { val recycler: KRecyclerView = KRecyclerView({ withId(R.id.recyclerView) }, itemTypeBuilder = { - itemType(::TaskItem) - }) + itemType(::TaskItem) + }) } internal class TaskRecyclerViewFragmentTest : FragmentTestCase(false) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt index a50b89eb3..e74b86c68 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt @@ -81,7 +81,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) - setupCoil() ExceptionHandler.init(analyticsManager) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt index a09102e2a..405803ccc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt @@ -461,5 +461,5 @@ interface ApiService { suspend fun getHallMember(@Path("memberID") memberID: String): HabitResponse @POST("tasks/{taskID}/needs-work/{userID}") - suspend fun markTaskNeedsWork(@Path("taskID") taskID: String, @Path("userID") userID: String): HabitResponse + suspend fun markTaskNeedsWork(@Path("taskID") taskID: String, @Path("userID") userID: String): HabitResponse } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/MaintenanceApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/MaintenanceApiService.kt index 25e6e5208..f0e77f1a4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/MaintenanceApiService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/MaintenanceApiService.kt @@ -9,4 +9,4 @@ interface MaintenanceApiService { @GET("deprecation-android.json") suspend fun getDepricationStatus(): MaintenanceResponse? -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt index fc6899a84..3b7a88aee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ContentRepository.kt @@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.ContentResult import com.habitrpg.android.habitica.models.WorldState import kotlinx.coroutines.flow.Flow -interface ContentRepository: BaseRepository { +interface ContentRepository : BaseRepository { suspend fun retrieveContent(forced: Boolean = false): ContentResult? suspend fun retrieveWorldState(forced: Boolean = false): WorldState? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.kt index b0d8a7676..b768f2623 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/TaskRepository.kt @@ -68,5 +68,4 @@ interface TaskRepository : BaseRepository { fun getTasksForChallenge(challengeID: String?): Flow> suspend fun bulkScoreTasks(data: List>): BulkTaskScoringData? suspend fun markTaskNeedsWork(task: Task, userID: String) - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index 318771e4d..f3cdc6de4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -74,7 +74,7 @@ class ApiClientImpl( private val analyticsManager: AnalyticsManager, private val notificationsManager: NotificationsManager, private val context: Context -): ApiClient { +) : ApiClient { private lateinit var retrofitAdapter: Retrofit @@ -325,7 +325,7 @@ class ApiClientImpl( override suspend fun getStatus(): Status? = process { apiService.getStatus() } override suspend fun getContent(language: String?): ContentResult? { - return process { apiService.getContent(language ?: this.languageCode) } + return process { apiService.getContent(language ?: this.languageCode) } } override suspend fun updateUser(updateDictionary: Map): User? { @@ -479,11 +479,11 @@ class ApiClientImpl( override suspend fun revive(): User? = process { apiService.revive() } - suspend override fun useSkill(skillName: String, targetType: String, targetId: String): SkillResponse? { + override suspend fun useSkill(skillName: String, targetType: String, targetId: String): SkillResponse? { return process { apiService.useSkill(skillName, targetType, targetId) } } - suspend override fun useSkill(skillName: String, targetType: String): SkillResponse? { + override suspend fun useSkill(skillName: String, targetType: String): SkillResponse? { return process { apiService.useSkill(skillName, targetType) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt index 8621aa273..bfc163f4b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.kt @@ -75,7 +75,7 @@ class ChallengeRepositoryImpl( return tasksOrder } - private suspend fun addChallengeTasks(challenge: Challenge, addedTaskList: List) { + private suspend fun addChallengeTasks(challenge: Challenge, addedTaskList: List) { when { addedTaskList.count() == 1 -> apiClient.createChallengeTask(challenge.id ?: "", addedTaskList[0]) addedTaskList.count() > 1 -> apiClient.createChallengeTasks(challenge.id ?: "", addedTaskList) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt index 712c970ae..d9a2165c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/InventoryRepositoryImpl.kt @@ -48,7 +48,7 @@ class InventoryRepositoryImpl( } override suspend fun retrieveInAppRewards(): List? { - val rewards = apiClient.retrieveInAppRewards() + val rewards = apiClient.retrieveInAppRewards() if (rewards != null) { localRepository.saveInAppRewards(rewards) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt index 86b2f523e..02c38806f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt @@ -306,17 +306,17 @@ class SocialRepositoryImpl( override suspend fun acceptQuest(user: User?, partyId: String): Void? { apiClient.acceptQuest(partyId) - user?.let { - localRepository.updateRSVPNeeded(it, false) - } + user?.let { + localRepository.updateRSVPNeeded(it, false) + } return null } override suspend fun rejectQuest(user: User?, partyId: String): Void? { apiClient.rejectQuest(partyId) - user?.let { - localRepository.updateRSVPNeeded(it, false) - } + user?.let { + localRepository.updateRSVPNeeded(it, false) + } return null } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt index 21735ef76..e8dcbb83b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt @@ -43,7 +43,6 @@ class UserRepositoryImpl( private var lastSync: Date? = null } - override fun getUser(): Flow = getUser(userID) override fun getUser(userID: String): Flow = localRepository.getUser(userID) @@ -126,7 +125,7 @@ class UserRepositoryImpl( val response = apiClient.useSkill(key, target ?: "", taskId) ?: return null val user = getLiveUser() ?: return response response.hpDiff = (response.user?.stats?.hp ?: 0.0) - (user.stats?.hp ?: 0.0) - response.expDiff =(response.user?.stats?.exp ?: 0.0) - (user.stats?.exp ?: 0.0) + response.expDiff = (response.user?.stats?.exp ?: 0.0) - (user.stats?.exp ?: 0.0) response.goldDiff = (response.user?.stats?.gp ?: 0.0) - (user.stats?.gp ?: 0.0) response.damage = (response.user?.party?.quest?.progress?.up ?: 0.0f) - (user.party?.quest?.progress?.up ?: 0.0f) response.user?.let { mergeUser(user, it) } @@ -137,7 +136,7 @@ class UserRepositoryImpl( val response = apiClient.useSkill(key, target ?: "") ?: return null val user = getLiveUser() ?: return response response.hpDiff = (response.user?.stats?.hp ?: 0.0) - (user.stats?.hp ?: 0.0) - response.expDiff =(response.user?.stats?.exp ?: 0.0) - (user.stats?.exp ?: 0.0) + response.expDiff = (response.user?.stats?.exp ?: 0.0) - (user.stats?.exp ?: 0.0) response.goldDiff = (response.user?.stats?.gp ?: 0.0) - (user.stats?.gp ?: 0.0) response.damage = (response.user?.party?.quest?.progress?.up ?: 0.0f) - (user.party?.quest?.progress?.up ?: 0.0f) response.user?.let { mergeUser(user, it) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt index 77cecd4d6..6e5b7230e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/InventoryLocalRepository.kt @@ -65,5 +65,4 @@ interface InventoryLocalRepository : ContentLocalRepository { fun getLiveObject(obj: OwnedItem): OwnedItem? fun getItems(itemClass: Class): Flow> fun getItems(itemClass: Class, keys: Array): Flow> - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt index 705aac13d..94f8030b2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmBaseLocalRepository.kt @@ -48,7 +48,7 @@ abstract class RealmBaseLocalRepository internal constructor(override var realm: private var pendingSaves = mutableListOf() } - private fun copy(realm: Realm, obj: T) { + private fun copy(realm: Realm, obj: T) { try { realm.insertOrUpdate(obj) } catch (_: java.lang.IllegalArgumentException) { @@ -119,9 +119,9 @@ abstract class RealmBaseLocalRepository internal constructor(override var realm: fun queryUser(userID: String): Flow { return realm.where(User::class.java) - .equalTo("id", userID) - .findAll() - .toFlow() + .equalTo("id", userID) + .findAll() + .toFlow() .filter { it.isLoaded && it.isValid && !it.isEmpty() } .map { it.firstOrNull() } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.kt index 393ab5d4b..a0a876f59 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmChallengeLocalRepository.kt @@ -18,61 +18,61 @@ import kotlinx.coroutines.flow.map class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository { override fun isChallengeMember(userID: String, challengeID: String): Flow = realm.where(ChallengeMembership::class.java) - .equalTo("userID", userID) - .equalTo("challengeID", challengeID) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userID", userID) + .equalTo("challengeID", challengeID) + .findAll() + .toFlow() + .filter { it.isLoaded } .map { it.count() > 0 } override fun getChallengeMembership(userId: String, id: String) = realm.where(ChallengeMembership::class.java) - .equalTo("userID", userId) - .equalTo("challengeID", id) - .findAll() - .toFlow() - .filter { it.isLoaded } - .map { it.first() } + .equalTo("userID", userId) + .equalTo("challengeID", id) + .findAll() + .toFlow() + .filter { it.isLoaded } + .map { it.first() } .filterNotNull() override fun getChallengeMemberships(userId: String) = realm.where(ChallengeMembership::class.java) - .equalTo("userID", userId) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userID", userId) + .findAll() + .toFlow() + .filter { it.isLoaded } override fun getChallenge(id: String): Flow { return realm.where(Challenge::class.java) - .equalTo("id", id) - .findAll() - .toFlow() - .filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() } - .map { it.first() } + .equalTo("id", id) + .findAll() + .toFlow() + .filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() } + .map { it.first() } .filterNotNull() } override fun getTasks(challengeID: String): Flow> { return realm.where(Task::class.java) - .equalTo("userId", challengeID) - .findAll() - .toFlow() - .filter { realmObject -> realmObject.isLoaded } + .equalTo("userId", challengeID) + .findAll() + .toFlow() + .filter { realmObject -> realmObject.isLoaded } } override val challenges: Flow> get() = realm.where(Challenge::class.java) - .isNotNull("name") - .sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .isNotNull("name") + .sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } @OptIn(ExperimentalCoroutinesApi::class) override fun getUserChallenges(userId: String): Flow> { return realm.where(ChallengeMembership::class.java) - .equalTo("userID", userId) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userID", userId) + .findAll() + .toFlow() + .filter { it.isLoaded } .flatMapLatest { it -> val ids = it.map { return@map it.challengeID diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt index 8a73c75b5..436e5c699 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt @@ -39,10 +39,10 @@ open class RealmContentLocalRepository(realm: Realm) : RealmBaseLocalRepository( override fun getWorldState(): Flow { return realm.where(WorldState::class.java) - .findAll() - .toFlow() - .filter { it.isLoaded && it.size > 0 } - .map { it.first() } + .findAll() + .toFlow() + .filter { it.isLoaded && it.size > 0 } + .map { it.first() } .filterNotNull() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.kt index f7e564370..c6110b991 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmCustomizationLocalRepository.kt @@ -30,9 +30,9 @@ class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalReposit .endGroup() } return query - .sort("customizationSet") - .findAll() - .toFlow() - .filter { it.isLoaded } + .sort("customizationSet") + .findAll() + .toFlow() + .filter { it.isLoaded } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.kt index 84be05ed2..30d4c8d8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmFAQLocalRepository.kt @@ -12,17 +12,17 @@ import kotlinx.coroutines.flow.map class RealmFAQLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), FAQLocalRepository { override fun getArticle(position: Int): Flow { return realm.where(FAQArticle::class.java) - .equalTo("position", position) - .findAll() - .toFlow() - .filter { it.isLoaded && it.count() > 0 } - .map { it.firstOrNull() } + .equalTo("position", position) + .findAll() + .toFlow() + .filter { it.isLoaded && it.count() > 0 } + .map { it.firstOrNull() } .filterNotNull() } override val articles: Flow> get() = realm.where(FAQArticle::class.java) - .findAll() - .toFlow() - .filter { it.isLoaded } + .findAll() + .toFlow() + .filter { it.isLoaded } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt index c3ebc3af8..f1cc2859d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt @@ -30,7 +30,8 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.Locale -class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), +class RealmInventoryLocalRepository(realm: Realm) : + RealmContentLocalRepository(realm), InventoryLocalRepository { override fun getQuestContent(keys: List): Flow> { return realm.where(QuestContent::class.java) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt index deb7b183d..2dedb7359 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.kt @@ -21,18 +21,18 @@ import kotlinx.coroutines.flow.map class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository { override fun getGroupMembership(userId: String, id: String) = realm.where(GroupMembership::class.java) - .equalTo("userID", userId) - .equalTo("groupID", id) - .findAll() - .toFlow() - .filter { it.isLoaded && it.isNotEmpty() } - .map { it.first() } + .equalTo("userID", userId) + .equalTo("groupID", id) + .findAll() + .toFlow() + .filter { it.isLoaded && it.isNotEmpty() } + .map { it.first() } override fun getGroupMemberships(userId: String): Flow> = realm.where(GroupMembership::class.java) - .equalTo("userID", userId) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userID", userId) + .findAll() + .toFlow() + .filter { it.isLoaded } override fun updateMembership(userId: String, id: String, isMember: Boolean) { if (isMember) { @@ -129,19 +129,19 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) } override fun getPublicGuilds() = realm.where(Group::class.java) - .equalTo("type", "guild") - .equalTo("privacy", "public") - .notEqualTo("id", Group.TAVERN_ID) - .sort("memberCount", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("type", "guild") + .equalTo("privacy", "public") + .notEqualTo("id", Group.TAVERN_ID) + .sort("memberCount", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } @OptIn(ExperimentalCoroutinesApi::class) override fun getUserGroups(userID: String, type: String?) = realm.where(GroupMembership::class.java) - .equalTo("userID", userID) - .findAll() - .toFlow() + .equalTo("userID", userID) + .findAll() + .toFlow() .filter { it.isLoaded } .flatMapLatest { memberships -> realm.where(Group::class.java) @@ -160,10 +160,10 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) override fun getGroups(type: String): Flow> { return realm.where(Group::class.java) - .equalTo("type", type) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("type", type) + .findAll() + .toFlow() + .filter { it.isLoaded } } override fun getGroup(id: String): Flow { @@ -177,11 +177,11 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) override fun getGroupChat(groupId: String): Flow> { return realm.where(ChatMessage::class.java) - .equalTo("groupId", groupId) - .sort("timestamp", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("groupId", groupId) + .sort("timestamp", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } } override fun deleteMessage(id: String) { @@ -190,9 +190,9 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) } override fun getPartyMembers(partyId: String) = realm.where(Member::class.java) - .equalTo("party.id", partyId) - .findAll() - .toFlow() + .equalTo("party.id", partyId) + .findAll() + .toFlow() override fun getGroupMembers(groupID: String) = realm.where(GroupMembership::class.java) .equalTo("groupID", groupID) @@ -291,18 +291,18 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm) } override fun getInboxMessages(userId: String, replyToUserID: String?) = realm.where(ChatMessage::class.java) - .equalTo("isInboxMessage", true) - .equalTo("uuid", replyToUserID) - .equalTo("userID", userId) - .sort("timestamp", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("isInboxMessage", true) + .equalTo("uuid", replyToUserID) + .equalTo("userID", userId) + .sort("timestamp", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } override fun getInboxConversation(userId: String) = realm.where(InboxConversation::class.java) - .equalTo("userID", userId) - .sort("timestamp", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userID", userId) + .sort("timestamp", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt index 587597adb..677b48a3a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTaskLocalRepository.kt @@ -56,10 +56,10 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getTasks(userId: String): Flow> { if (realm.isClosed) return emptyFlow() return realm.where(Task::class.java).equalTo("userId", userId) - .sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING) - .findAll() - .toFlow() - .filter { it.isLoaded } + .sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING) + .findAll() + .toFlow() + .filter { it.isLoaded } } override fun saveTasks(ownerID: String, tasksOrder: TasksOrder, tasks: TaskList) { @@ -218,10 +218,10 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getTaskAtPosition(taskType: String, position: Int): Flow { return realm.where(Task::class.java).equalTo("typeValue", taskType).equalTo("position", position) - .findAll() - .toFlow() - .filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() } - .map { it.first() } + .findAll() + .toFlow() + .filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() } + .map { it.first() } .filterNotNull() } @@ -244,12 +244,12 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getErroredTasks(userID: String): Flow> { return realm.where(Task::class.java) - .equalTo("userId", userID) - .equalTo("hasErrored", true) - .sort("position") - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("userId", userID) + .equalTo("hasErrored", true) + .sort("position") + .findAll() + .toFlow() + .filter { it.isLoaded } } override fun getUser(userID: String): Flow { @@ -264,10 +264,10 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getTasksForChallenge(challengeID: String?, userID: String?): Flow> { return realm.where(Task::class.java) - .equalTo("challengeID", challengeID) - .equalTo("userId", userID) - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("challengeID", challengeID) + .equalTo("userId", userID) + .findAll() + .toFlow() + .filter { it.isLoaded } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTutorialLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTutorialLocalRepository.kt index 0e7c81185..a1ab82ab7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTutorialLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmTutorialLocalRepository.kt @@ -15,19 +15,19 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real override fun getTutorialStep(key: String): Flow { if (realm.isClosed) return emptyFlow() return realm.where(TutorialStep::class.java).equalTo("identifier", key) - .findAll() - .toFlow() - .filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() } - .map { steps -> steps.first() } + .findAll() + .toFlow() + .filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() } + .map { steps -> steps.first() } .filterNotNull() } override fun getTutorialSteps(keys: List): Flow> { if (realm.isClosed) return emptyFlow() return realm.where(TutorialStep::class.java) - .`in`("identifier", keys.toTypedArray()) - .findAll() - .toFlow() - .filter { it.isLoaded } + .`in`("identifier", keys.toTypedArray()) + .findAll() + .toFlow() + .filter { it.isLoaded } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt index 7a783fbbc..0dd9ad6f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt @@ -21,7 +21,8 @@ import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map -class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), +class RealmUserLocalRepository(realm: Realm) : + RealmBaseLocalRepository(realm), UserLocalRepository { @OptIn(ExperimentalCoroutinesApi::class) override fun getUserQuestStatus(userID: String): Flow { @@ -30,13 +31,13 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), .map { it.party?.id ?: "" } .filter { it.isNotBlank() } .flatMapLatest { - realm.where(Group::class.java) - .equalTo("id", it) - .findAll() - .toFlow() - .filter { groups -> groups.size > 0 } - .map { it.firstOrNull() } - .filterNotNull() + realm.where(Group::class.java) + .equalTo("id", it) + .findAll() + .toFlow() + .filter { groups -> groups.size > 0 } + .map { it.firstOrNull() } + .filterNotNull() } .map { when { @@ -127,22 +128,22 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), override fun getTeamPlan(teamID: String): Flow { if (realm.isClosed) return emptyFlow() return realm.where(Group::class.java) - .equalTo("id", teamID) - .findAll() - .toFlow() - .filter { realmObject -> realmObject.isLoaded && realmObject.isValid } - .map { teams -> teams.firstOrNull() } + .equalTo("id", teamID) + .findAll() + .toFlow() + .filter { realmObject -> realmObject.isLoaded && realmObject.isValid } + .map { teams -> teams.firstOrNull() } } override fun getSkills(user: User): Flow> { val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass return realm.where(Skill::class.java) - .equalTo("habitClass", habitClass) - .sort("lvl") - .findAll() - .toFlow() - .filter { it.isLoaded } + .equalTo("habitClass", habitClass) + .sort("lvl") + .findAll() + .toFlow() + .filter { it.isLoaded } } override fun getSpecialItems(user: User): Flow> { @@ -154,9 +155,9 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), } } return realm.where(Skill::class.java) - .`in`("key", ownedItems.toTypedArray()) - .findAll() - .toFlow() - .filter { it.isLoaded } + .`in`("key", ownedItems.toTypedArray()) + .findAll() + .toFlow() + .filter { it.isLoaded } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt index 0cfa9fb2b..281284427 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt @@ -16,7 +16,7 @@ import com.habitrpg.common.habitica.helpers.AppTestingLevel import kotlinx.coroutines.MainScope import java.util.Date -class AppConfigManager(contentRepository: ContentRepository?): com.habitrpg.common.habitica.helpers.AppConfigManager() { +class AppConfigManager(contentRepository: ContentRepository?) : com.habitrpg.common.habitica.helpers.AppConfigManager() { private var worldState: WorldState? = null @@ -24,8 +24,8 @@ class AppConfigManager(contentRepository: ContentRepository?): com.habitrpg.comm try { MainScope().launchCatching { contentRepository?.getWorldState()?.collect { - worldState = it - } + worldState = it + } } } catch (_: java.lang.IllegalStateException) { // pass diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/ExceptionHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/ExceptionHandler.kt index 4692a0495..2a3b0c0a2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/ExceptionHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/ExceptionHandler.kt @@ -7,13 +7,8 @@ import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import okhttp3.internal.http2.ConnectionShutdownException -import okhttp3.internal.http2.StreamResetException import retrofit2.HttpException -import java.io.EOFException import java.io.IOException -import java.net.SocketTimeoutException -import java.net.UnknownHostException class ExceptionHandler { private var analyticsManager: AnalyticsManager? = null @@ -52,7 +47,12 @@ class ExceptionHandler { } fun CoroutineScope.launchCatching(errorHandler: ((Throwable) -> Unit)? = null, function: suspend CoroutineScope.() -> Unit) { - launch((ExceptionHandler.coroutine { - errorHandler?.invoke(it) - }), block = function) -} \ No newline at end of file + launch( + ( + ExceptionHandler.coroutine { + errorHandler?.invoke(it) + } + ), + block = function + ) +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt index e5ccbfe96..8f5429c5a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt @@ -20,7 +20,7 @@ object MainNavigationController { get() { return controllerReference?.get() } val isReady: Boolean - get() = controllerReference?.get() != null + get() = controllerReference?.get() != null fun setup(navController: NavController) { this.controllerReference = WeakReference(navController) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt index cfbcb6c4b..2cd1f0186 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt @@ -24,31 +24,31 @@ interface NotificationsManager { fun dismissTaskNotification(context: Context, task: Task) } -class MainNotificationsManager: NotificationsManager { +class MainNotificationsManager : NotificationsManager { private val seenNotifications: MutableMap override var apiClient: WeakReference? = null private var lastNotificationHandling: Date? = null - val _notifications = MutableStateFlow?>(null) - val _displaynotificationEvents = Channel() - override val displayNotificationEvents: Flow = _displaynotificationEvents.receiveAsFlow().filterNotNull() + private val notificationsFlow = MutableStateFlow?>(null) + private val displayedNotificationEvents = Channel() + override val displayNotificationEvents: Flow = displayedNotificationEvents.receiveAsFlow().filterNotNull() init { this.seenNotifications = HashMap() } override fun setNotifications(current: List) { - _notifications.value = current + notificationsFlow.value = current this.handlePopupNotifications(current) } override fun getNotifications(): Flow> { - return _notifications.filterNotNull() + return notificationsFlow.filterNotNull() } override fun getNotification(id: String): Notification? { - return _notifications.value?.find { it.id == id } + return notificationsFlow.value?.find { it.id == id } } override fun dismissTaskNotification(context: Context, task: Task) { @@ -92,7 +92,6 @@ class MainNotificationsManager: NotificationsManager { Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> true Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> true Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> true - Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> true Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> true Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> true Notification.Type.ACHIEVEMENT_SEEING_RED.type -> true @@ -115,7 +114,7 @@ class MainNotificationsManager: NotificationsManager { private fun readNotification(notification: Notification) { MainScope().launchCatching { - _displaynotificationEvents.send(notification) + displayedNotificationEvents.send(notification) seenNotifications[notification.id] = true apiClient?.get()?.readNotification(notification.id) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt index 5d7859d07..4b9428fe7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt @@ -121,9 +121,9 @@ class PurchaseHandler( } fun startListening() { - if (billingClient.connectionState == BillingClient.ConnectionState.CONNECTING - || billingClient.connectionState == BillingClient.ConnectionState.CONNECTED - || billingClientState == BillingClientState.UNAVAILABLE + if (billingClient.connectionState == BillingClient.ConnectionState.CONNECTING || + billingClient.connectionState == BillingClient.ConnectionState.CONNECTED || + billingClientState == BillingClientState.UNAVAILABLE ) { // Don't connect again if it's already connected return @@ -209,9 +209,11 @@ class PurchaseHandler( } billingClientState.canMaybePurchase && billingClient.isReady } - val params = QueryProductDetailsParams.newBuilder().setProductList(skus.map { - Product.newBuilder().setProductId(it).setProductType(type).build() - }).build() + val params = QueryProductDetailsParams.newBuilder().setProductList( + skus.map { + Product.newBuilder().setProductId(it).setProductType(type).build() + } + ).build() val skuDetailsResult = withContext(Dispatchers.IO) { billingClient.queryProductDetails(params) } @@ -230,12 +232,14 @@ class PurchaseHandler( addGift(skuDetails.productId, it, recipientUsername ?: it) } val flowParams = - BillingFlowParams.newBuilder().setProductDetailsParamsList(listOf(skuDetails).map { - BillingFlowParams.ProductDetailsParams.newBuilder() - .setProductDetails(skuDetails).setOfferToken( - skuDetails.subscriptionOfferDetails?.first()?.offerToken ?: "" - ).build() - }).build() + BillingFlowParams.newBuilder().setProductDetailsParamsList( + listOf(skuDetails).map { + BillingFlowParams.ProductDetailsParams.newBuilder() + .setProductDetails(skuDetails).setOfferToken( + skuDetails.subscriptionOfferDetails?.first()?.offerToken ?: "" + ).build() + } + ).build() billingClient.launchBillingFlow(activity, flowParams) } @@ -555,9 +559,11 @@ class PurchaseHandler( } suspend fun retryUntil( - times: Int = Int.MAX_VALUE, initialDelay: Long = 100, // 0.1 second + times: Int = Int.MAX_VALUE, + initialDelay: Long = 100, // 0.1 second maxDelay: Long = 1000, // 1 second - factor: Double = 2.0, block: suspend () -> Boolean + factor: Double = 2.0, + block: suspend () -> Boolean ) { var currentDelay = initialDelay repeat(times - 1) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseTypes.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseTypes.kt index 1977fc29f..b4326692c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseTypes.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseTypes.kt @@ -27,4 +27,4 @@ object PurchaseTypes { Subscription6MonthNoRenew, Subscription12MonthNoRenew ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.kt index 0e61f48af..db5f9020c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.kt @@ -27,39 +27,39 @@ class SoundFileLoader(private val context: Context) { @SuppressLint("SetWorldReadable", "ReturnCount") suspend fun download(files: List): List { return files.map { audioFile -> - withContext(Dispatchers.IO) { - val file = File(getFullAudioFilePath(audioFile)) - if (file.exists() && file.length() > 5000) { - // Important, or else the MediaPlayer can't access this file - file.setReadable(true, false) - audioFile.file = file - return@withContext audioFile - } - val request = Request.Builder().url(audioFile.webUrl).build() - - val response: Response - try { - response = client.newCall(request).execute() - if (!response.isSuccessful) { - throw IOException() - } - } catch (io: IOException) { - return@withContext audioFile - } - - try { - val sink = file.sink().buffer() - sink.writeAll(response.body!!.source()) - sink.flush() - sink.close() - } catch (io: IOException) { - return@withContext audioFile - } - + withContext(Dispatchers.IO) { + val file = File(getFullAudioFilePath(audioFile)) + if (file.exists() && file.length() > 5000) { + // Important, or else the MediaPlayer can't access this file file.setReadable(true, false) audioFile.file = file return@withContext audioFile } + val request = Request.Builder().url(audioFile.webUrl).build() + + val response: Response + try { + response = client.newCall(request).execute() + if (!response.isSuccessful) { + throw IOException() + } + } catch (io: IOException) { + return@withContext audioFile + } + + try { + val sink = file.sink().buffer() + sink.writeAll(response.body!!.source()) + sink.flush() + sink.close() + } catch (io: IOException) { + return@withContext audioFile + } + + file.setReadable(true, false) + audioFile.file = file + return@withContext audioFile + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt index 800247810..87d6f97b6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt @@ -99,9 +99,9 @@ class TaskAlarmManager( private fun setAlarmForRemindersItem(reminderItemTask: Task, remindersItem: RemindersItem?) { val now = ZonedDateTime.now().withZoneSameLocal(ZoneId.systemDefault())?.toInstant() val zonedTime = remindersItem?.getLocalZonedDateTimeInstant() - if (remindersItem == null - || (reminderItemTask.type == TaskType.DAILY && zonedTime?.isBefore(now) == true && reminderItemTask.nextDue?.firstOrNull() != null) - || (reminderItemTask.type == TaskType.TODO && zonedTime?.isBefore(now) == true) + if (remindersItem == null || + (reminderItemTask.type == TaskType.DAILY && zonedTime?.isBefore(now) == true && reminderItemTask.nextDue?.firstOrNull() != null) || + (reminderItemTask.type == TaskType.TODO && zonedTime?.isBefore(now) == true) ) { return } @@ -226,7 +226,7 @@ class TaskAlarmManager( try { alarmManager?.setAlarmClock(AlarmClockInfo(time, pendingIntent), pendingIntent) } catch (ex: Exception) { - when(ex) { + when (ex) { is IllegalStateException, is SecurityException -> { alarmManager?.setWindow(AlarmManager.RTC_WAKEUP, time, 60000, pendingIntent) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt index b7bde3586..6f2a4e561 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskDescriptionBuilder.kt @@ -94,11 +94,13 @@ class TaskDescriptionBuilder(private val context: Context) { "" } } - Frequency.YEARLY -> " " + context.getString(R.string.on_x, + Frequency.YEARLY -> " " + context.getString( + R.string.on_x, task.startDate?.let { val flags = DateUtils.FORMAT_SHOW_DATE + DateUtils.FORMAT_NO_YEAR DateUtils.formatDateTime(context, it.time, flags) - } ?: "") + } ?: "" + ) else -> "" } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt index 93709ac1d..75dc272a8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt @@ -24,7 +24,7 @@ class HabiticaFirebaseMessagingService : FirebaseMessagingService() { if (remoteMessage.data["identifier"]?.contains(PushNotificationManager.WON_CHALLENGE_PUSH_NOTIFICATION_KEY) == true) { // if (this::userRepository.isInitialized) { - // userRepository.retrieveUser(true).subscribe({}, RxErrorHandler.handleEmptyError()) + // userRepository.retrieveUser(true).subscribe({}, RxErrorHandler.handleEmptyError()) // } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt index d832806e6..b3997c0d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt @@ -59,7 +59,7 @@ class PushNotificationManager( addRefreshToken() } catch (_: IOException) { // catchy catch-catch - } catch (_: Exception){ + } catch (_: Exception) { // catchy catch-catch-cat, I'm out of breath. } } @@ -85,7 +85,7 @@ class PushNotificationManager( if (this.refreshedToken.isEmpty() || !userHasPushDevice()) { return } - apiClient.deletePushDevice(refreshedToken) + apiClient.deletePushDevice(refreshedToken) } private fun userHasPushDevice(): Boolean { @@ -133,7 +133,8 @@ class PushNotificationManager( val remoteMessageIdentifier = remoteMessage.data["identifier"] val notificationFactory = HabiticaLocalNotificationFactory() - val notification = notificationFactory.build(remoteMessageIdentifier, + val notification = notificationFactory.build( + remoteMessageIdentifier, context ) if (pushNotificationManager?.userIsSubscribedToNotificationType(remoteMessageIdentifier) != false) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index 57fc1d0d1..cd613438b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject class DisplayItemDropUseCase @Inject -constructor(private val soundManager: SoundManager): +constructor(private val soundManager: SoundManager) : UseCase() { override suspend fun run(requestValues: RequestValues) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HatchPetUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HatchPetUseCase.kt index 7b38dd5e4..6739c4ab2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HatchPetUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/HatchPetUseCase.kt @@ -20,7 +20,8 @@ import javax.inject.Inject class HatchPetUseCase @Inject constructor( - private val inventoryRepository: InventoryRepository) : UseCase() { + private val inventoryRepository: InventoryRepository +) : UseCase() { override suspend fun run(requestValues: RequestValues): Items? { return inventoryRepository.hatchPet(requestValues.egg, requestValues.potion) { val petWrapper = View.inflate(requestValues.context, R.layout.pet_imageview, null) as? FrameLayout diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/UseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/UseCase.kt index 0d5407580..19c76a6fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/UseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/UseCase.kt @@ -12,4 +12,4 @@ abstract class UseCase { } interface RequestValues -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt index 9f75c5b8d..8fc844f8f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/Member.kt @@ -52,10 +52,10 @@ open class Member : RealmObject(), Avatar, BaseMainObject, Assignable { } else this.profile?.name ?: "" override val identifiableName: String - get() = username ?: "" + get() = username ?: "" override val avatar: Avatar - get() = this + get() = this val petsFoundCount: Int get() = this.items?.pets?.size ?: 0 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt index effe17a3f..d3e5391df 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/members/MemberPreferences.kt @@ -6,7 +6,8 @@ import io.realm.RealmObject import io.realm.annotations.RealmClass @RealmClass(embedded = true) -open class MemberPreferences : RealmObject(), +open class MemberPreferences : + RealmObject(), AvatarPreferences { override var hair: Hair? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt index e1187b2ae..44028e1a0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt @@ -10,11 +10,11 @@ import com.habitrpg.android.habitica.databinding.FragmentGemPurchaseBinding import com.habitrpg.android.habitica.databinding.FragmentSubscriptionBinding import com.habitrpg.android.habitica.databinding.PurchaseGemViewBinding import com.habitrpg.android.habitica.extensions.DateUtils -import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView +import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import java.text.SimpleDateFormat import java.util.Date import java.util.Locale diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt index fb777e4c9..40f0dcb46 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt @@ -166,7 +166,7 @@ open class ShopItem : RealmObject(), BaseObject { item.notes = customization.notes item.value = customization.price ?: 0 item.path = customization.path - item.unlockPath = customization.unlockPath + item.unlockPath = customization.unlockPath item.pinType = customization.type if (customization.type == "background") { item.purchaseType = "background" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Group.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Group.kt index 594e454f1..b60d6127c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Group.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/social/Group.kt @@ -13,9 +13,9 @@ import io.realm.annotations.PrimaryKey open class Group : RealmObject(), BaseMainObject { val isGroupPlan: Boolean - get() { - return purchased?.isActive == true - } + get() { + return purchased?.isActive == true + } override val realmClass: Class get() = Group::class.java override val primaryIdentifier: String? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Days.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Days.kt index fec726466..ec95d041c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Days.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Days.kt @@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.R @io.realm.annotations.RealmClass(embedded = true) open class Days() : io.realm.RealmObject(), Parcelable { val isEveryDay: Boolean - get() = m && t && w && th && f && s && su + get() = m && t && w && th && f && s && su val isOnlyWeekdays: Boolean get() = m && t && w && th && f && !s && !su val isOnlyWeekends: Boolean @@ -66,4 +66,4 @@ open class Days() : io.realm.RealmObject(), Parcelable { return arrayOfNulls(size) } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt index f0a253698..eb205c3e7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt @@ -96,7 +96,6 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { .equals(ZonedDateTime.now().withZoneSameLocal(ZoneId.systemDefault()).toLocalDate()) } - // Needed for offline creating/updating var isSaving: Boolean = false var hasErrored: Boolean = false @@ -307,14 +306,14 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { val now = ZonedDateTime.now().withZoneSameLocal(ZoneId.systemDefault())?.toInstant() val nextDate = nextDue?.firstOrNull() - //If task !isDisplayedActive or if isDisplayedActive but reminder passed, - //set a updated reminder with nextDate + // If task !isDisplayedActive or if isDisplayedActive but reminder passed, + // set a updated reminder with nextDate return if (nextDate != null && (!isDisplayedActive || remindersItem.getLocalZonedDateTimeInstant()?.isBefore(now) == true)) { val nextDueCalendar = GregorianCalendar() nextDueCalendar.time = nextDate parse(oldTime) ?.withYear(nextDueCalendar.get(Calendar.YEAR)) - ?.withMonth(nextDueCalendar.get(Calendar.MONTH) + 1) //+1 to handle Gregorian Calendar month range from 0-11 + ?.withMonth(nextDueCalendar.get(Calendar.MONTH) + 1) // +1 to handle Gregorian Calendar month range from 0-11 ?.withDayOfMonth(nextDueCalendar.get(Calendar.DAY_OF_MONTH)) } else { return parse(oldTime) @@ -392,7 +391,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask { } fun isBeingEdited(task: Task): Boolean { - + when { text != task.text -> return true notes != task.notes -> return true diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt index 94d51a017..2646847df 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt @@ -8,7 +8,7 @@ import io.realm.annotations.RealmClass import java.util.Date @RealmClass(embedded = true) -open class GroupAssignedDetails: RealmObject(), BaseObject { +open class GroupAssignedDetails : RealmObject(), BaseObject { var assignedDate: Date? = null var assignedUsername: String? = null var assignedUserID: String? = null diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskList.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskList.kt index c7bbfaad4..128399796 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskList.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskList.kt @@ -2,4 +2,4 @@ package com.habitrpg.android.habitica.models.tasks class TaskList { var tasks: MutableMap = mutableMapOf() -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Permissions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Permissions.kt index c1d562c03..ef9bc0ef5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Permissions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/Permissions.kt @@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.models.user import com.habitrpg.android.habitica.models.BaseObject import io.realm.RealmObject -open class Permissions: RealmObject(), BaseObject { +open class Permissions : RealmObject(), BaseObject { var userSupport: Boolean = false var fullAccess: Boolean = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt index 366f59dfc..b96f63df1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt @@ -56,17 +56,17 @@ open class SubscriptionPlan : RealmObject(), BaseObject { */ val subMonthCount: Int - get() { - return when (planId) { - "basic_earned" -> 1 - "basic_3mo" -> 3 - "basic_6mo" -> 6 - "google_6mo" -> 6 - "basic_12mo" -> 12 - "group_plan_auto" -> 1 - else -> 0 + get() { + return when (planId) { + "basic_earned" -> 1 + "basic_3mo" -> 3 + "basic_6mo" -> 6 + "google_6mo" -> 6 + "basic_12mo" -> 12 + "group_plan_auto" -> 1 + else -> 0 + } } - } val monthsUntilNextHourglass: Int get() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserQuestStatus.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserQuestStatus.kt index c5e68b43b..7c4a000de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserQuestStatus.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserQuestStatus.kt @@ -5,4 +5,4 @@ enum class UserQuestStatus { QUEST_COLLECT, QUEST_BOSS, QUEST_UNKNOWN -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserTaskPreferences.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserTaskPreferences.kt index 0be0ed8c0..061a1eb0c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserTaskPreferences.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/UserTaskPreferences.kt @@ -6,7 +6,7 @@ import io.realm.RealmObject import io.realm.annotations.RealmClass @RealmClass(embedded = true) -open class UserTaskPreferences: RealmObject(), BaseObject { +open class UserTaskPreferences : RealmObject(), BaseObject { var confirmScoreNotes: Boolean = false var mirrorGroupTasks: RealmList = RealmList() var groupByChallenge: Boolean = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt index 24acf248f..e665812db 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserModule.kt @@ -47,4 +47,4 @@ class UserModule { companion object { const val NAMED_USER_ID = "userId" } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/DeviceCommunicationService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/DeviceCommunicationService.kt index 903acde31..91be85d4c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/DeviceCommunicationService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/DeviceCommunicationService.kt @@ -57,4 +57,4 @@ class DeviceCommunicationService : WearableListenerService() { "${hostConfig.userID}:${hostConfig.apiKey}".toByteArray() ) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AddTaskWidgetActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AddTaskWidgetActivity.kt index d6f150587..6ba60fa4d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AddTaskWidgetActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AddTaskWidgetActivity.kt @@ -8,8 +8,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.edit import androidx.preference.PreferenceManager import com.habitrpg.android.habitica.databinding.WidgetConfigureAddTaskBinding -import com.habitrpg.shared.habitica.models.tasks.TaskType import com.habitrpg.android.habitica.widget.AddTaskWidgetProvider +import com.habitrpg.shared.habitica.models.tasks.TaskType class AddTaskWidgetActivity : AppCompatActivity() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt index 9ea15a994..3b336f695 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt @@ -214,7 +214,7 @@ class ArmoireActivity : BaseActivity() { } else -> { @SuppressLint("SetTextI18n") - binding.titleView.text = "+${value} ${binding.titleView.text}" + binding.titleView.text = "+$value ${binding.titleView.text}" binding.subtitleView.text = getString(R.string.armoireExp) binding.iconView.setImageResource(R.drawable.armoire_experience) val layoutParams = RelativeLayout.LayoutParams(108.dpToPx(this), 122.dpToPx(this)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index 1a7fc34c9..0bae9ffa2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -4,10 +4,8 @@ import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.content.res.Configuration -import android.content.res.Resources import android.graphics.Bitmap import android.net.Uri -import android.os.Build import android.os.Bundle import android.provider.MediaStore import android.view.LayoutInflater @@ -40,7 +38,6 @@ import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import com.habitrpg.common.habitica.helpers.LanguageHelper import kotlinx.coroutines.launch import java.util.Date -import java.util.Locale import javax.inject.Inject abstract class BaseActivity : AppCompatActivity() { @@ -96,12 +93,12 @@ abstract class BaseActivity : AppCompatActivity() { } lifecycleScope.launchCatching { notificationsManager.displayNotificationEvents.collect { - if (ShowNotificationInteractor(this@BaseActivity, lifecycleScope).handleNotification(it)) { - lifecycleScope.launch(ExceptionHandler.coroutine()) { - userRepository.retrieveUser(false, true) - } + if (ShowNotificationInteractor(this@BaseActivity, lifecycleScope).handleNotification(it)) { + lifecycleScope.launch(ExceptionHandler.coroutine()) { + userRepository.retrieveUser(false, true) } } + } } } @@ -252,4 +249,4 @@ abstract class BaseActivity : AppCompatActivity() { overridePendingTransition(R.anim.activity_fade_in, R.anim.activity_fade_out) startActivity(intent) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt index 7f960a980..3e8107b13 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BirthdayActivity.kt @@ -198,7 +198,8 @@ class BirthdayActivity : BaseActivity() { @Composable fun BirthdayTitle(text: String) { Row( - verticalAlignment = Alignment.CenterVertically, modifier = Modifier + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier .fillMaxWidth() .padding(top = 20.dp, bottom = 8.dp) ) { @@ -259,7 +260,8 @@ fun BirthdayActivityView( scaffoldState = scaffoldState ) { padding -> Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier .background( Brush.verticalGradient( Pair(0.0f, colorResource(id = R.color.brand_300)), @@ -291,7 +293,8 @@ fun BirthdayActivityView( ) } Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier .padding(horizontal = 20.dp) .fillMaxWidth() ) { @@ -388,16 +391,19 @@ fun BirthdayActivityView( } else if (isPurchasing) { CircularProgressIndicator() } else { - Text(buildAnnotatedString { - append("Buy for ") - withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { - append(price) - } - append(" or ") - withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { - append("60 Gems") - } - }, color = Color.White) + Text( + buildAnnotatedString { + append("Buy for ") + withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { + append(price) + } + append(" or ") + withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { + append("60 Gems") + } + }, + color = Color.White + ) HabiticaButton( Color.White, colorResource(R.color.brand_200), @@ -557,7 +563,8 @@ fun PotionGrid() { AsyncImage( model = DataBindingUtils.BASE_IMAGE_URL + DataBindingUtils.getFullFilename( "Pet_HatchingPotion_$potion" - ), null, Modifier.size(68.dp) + ), + null, Modifier.size(68.dp) ) } } @@ -616,11 +623,14 @@ fun HabiticaButton( modifier: Modifier = Modifier, content: @Composable () -> Unit ) { - Box(contentAlignment = Alignment.Center, modifier = modifier - .background(background, HabiticaTheme.shapes.medium) - .clickable { onClick() } - .fillMaxWidth() - .padding(8.dp)) { + Box( + contentAlignment = Alignment.Center, + modifier = modifier + .background(background, HabiticaTheme.shapes.medium) + .clickable { onClick() } + .fillMaxWidth() + .padding(8.dp) + ) { ProvideTextStyle( value = TextStyle( fontSize = 18.sp, @@ -640,4 +650,4 @@ private fun Preview() { val scaffoldState = rememberScaffoldState() BirthdayActivityView(scaffoldState, true, false, false, "", Date(), Date(), { }, {}) {} -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt index 1e38048a3..d592ccc02 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt @@ -396,15 +396,15 @@ class ChallengeFormActivity : BaseActivity() { } binding.createChallengeTaskList.addOnItemTouchListener(object : - androidx.recyclerview.widget.RecyclerView.SimpleOnItemTouchListener() { - override fun onInterceptTouchEvent( - rv: androidx.recyclerview.widget.RecyclerView, - e: MotionEvent - ): Boolean { - // Stop only scrolling. - return rv.scrollState == androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_DRAGGING - } - }) + androidx.recyclerview.widget.RecyclerView.SimpleOnItemTouchListener() { + override fun onInterceptTouchEvent( + rv: androidx.recyclerview.widget.RecyclerView, + e: MotionEvent + ): Boolean { + // Stop only scrolling. + return rv.scrollState == androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_DRAGGING + } + }) binding.createChallengeTaskList.adapter = challengeTasks binding.createChallengeTaskList.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt index 64b90d66b..ace307285 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt @@ -24,7 +24,7 @@ import com.plattysoft.leonids.ParticleSystem import kotlinx.coroutines.launch import javax.inject.Inject -class DeathActivity: BaseActivity() { +class DeathActivity : BaseActivity() { private lateinit var binding: ActivityDeathBinding @Inject @@ -109,12 +109,11 @@ class DeathActivity: BaseActivity() { .setScaleRange(0.5f, 0.8f) .setSpeedRange(0.01f, 0.03f) .setFadeOut(4000, AccelerateInterpolator()) - .setSpeedModuleAndAngleRange(0.01f, 0.03f, startAngle, startAngle+80) - .emit(binding.root.width / 2, positionArray[1] + (binding.heartView.height/2), 3, 6000) - + .setSpeedModuleAndAngleRange(0.01f, 0.03f, startAngle, startAngle + 80) + .emit(binding.root.width / 2, positionArray[1] + (binding.heartView.height / 2), 3, 6000) } override fun onBackPressed() { moveTaskToBack(true) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt index 7a1286c8c..ac9f25d1b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt @@ -13,9 +13,8 @@ import com.habitrpg.android.habitica.databinding.ActivityFixcharacterBinding import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.User -import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel - +import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import javax.inject.Inject class FixCharacterValuesActivity : BaseActivity() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt index 16144c33b..35ef062fe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt @@ -147,11 +147,11 @@ class FullProfileActivity : BaseActivity() { } private suspend fun refresh() { - val member = socialRepository.retrieveMember(userID) - if (member != null) { - updateView(member) - } - this@FullProfileActivity.member.value = member + val member = socialRepository.retrieveMember(userID) + if (member != null) { + updateView(member) + } + this@FullProfileActivity.member.value = member } override fun onDestroy() { @@ -174,21 +174,27 @@ class FullProfileActivity : BaseActivity() { } menu.setGroupVisible(R.id.admin_items, isModerator) if (isModerator) { - menu.findItem(R.id.ban_user)?.title = getString(if (member.value?.authentication?.blocked == true) { - R.string.unban_user - } else { - R.string.ban_user - }) - menu.findItem(R.id.shadow_mute_user)?.title = getString(if (member.value?.flags?.chatShadowMuted == true) { - R.string.unshadowmute_user - } else { - R.string.shadow_mute_user - }) - menu.findItem(R.id.mute_user)?.title = getString(if (member.value?.flags?.chatRevoked == true) { - R.string.unmute_user - } else { - R.string.mute_user - }) + menu.findItem(R.id.ban_user)?.title = getString( + if (member.value?.authentication?.blocked == true) { + R.string.unban_user + } else { + R.string.ban_user + } + ) + menu.findItem(R.id.shadow_mute_user)?.title = getString( + if (member.value?.flags?.chatShadowMuted == true) { + R.string.unshadowmute_user + } else { + R.string.shadow_mute_user + } + ) + menu.findItem(R.id.mute_user)?.title = getString( + if (member.value?.flags?.chatRevoked == true) { + R.string.unmute_user + } else { + R.string.mute_user + } + ) } return super.onCreateOptionsMenu(menu) } @@ -357,7 +363,7 @@ class FullProfileActivity : BaseActivity() { if (imageUrl == null || imageUrl.isEmpty()) { binding.profileImage.visibility = View.GONE } else { - //binding.profileImage.load(imageUrl) + // binding.profileImage.load(imageUrl) } val blurbText = profile.blurb diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt index d67256641..cc50a6a77 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.kt @@ -81,10 +81,12 @@ class LoginActivity : BaseActivity() { showValidationError(R.string.login_validation_error_fieldsmissing) return } - lifecycleScope.launch(ExceptionHandler.coroutine { - hideProgress() - ExceptionHandler.reportError(it) - }) { + lifecycleScope.launch( + ExceptionHandler.coroutine { + hideProgress() + ExceptionHandler.reportError(it) + } + ) { val response = apiClient.connectUser(username, password) if (response != null) { handleAuthResponse(response) @@ -112,10 +114,12 @@ class LoginActivity : BaseActivity() { ) return } - lifecycleScope.launch(ExceptionHandler.coroutine { - hideProgress() - ExceptionHandler.reportError(it) - }) { + lifecycleScope.launch( + ExceptionHandler.coroutine { + hideProgress() + ExceptionHandler.reportError(it) + } + ) { val response = apiClient.registerUser(username, email, password, confirmPassword) if (response != null) { handleAuthResponse(response) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt index 828d1f9be..a8bf5a798 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt @@ -96,9 +96,11 @@ class ReportMessageActivity : BaseActivity() { } isReporting = true messageID?.let { - lifecycleScope.launch(ExceptionHandler.coroutine { - isReporting = false - }) { + lifecycleScope.launch( + ExceptionHandler.coroutine { + isReporting = false + } + ) { socialRepository.flagMessage(messageID ?: "", binding.additionalInfoEdittext.text.toString(), groupID) finish() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt index 8bd2b9191..e2f5d7335 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt @@ -206,7 +206,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) = Unit - private var hasCompleted = false private fun onUserReceived(user: User?) { if (completedSetup && !hasCompleted) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt index caa7afae3..59e2a03ab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillTasksActivity.kt @@ -60,7 +60,7 @@ class SkillTasksActivity : BaseActivity() { else -> TaskType.TODO } fragment.onTaskSelection = { - taskSelected(it) + taskSelected(it) } viewFragmentsDictionary.put(position, fragment) return fragment diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index 26e8e8720..19717e335 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -117,7 +117,7 @@ class TaskFormActivity : BaseActivity() { if (granted) { pushNotificationManager.addPushDeviceUsingStoredToken() } else { - //If user denies notification settings originally - they must manually enable it through notification settings. + // If user denies notification settings originally - they must manually enable it through notification settings. val alert = HabiticaAlertDialog(this) alert.setTitle(R.string.push_notification_system_settings_title) alert.setMessage(R.string.push_notification_system_settings_description) @@ -340,7 +340,8 @@ class TaskFormActivity : BaseActivity() { HabiticaTheme { TaskDifficultySelector( viewModel.taskDifficulty.value, - onSelect = { viewModel.taskDifficulty.value = it }) + onSelect = { viewModel.taskDifficulty.value = it } + ) } } @@ -351,32 +352,38 @@ class TaskFormActivity : BaseActivity() { viewModel.habitScoringPositive.value, viewModel.habitScoringNegative.value, { viewModel.habitScoringPositive.value = !viewModel.habitScoringPositive.value }, - { viewModel.habitScoringNegative.value = !viewModel.habitScoringNegative.value }) + { viewModel.habitScoringNegative.value = !viewModel.habitScoringNegative.value } + ) } } binding.habitResetStreakButtons.setContent { HabiticaTheme { TaskFormSelector( - viewModel.habitResetOption.value, listOf( + viewModel.habitResetOption.value, + listOf( LabeledValue(getString(R.string.repeat_daily), HabitResetOption.DAILY), LabeledValue(getString(R.string.weekly), HabitResetOption.WEEKLY), LabeledValue(getString(R.string.monthly), HabitResetOption.MONTHLY) - ), { viewModel.habitResetOption.value = it }, columnSize = 3 + ), + { viewModel.habitResetOption.value = it }, columnSize = 3 ) } } } - binding.statsSelector.setContent { HabiticaTheme { - TaskFormSelector(viewModel.selectedAttribute.value, listOf( - LabeledValue(getString(R.string.strength), Attribute.STRENGTH), - LabeledValue(getString(R.string.constitution), Attribute.CONSTITUTION), - LabeledValue(getString(R.string.intelligence), Attribute.INTELLIGENCE), - LabeledValue(getString(R.string.perception), Attribute.PERCEPTION) - ), { viewModel.selectedAttribute.value = it }) + TaskFormSelector( + viewModel.selectedAttribute.value, + listOf( + LabeledValue(getString(R.string.strength), Attribute.STRENGTH), + LabeledValue(getString(R.string.constitution), Attribute.CONSTITUTION), + LabeledValue(getString(R.string.intelligence), Attribute.INTELLIGENCE), + LabeledValue(getString(R.string.perception), Attribute.PERCEPTION) + ), + { viewModel.selectedAttribute.value = it } + ) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt index 35fedb477..e2cae4535 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskSummaryActivity.kt @@ -240,7 +240,8 @@ fun TaskSummaryView(viewModel: TaskSummaryViewModel) { .fillMaxWidth() ) { Image(HabiticaIconsHelper.imageOfGold().asImageBitmap(), null) - Text("${task?.value}", + Text( + "${task?.value}", fontSize = 16.sp, fontWeight = FontWeight.Medium, color = darkestColor @@ -285,7 +286,8 @@ fun TaskSummaryView(viewModel: TaskSummaryViewModel) { for (item in task?.group?.assignedUsersDetail ?: emptyList()) { val member = viewModel.getMember(item.assignedUserID).collectAsState(null) UserRow( - item.assignedUsername ?: "", member.value, Modifier + item.assignedUsername ?: "", member.value, + Modifier .padding(vertical = 4.dp) .background( HabiticaTheme.colors.windowBackgroundFor(task), @@ -295,9 +297,11 @@ fun TaskSummaryView(viewModel: TaskSummaryViewModel) { .heightIn(min = 24.dp) .fillMaxWidth(), color = darkestColor, - extraContent = if (item.completed) ({ - CompletedAt(item.completedDate) - }) else null + extraContent = if (item.completed) ( + { + CompletedAt(item.completedDate) + } + ) else null ) } task?.group?.assignedUsersDetail?.find { it.assignedUserID == viewModel.userViewModel.userID } @@ -339,4 +343,4 @@ private fun String.makeBoldComposable(): AnnotatedString { @Composable private fun TaskSummaryViewPreview() { TaskSummaryView(TaskSummaryViewModel("")) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/AchievementsAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/AchievementsAdapter.kt index 0e80c9eb0..66da0654f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/AchievementsAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/AchievementsAdapter.kt @@ -11,9 +11,9 @@ import com.habitrpg.android.habitica.databinding.AchievementSectionHeaderBinding import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.QuestAchievement +import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDetailDialog import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.views.PixelArtView -import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDetailDialog class AchievementsAdapter : RecyclerView.Adapter() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt index d7c3a9f1f..a9239466e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationEquipmentRecyclerViewAdapter.kt @@ -25,9 +25,9 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R var equipmentList: MutableList = ArrayList() set(value) { - field = value - notifyDataSetChanged() - } + field = value + notifyDataSetChanged() + } var activeEquipment: String? = null set(value) { field = value @@ -119,7 +119,8 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R priceLabel?.text = itemValue.toString() (dialogContent.findViewById(R.id.gem_icon) as? ImageView)?.setImageBitmap( - HabiticaIconsHelper.imageOfGem()) + HabiticaIconsHelper.imageOfGem() + ) val dialog = HabiticaAlertDialog(itemView.context) dialog.addButton(R.string.purchase_button, true) { _, _ -> @@ -153,4 +154,4 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R } } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt index aa77f755c..46226afa5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt @@ -113,9 +113,15 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler val isOwned = ownedCustomizations.contains(customization.id) val isUsable = customization.isUsable(isOwned) if (customization.availableFrom != null || customization.availableUntil != null) { - if (((customization.availableFrom?.compareTo(today) - ?: 0) > 0 || (customization.availableUntil?.compareTo(today) - ?: 0) < 0) && !isUsable + if (( + ( + customization.availableFrom?.compareTo(today) + ?: 0 + ) > 0 || ( + customization.availableUntil?.compareTo(today) + ?: 0 + ) < 0 + ) && !isUsable ) { continue } @@ -218,7 +224,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler return } - if (customization?.type == "background"){ + if (customization?.type == "background") { val alert = HabiticaAlertDialog(context = itemView.context) val purchasedCustomizationView: View = LayoutInflater.from(itemView.context).inflate(R.layout.purchased_equip_dialog, null) val layerMap = EnumMap(AvatarView.LayerType::class.java) @@ -263,12 +269,12 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler var additionalSetItems: List? = null var buttonWidth: Int - get() = binding.purchaseSetButton.width - set(value) { - val params = binding.purchaseSetButton.layoutParams - params.width = value - binding.purchaseSetButton.layoutParams = params - } + get() = binding.purchaseSetButton.width + set(value) { + val params = binding.purchaseSetButton.layoutParams + params.width = value + binding.purchaseSetButton.layoutParams = params + } init { binding.purchaseSetButton.setOnClickListener(this) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt index a9e112bc3..055c3517d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt @@ -111,7 +111,6 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int) : Recycl private fun getItem(position: Int) = items.filter { it.isVisible }[position] - override fun getItemCount(): Int = items.count { it.isVisible } override fun getItemViewType(position: Int): Int { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt index b08bc874b..10d75c4ef 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt @@ -99,11 +99,11 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter { - //Mystery Item (Inventory Present) + // Mystery Item (Inventory Present) val sdf = SimpleDateFormat("MM", Locale.getDefault()) val month = sdf.format(Date()) "inventory_present_$month" @@ -153,8 +153,8 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter() { field = value notifyDataSetChanged() } - var onEquip: ((String) -> Unit)? = null + var onEquip: ((String) -> Unit)? = null private var existingMounts: List? = null private var ownedMounts: Map? = null private var ownedItems: Map? = null private var ownsSaddles: Boolean = false private var itemList: List = ArrayList() - private fun canRaiseToMount(pet: Pet): Boolean { if (pet.type == "special") return false for (mount in existingMounts ?: emptyList()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementProfileAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementProfileAdapter.kt index 30cdd87a8..882a91107 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementProfileAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementProfileAdapter.kt @@ -8,9 +8,9 @@ import com.habitrpg.android.habitica.databinding.ProfileAchievementItemBinding import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.ui.activities.MainActivity -import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDetailDialog +import com.habitrpg.common.habitica.extensions.loadImage class AchievementProfileAdapter : RecyclerView.Adapter() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt index 073f5087a..a4f526aac 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt @@ -12,7 +12,6 @@ import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.common.habitica.helpers.EmojiParser - import io.realm.OrderedRealmCollection class ChallengesListViewAdapter( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt index ed6562879..84e14431c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt @@ -13,12 +13,13 @@ class DailiesRecyclerViewHolder(layoutResource: Int, viewModel: TasksViewModel) getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, { task, item -> checklistItemScoreEvents?.invoke(task, item) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) }, { - task -> + task -> brokenTaskEvents?.invoke(task) - }, viewModel) + }, viewModel + ) } else { super.onCreateViewHolder(parent, viewType) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt index 61bbde0e2..51cce57de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt @@ -12,12 +12,13 @@ class HabitsRecyclerViewAdapter(layoutResource: Int, viewModel: TasksViewModel) HabitViewHolder( getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel) + task -> + brokenTaskEvents?.invoke(task) + }, viewModel + ) } else { super.onCreateViewHolder(parent, viewType) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt index 4c36548cc..2e61c7f8a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt @@ -73,9 +73,10 @@ class RewardsRecyclerViewAdapter( } }, { task -> taskOpenEvents?.invoke(task.first, task.second) }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel) + task -> + brokenTaskEvents?.invoke(task) + }, viewModel + ) } else { val viewHolder = ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false)) viewHolder.purchaseCardAction = { purchaseCardEvents?.invoke(it) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt index da757abc4..d627b8721 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt @@ -13,12 +13,13 @@ class TodosRecyclerViewAdapter(layoutResource: Int, viewModel: TasksViewModel) : getContentView(parent), { task, direction -> taskScoreEvents?.invoke(task, direction) }, { task, item -> checklistItemScoreEvents?.invoke(task, item) }, { - task -> + task -> taskOpenEvents?.invoke(task.first, task.second) }, { - task -> - brokenTaskEvents?.invoke(task) - }, viewModel) + task -> + brokenTaskEvents?.invoke(task) + }, viewModel + ) } else { super.onCreateViewHolder(parent, viewType) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt index e4c8b93d6..877a63b23 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AchievementsFragment.kt @@ -97,9 +97,11 @@ class AchievementsFragment : BaseMainFragment return@combine Pair(achievements, questAchievements) - }.combine(userRepository.getQuestAchievements() - .map { it.mapNotNull { achievement -> achievement.questKey } } - .map { inventoryRepository.getQuestContent(it).firstOrNull() }) { achievements, content -> + }.combine( + userRepository.getQuestAchievements() + .map { it.mapNotNull { achievement -> achievement.questKey } } + .map { inventoryRepository.getQuestContent(it).firstOrNull() } + ) { achievements, content -> Pair(achievements, content) }.collect { val achievements = it.first.first diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt index c4807477b..6d34e4049 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt @@ -59,7 +59,7 @@ abstract class BaseMainFragment : BaseFragment() { updateTabLayoutVisibility() updateToolbarInteractivity() - + if (hidesToolbar) { hideToolbar() disableToolbarScrolling() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt index bc517cac0..a0adace45 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt @@ -141,14 +141,14 @@ class NavigationDrawerFragment : DialogFragment() { initializeMenuItems() adapter.itemSelectedEvents = { - setSelection(it.transitionId, it.bundle, true) - } + setSelection(it.transitionId, it.bundle, true) + } adapter.promoClosedSubject = { - sharedPreferences.edit { - putBoolean("hide$it", true) - } - updatePromo() + sharedPreferences.edit { + putBoolean("hide$it", true) } + updatePromo() + } lifecycleScope.launchCatching { contentRepository.getWorldState() @@ -285,8 +285,10 @@ class NavigationDrawerFragment : DialogFragment() { if (!user.hasClass && !hasSpecialItems) { item.isVisible = false } else { - if ((user.stats?.lvl - ?: 0) < HabiticaSnackbar.MIN_LEVEL_FOR_SKILLS && (!hasSpecialItems) + if (( + user.stats?.lvl + ?: 0 + ) < HabiticaSnackbar.MIN_LEVEL_FOR_SKILLS && (!hasSpecialItems) ) { item.pillText = getString(R.string.unlock_lvl_11) } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt index ff54e804f..1d8fca78d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt @@ -40,7 +40,7 @@ class NewsFragment : BaseMainFragment() { if (url?.contains("/static/new-stuff") == true) { view?.loadUrl(url) } else if (url != null) { - MainNavigationController.navigate(url) + MainNavigationController.navigate(url) } return true } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt index c31d311e6..535b94d0b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt @@ -80,22 +80,22 @@ class AvatarCustomizationFragment : savedInstanceState: Bundle? ): View? { showsBackButton = true - adapter.onCustomizationSelected = { customization -> - lifecycleScope.launchCatching { - if (customization.identifier?.isNotBlank() != true) { - userRepository.useCustomization(customization.type ?: "", customization.category, activeCustomization ?: "") - } else if (customization.type == "background" && ownedCustomizations.value.firstOrNull { it.key == customization.identifier } == null) { - userRepository.unlockPath(customization) - userRepository.retrieveUser(false, true, true) - } else { - userRepository.useCustomization( - customization.type ?: "", - customization.category, - customization.identifier ?: "" - ) - } + adapter.onCustomizationSelected = { customization -> + lifecycleScope.launchCatching { + if (customization.identifier?.isNotBlank() != true) { + userRepository.useCustomization(customization.type ?: "", customization.category, activeCustomization ?: "") + } else if (customization.type == "background" && ownedCustomizations.value.firstOrNull { it.key == customization.identifier } == null) { + userRepository.unlockPath(customization) + userRepository.retrieveUser(false, true, true) + } else { + userRepository.useCustomization( + customization.type ?: "", + customization.category, + customization.identifier ?: "" + ) } } + } lifecycleScope.launchCatching { inventoryRepository.getInAppRewards() @@ -195,31 +195,31 @@ class AvatarCustomizationFragment : .combine(currentFilter) { customizations, filter -> Pair(customizations, filter) } .combine(ownedCustomizations) { pair, ownedCustomizations -> Triple(pair.first, pair.second, ownedCustomizations) } .collect { (customizations, filter, ownedCustomizations) -> - adapter.ownedCustomizations = - ownedCustomizations.map { it.key + "_" + it.type + "_" + it.category } - if (filter.isFiltering) { - val displayedCustomizations = mutableListOf() - for (customization in customizations) { - if (shouldSkip(filter, ownedCustomizations, customization)) continue - displayedCustomizations.add(customization) - } - adapter.setCustomizations( - if (!filter.ascending) { - displayedCustomizations.reversed() - } else { - displayedCustomizations - } - ) - } else { - adapter.setCustomizations( - if (!filter.ascending) { - customizations.reversed() - } else { - customizations - } - ) + adapter.ownedCustomizations = + ownedCustomizations.map { it.key + "_" + it.type + "_" + it.category } + if (filter.isFiltering) { + val displayedCustomizations = mutableListOf() + for (customization in customizations) { + if (shouldSkip(filter, ownedCustomizations, customization)) continue + displayedCustomizations.add(customization) } + adapter.setCustomizations( + if (!filter.ascending) { + displayedCustomizations.reversed() + } else { + displayedCustomizations + } + ) + } else { + adapter.setCustomizations( + if (!filter.ascending) { + customizations.reversed() + } else { + customizations + } + ) } + } } if (type == "hair" && (category == "beard" || category == "mustache")) { val otherCategory = if (category == "mustache") "beard" else "mustache" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt index 261e97831..0cf20bc45 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarEquipmentFragment.kt @@ -148,4 +148,4 @@ class AvatarEquipmentFragment : binding?.refreshLayout?.isRefreshing = false } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt index d3b615371..11442bb39 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt @@ -39,7 +39,8 @@ import com.habitrpg.android.habitica.ui.views.equipment.EquipmentOverviewView import kotlinx.coroutines.flow.firstOrNull import javax.inject.Inject -open class AvatarOverviewFragment : BaseMainFragment(), +open class AvatarOverviewFragment : + BaseMainFragment(), AdapterView.OnItemSelectedListener { @Inject @@ -71,16 +72,18 @@ open class AvatarOverviewFragment : BaseMainFragment - displayCustomizationFragment(type, category) - }, { type, category -> - displayAvatarEquipmentFragment(type, category) - }, { type, equipped, isCostume -> + displayCustomizationFragment(type, category) + }, { type, category -> + displayAvatarEquipmentFragment(type, category) + }, { type, equipped, isCostume -> displayEquipmentFragment(type, equipped, isCostume) - }) + } + ) } } } @@ -137,7 +140,8 @@ open class AvatarOverviewFragment : BaseMainFragment Unit, onAvatarEquipmentTap: (String, String?) -> Unit, onEquipmentTap: (String, String?, Boolean) -> Unit - ) { +) { val user by userViewModel.user.observeAsState() Column( Modifier .padding(horizontal = 8.dp) - .padding(bottom = 16.dp)) { + .padding(bottom = 16.dp) + ) { if (showCustomization) { Row( Modifier.padding(horizontal = 12.dp, vertical = 15.dp), @@ -162,18 +167,21 @@ fun AvatarOverviewView(userViewModel: MainUserViewModel, color = HabiticaTheme.colors.textSecondary ) Spacer(modifier = Modifier.weight(1f)) - SegmentedControl(items = listOf( - stringResource(R.string.avatar_size_slim), stringResource( - R.string.avatar_size_broad - ) - ), + SegmentedControl( + items = listOf( + stringResource(R.string.avatar_size_slim), + stringResource( + R.string.avatar_size_broad + ) + ), defaultSelectedItemIndex = if (user?.preferences?.size == "slim") 0 else 1, onItemSelection = { userViewModel.updateUser( "preferences.size", if (it == 0) "slim" else "broad" ) - }) + } + ) } AvatarCustomizationOverviewView(user?.preferences, user?.items?.gear?.equipped, onCustomizationTap, onAvatarEquipmentTap) } @@ -229,4 +237,4 @@ fun AvatarOverviewView(userViewModel: MainUserViewModel, } } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt index 6c2b7b01e..ea96ed9df 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt @@ -7,4 +7,4 @@ class EquipmentOverviewFragment : AvatarOverviewFragment() { showCustomization = false super.onCreate(savedInstanceState) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt index 837fc4736..9c627970d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt @@ -269,37 +269,36 @@ class ItemDialogFragment : BaseDialogFragment() { else -> Egg::class.java } itemType?.let { type -> - lifecycleScope.launch(ExceptionHandler.coroutine()) { - inventoryRepository.getOwnedItems(type) - .onEach { items -> - val filteredItems = if (isFeeding) { - items.filter { it.key != "Saddle" } - } else { - items - } - adapter?.data = filteredItems + lifecycleScope.launch(ExceptionHandler.coroutine()) { + inventoryRepository.getOwnedItems(type) + .onEach { items -> + val filteredItems = if (isFeeding) { + items.filter { it.key != "Saddle" } + } else { + items } - .map { items -> items.mapNotNull { it.key } } - .map { inventoryRepository.getItems(itemClass, it.toTypedArray()).firstOrNull() } - .collect { - val itemMap = mutableMapOf() - for (item in it ?: emptyList()) { - itemMap[item.key] = item - } - adapter?.items = itemMap + adapter?.data = filteredItems + } + .map { items -> items.mapNotNull { it.key } } + .map { inventoryRepository.getItems(itemClass, it.toTypedArray()).firstOrNull() } + .collect { + val itemMap = mutableMapOf() + for (item in it ?: emptyList()) { + itemMap[item.key] = item } - - } - lifecycleScope.launch(ExceptionHandler.coroutine()) { - inventoryRepository.getPets().collect { adapter?.setExistingPets(it) } - } - lifecycleScope.launch(ExceptionHandler.coroutine()) { - inventoryRepository.getOwnedPets().map { ownedPets -> - val petMap = mutableMapOf() - ownedPets.forEach { petMap[it.key ?: ""] = it } - return@map petMap - }.collect { adapter?.setOwnedPets(it) } - } + adapter?.items = itemMap + } + } + lifecycleScope.launch(ExceptionHandler.coroutine()) { + inventoryRepository.getPets().collect { adapter?.setExistingPets(it) } + } + lifecycleScope.launch(ExceptionHandler.coroutine()) { + inventoryRepository.getOwnedPets().map { ownedPets -> + val petMap = mutableMapOf() + ownedPets.forEach { petMap[it.key ?: ""] = it } + return@map petMap + }.collect { adapter?.setOwnedPets(it) } + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt index ea8967921..d65d31f19 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt @@ -225,7 +225,7 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL alert?.setMessage(R.string.quest_party_required_description) alert?.addButton(R.string.create_new_party, true, false) { _, _ -> lifecycleScope.launch(ExceptionHandler.coroutine()) { - val group = socialRepository.createGroup( + socialRepository.createGroup( getString(R.string.usernames_party, user?.profile?.name), "", user?.id, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index 89edd138a..035967b01 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -276,7 +276,7 @@ open class ShopFragment : BaseMainFragment() lifecycleScope.launchCatching { val shop = inventoryRepository.retrieveMarketGear() inventoryRepository.getOwnedEquipment() - .map { equipment -> equipment.map { it.key } } + .map { equipment -> equipment.map { it.key } } .collect { equipment -> for (category in shop?.categories ?: emptyList()) { val items = category.items.asSequence().filter { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt index 3ad7102b4..86e3f7116 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.kt @@ -138,7 +138,7 @@ class MountDetailRecyclerFragment : if (animalType != null || animalGroup != null) { lifecycleScope.launch(ExceptionHandler.coroutine()) { val mounts = inventoryRepository.getMounts(animalType, animalGroup, animalColor).firstOrNull() ?: emptyList() - inventoryRepository.getOwnedMounts().map { ownedMounts -> + inventoryRepository.getOwnedMounts().map { ownedMounts -> val mountMap = mutableMapOf() ownedMounts.forEach { mountMap[it.key ?: ""] = it } return@map mountMap diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt index a085a2a91..426a45d22 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.kt @@ -218,7 +218,6 @@ class PetDetailRecyclerFragment : } adapter.setItemList(items) } - } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt index 615c21d74..2b882f2a1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableRecyclerFragment.kt @@ -172,8 +172,6 @@ class StableRecyclerFragment : } } - - companion object { private const val ITEM_TYPE_KEY = "CLASS_TYPE_KEY" private const val HEADER_VIEW_TYPE = 0 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt index 729a8876c..b4e1149dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt @@ -24,8 +24,6 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.extensions.addCancelButton import com.habitrpg.android.habitica.extensions.addCloseButton -import com.habitrpg.common.habitica.extensions.dpToPx -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.helpers.ExceptionHandler import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.helpers.launchCatching @@ -41,6 +39,8 @@ import com.habitrpg.android.habitica.ui.views.ValidatingEditText import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog import com.habitrpg.common.habitica.api.HostConfig +import com.habitrpg.common.habitica.extensions.dpToPx +import com.habitrpg.common.habitica.extensions.layoutInflater import kotlinx.coroutines.launch import retrofit2.HttpException import javax.inject.Inject @@ -48,7 +48,7 @@ import javax.inject.Inject class AccountPreferenceFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener, - AccountUpdateConfirmed { + AccountUpdateConfirmed { @Inject lateinit var hostConfig: HostConfig @Inject @@ -334,7 +334,7 @@ class AccountPreferenceFragment : user?.username ?: "", email ?: "", passwordEditText.text ?: "", - passwordRepeatEditText?.text ?: "" + passwordRepeatEditText.text ?: "" ) (activity as? SnackbarActivity)?.showSnackbar( content = context.getString(R.string.password_added), @@ -454,10 +454,10 @@ class AccountPreferenceFragment : ExceptionHandler.reportError(throwable) }) { userRepository.deleteAccount(password) - dialog?.dismiss() - accountDialog.dismiss() - context?.let { HabiticaBaseApplication.logout(it) } - activity?.finish() + dialog?.dismiss() + accountDialog.dismiss() + context?.let { HabiticaBaseApplication.logout(it) } + activity?.finish() } } @@ -471,7 +471,6 @@ class AccountPreferenceFragment : if (habiticaAccountDialog != null) { accountDialog = habiticaAccountDialog } - } private fun showConfirmUsernameDialog() { @@ -519,5 +518,4 @@ class AccountPreferenceFragment : override fun deletionConfirmClicked(confirmationString: String) { deleteAccount(confirmationString) } - } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt index ac0a07d7c..a187020fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/HabiticaAccountDialog.kt @@ -15,7 +15,6 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding import com.habitrpg.android.habitica.models.user.User - class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R.layout.dialog_habitica_account) { private var _binding: DialogHabiticaAccountBinding? = null private val binding get() = _binding!! @@ -46,7 +45,7 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R "delete_account" -> setDeleteAccountViews() } - binding.backImagebutton.setOnClickListener{dismiss()} + binding.backImagebutton.setOnClickListener { dismiss() } } private fun setResetAccountViews() { @@ -103,7 +102,8 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { if (binding.confirmationInputEdittext.text.toString().isNotEmpty()) { if ((user?.authentication?.hasPassword != true && binding.confirmationInputEdittext.text.toString() == context?.getString(R.string.delete_caps)) || - user?.authentication?.hasPassword == true) { + user?.authentication?.hasPassword == true + ) { binding.confirmActionTextview.setTextColor(ContextCompat.getColor(thisContext, R.color.red_100)) binding.confirmActionTextview.alpha = 1.0f } @@ -127,7 +127,6 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R accountUpdateConfirmed?.deletionConfirmClicked(confirmationString) } } - } } @@ -135,10 +134,8 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R return R.style.HabiticaAccountDialogTheme } - interface AccountUpdateConfirmed { fun resetConfirmedClicked() fun deletionConfirmClicked(confirmationString: String) } } - diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt index 8b745dbcc..d0e6d0f3e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt @@ -9,16 +9,23 @@ import android.provider.Settings import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog -import androidx.core.os.bundleOf import androidx.lifecycle.lifecycleScope -import androidx.preference.* +import androidx.preference.CheckBoxPreference +import androidx.preference.ListPreference +import androidx.preference.Preference +import androidx.preference.PreferenceCategory +import androidx.preference.PreferenceScreen import com.habitrpg.android.habitica.BuildConfig import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.ContentRepository import com.habitrpg.android.habitica.extensions.addCancelButton -import com.habitrpg.android.habitica.helpers.* +import com.habitrpg.android.habitica.helpers.AppConfigManager +import com.habitrpg.android.habitica.helpers.ExceptionHandler +import com.habitrpg.android.habitica.helpers.SoundManager +import com.habitrpg.android.habitica.helpers.TaskAlarmManager +import com.habitrpg.android.habitica.helpers.launchCatching import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.prefs.TimePreference @@ -33,7 +40,7 @@ import com.habitrpg.common.habitica.helpers.AppTestingLevel import com.habitrpg.common.habitica.helpers.LanguageHelper import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch -import java.util.* +import java.util.Locale import javax.inject.Inject class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener { @@ -195,7 +202,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare usePushPreference?.isChecked = true pushNotificationManager.addPushDeviceUsingStoredToken() } else { - //If user denies notification settings originally - they must manually enable it through notification settings. + // If user denies notification settings originally - they must manually enable it through notification settings. val alert = context?.let { HabiticaAlertDialog(it) } alert?.setTitle(R.string.push_notification_system_settings_title) alert?.setMessage(R.string.push_notification_system_settings_description) @@ -335,10 +342,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare override fun onDisplayPreferenceDialog(preference: Preference) { if (preference is TimePreference) { - if (parentFragmentManager.findFragmentByTag(TimePreferenceDialogFragment.TAG) == null) { - TimePreferenceDialogFragment.newInstance(this, preference.getKey()) - .show(parentFragmentManager, TimePreferenceDialogFragment.TAG) - } + if (parentFragmentManager.findFragmentByTag(TimePreferenceDialogFragment.TAG) == null) { + TimePreferenceDialogFragment.newInstance(this, preference.getKey()) + .show(parentFragmentManager, TimePreferenceDialogFragment.TAG) + } } else { super.onDisplayPreferenceDialog(preference) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt index 9cb17712b..3e865b2ee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt @@ -103,8 +103,11 @@ class GemsPurchaseFragment : BaseFragment() { if (birthdayEventEnd != null) { binding?.promoComposeView?.setContent { HabiticaTheme { - BirthdayBanner(endDate = birthdayEventEnd, Modifier.padding(horizontal = 20.dp).clip(HabiticaTheme.shapes.medium) - .padding(bottom = 20.dp)) + BirthdayBanner( + endDate = birthdayEventEnd, + Modifier.padding(horizontal = 20.dp).clip(HabiticaTheme.shapes.medium) + .padding(bottom = 20.dp) + ) } } binding?.promoComposeView?.isVisible = true diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt index 5dec4617e..73ce9413b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt @@ -104,8 +104,11 @@ class SubscriptionFragment : BaseFragment() { if (birthdayEventEnd != null) { binding?.promoComposeView?.setContent { HabiticaTheme { - BirthdayBanner(endDate = birthdayEventEnd, Modifier.padding(horizontal = 20.dp).clip(HabiticaTheme.shapes.medium) - .padding(bottom = 10.dp)) + BirthdayBanner( + endDate = birthdayEventEnd, + Modifier.padding(horizontal = 20.dp).clip(HabiticaTheme.shapes.medium) + .padding(bottom = 10.dp) + ) } } binding?.promoComposeView?.isVisible = true @@ -115,16 +118,16 @@ class SubscriptionFragment : BaseFragment() { lifecycleScope.launchCatching { inventoryRepository.getLatestMysteryItem().collect { - binding?.subBenefitsMysteryItemIcon?.loadImage( - "shop_set_mystery_${ - it.key?.split( - "_" - )?.last() - }" - ) - binding?.subBenefitsMysteryItemText?.text = - context?.getString(R.string.subscribe_listitem3_description_new, it.text) - } + binding?.subBenefitsMysteryItemIcon?.loadImage( + "shop_set_mystery_${ + it.key?.split( + "_" + )?.last() + }" + ) + binding?.subBenefitsMysteryItemText?.text = + context?.getString(R.string.subscribe_listitem3_description_new, it.text) + } } AmplitudeManager.sendNavigationEvent("subscription screen") diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt index 36cf20998..a9f3df468 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/AvatarSetupFragment.kt @@ -226,4 +226,4 @@ class AvatarSetupFragment : BaseFragment() { params?.marginStart = location[0] + px binding?.customizationDrawer?.binding?.caretView?.layoutParams = params } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt index 5d71ad623..6496ed559 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.kt @@ -10,14 +10,14 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent import com.habitrpg.android.habitica.databinding.FragmentSetupTasksBinding import com.habitrpg.android.habitica.models.tasks.Days -import com.habitrpg.shared.habitica.models.tasks.Frequency import com.habitrpg.android.habitica.models.tasks.Task -import com.habitrpg.shared.habitica.models.tasks.TaskType import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.activities.SetupActivity import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.shared.habitica.models.tasks.Frequency +import com.habitrpg.shared.habitica.models.tasks.TaskType import java.util.Date class TaskSetupFragment : BaseFragment() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt index af9e2d6ce..481b8db69 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt @@ -103,9 +103,9 @@ class InboxMessageListFragment : BaseMainFragment - adapter.onOpenProfile = { - FullProfileActivity.open(it) - } + adapter.onOpenProfile = { + FullProfileActivity.open(it) + } adapter.onDeleteMessage = { showDeleteConfirmationDialog(it) } adapter.onFlagMessage = { showFlagConfirmationDialog(it) } adapter.onCopyMessage = { copyMessageToClipboard(it) } @@ -117,7 +117,6 @@ class InboxMessageListFragment : BaseMainFragment - lifecycleScope.launch(ExceptionHandler.coroutine { error -> - ExceptionHandler.reportError(error) - binding?.let { - val alert = HabiticaAlertDialog(it.chatBarView.context) - alert.setTitle("You cannot reply to this conversation") - alert.setMessage("This user is unable to receive your private message") - alert.addOkButton() - alert.show() + lifecycleScope.launch( + ExceptionHandler.coroutine { error -> + ExceptionHandler.reportError(error) + binding?.let { + val alert = HabiticaAlertDialog(it.chatBarView.context) + alert.setTitle("You cannot reply to this conversation") + alert.setMessage("This user is unable to receive your private message") + alert.addOkButton() + alert.show() + } + binding?.chatBarView?.message = chatText } - binding?.chatBarView?.message = chatText - }) { + ) { socialRepository.postPrivateMessage(userID, chatText) delay(200.toDuration(DurationUnit.MILLISECONDS)) viewModel.invalidateDataSource() @@ -227,7 +228,7 @@ class InboxMessageListFragment : BaseMainFragment lifecycleScope.launchCatching { socialRepository.deleteMessage(chatMessage) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt index e118dd033..e9e26ebe3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt @@ -74,8 +74,8 @@ class InboxOverviewFragment : BaseMainFragment(), androidx private fun loadMessages() { lifecycleScope.launch(ExceptionHandler.coroutine()) { socialRepository.getInboxConversations().collect { - setInboxMessages(it) - } + setInboxMessages(it) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt index a1788d525..d7ce2dbd1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernDetailFragment.kt @@ -102,7 +102,7 @@ class TavernDetailFragment : BaseFragment() { } lifecycleScope.launch(ExceptionHandler.coroutine()) { socialRepository.retrieveGroup(Group.TAVERN_ID) } - + user?.let { binding?.questProgressView?.configure(it) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt index 16780f1b6..d18ba1094 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailFragment.kt @@ -109,39 +109,39 @@ class ChallengeDetailFragment : BaseMainFragment } lifecycleScope.launchCatching { challengeRepository.getChallengeTasks(id).collect { taskList -> - binding?.taskGroupLayout?.removeAllViewsInLayout() + binding?.taskGroupLayout?.removeAllViewsInLayout() - val todos = ArrayList() - val habits = ArrayList() - val dailies = ArrayList() - val rewards = ArrayList() + val todos = ArrayList() + val habits = ArrayList() + val dailies = ArrayList() + val rewards = ArrayList() - for (entry in taskList) { - val type = entry.type ?: continue - when (type) { - TaskType.TODO -> todos.add(entry) - TaskType.HABIT -> habits.add(entry) - TaskType.DAILY -> dailies.add(entry) - TaskType.REWARD -> rewards.add(entry) - } - } - - if (habits.size > 0) { - addHabits(habits) - } - - if (dailies.size > 0) { - addDailys(dailies) - } - - if (todos.size > 0) { - addTodos(todos) - } - - if (rewards.size > 0) { - addRewards(rewards) + for (entry in taskList) { + val type = entry.type ?: continue + when (type) { + TaskType.TODO -> todos.add(entry) + TaskType.HABIT -> habits.add(entry) + TaskType.DAILY -> dailies.add(entry) + TaskType.REWARD -> rewards.add(entry) } } + + if (habits.size > 0) { + addHabits(habits) + } + + if (dailies.size > 0) { + addDailys(dailies) + } + + if (todos.size > 0) { + addTodos(todos) + } + + if (rewards.size > 0) { + addRewards(rewards) + } + } } lifecycleScope.launchCatching { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeFilterOptions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeFilterOptions.kt index 9aa7457f0..ed7d3f443 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeFilterOptions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeFilterOptions.kt @@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.ui.fragments.social.challenges import com.habitrpg.android.habitica.models.social.Group -data class ChallengeFilterOptions(var showByGroups: List, +data class ChallengeFilterOptions( + var showByGroups: List, var showOwned: Boolean = false, var notOwned: Boolean = false -) \ No newline at end of file +) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt index fc750e4c1..20c054f57 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.kt @@ -27,7 +27,8 @@ import kotlinx.coroutines.launch import javax.inject.Inject import javax.inject.Named -class ChallengeListFragment : BaseFragment(), +class ChallengeListFragment : + BaseFragment(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener { @Inject @@ -96,10 +97,10 @@ class ChallengeListFragment : BaseFragment() .combine(socialRepository.getUserGroups("guild")) { tavern, guilds -> return@combine Pair(tavern, guilds) }.collect { - this@ChallengeListFragment.filterGroups = mutableListOf() - it.first?.let { tavern -> filterGroups?.add(tavern) } - filterGroups?.addAll(it.second) - } + this@ChallengeListFragment.filterGroups = mutableListOf() + it.first?.let { tavern -> filterGroups?.add(tavern) } + filterGroups?.addAll(it.second) + } } binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt index f98b9e205..e7a689072 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildFragment.kt @@ -128,7 +128,7 @@ class GuildFragment : BaseMainFragment() { return true } R.id.menu_guild_refresh -> { - viewModel.retrieveGroupChat { } + viewModel.retrieveGroupChat { } viewModel.retrieveGroup { } return true } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt index 72e4d972a..14434335d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt @@ -21,8 +21,10 @@ import com.habitrpg.common.habitica.helpers.EmptyItem import kotlinx.coroutines.launch import javax.inject.Inject -class GuildListFragment : BaseFragment(), - SearchView.OnQueryTextListener, SearchView.OnCloseListener, +class GuildListFragment : + BaseFragment(), + SearchView.OnQueryTextListener, + SearchView.OnCloseListener, SwipeRefreshLayout.OnRefreshListener { @Inject diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt index 762e6b59e..b3bfb27cb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt @@ -90,13 +90,13 @@ class NoPartyFragmentFragment : BaseMainFragment() { lifecycleScope.launch(ExceptionHandler.coroutine()) { val leader = socialRepository.retrieveMember(leaderID) ?: return@launch binding?.root?.findViewById(R.id.groupleader_avatar_view) - ?.setAvatar(leader) + ?.setAvatar(leader) binding?.root?.findViewById(R.id.groupleader_text_view)?.text = - getString( - R.string.invitation_title, - leader.displayName, - binding?.invitationsView?.groupName - ) + getString( + R.string.invitation_title, + leader.displayName, + binding?.invitationsView?.groupName + ) } } @@ -157,24 +157,24 @@ class NoPartyFragmentFragment : BaseMainFragment() { if (it.resultCode == Activity.RESULT_OK) { val bundle = it.data?.extras if (bundle?.getString("groupType") == "party") { - lifecycleScope.launch(ExceptionHandler.coroutine()) { - val group = socialRepository.createGroup( - bundle.getString("name"), - bundle.getString("description"), - bundle.getString("leader"), - "party", - bundle.getString("privacy"), - bundle.getBoolean("leaderCreateChallenge") - ) - userRepository.retrieveUser(false) - if (isAdded) { - parentFragmentManager.popBackStack() - } - MainNavigationController.navigate( - R.id.partyFragment, - bundleOf(Pair("partyID", userViewModel.partyID)) - ) + lifecycleScope.launch(ExceptionHandler.coroutine()) { + val group = socialRepository.createGroup( + bundle.getString("name"), + bundle.getString("description"), + bundle.getString("leader"), + "party", + bundle.getString("privacy"), + bundle.getBoolean("leaderCreateChallenge") + ) + userRepository.retrieveUser(false) + if (isAdded) { + parentFragmentManager.popBackStack() } + MainNavigationController.navigate( + R.id.partyFragment, + bundleOf(Pair("partyID", userViewModel.partyID)) + ) + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt index 281b1df0c..2906003d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt @@ -229,7 +229,7 @@ class PartyDetailFragment : BaseFragment() { } else { context?.let { context -> DataBindingUtils.loadImage(context, "quest_" + questContent.key) { - if (binding?.questImageView?.drawable?.constantState != it.constantState || binding?.questImageView?.drawable == null){ + if (binding?.questImageView?.drawable?.constantState != it.constantState || binding?.questImageView?.drawable == null) { binding?.questImageView?.setImageDrawable(it) } val params = binding?.questImageView?.layoutParams ?: return@loadImage diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt index 979cbc705..e40d5c466 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt @@ -127,7 +127,7 @@ class PartyFragment : BaseMainFragment() { return true } R.id.menu_guild_refresh -> { - viewModel.retrieveGroupChat { } + viewModel.retrieveGroupChat { } viewModel.retrieveGroup { } return true } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt index a31f578c7..d8340930e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQOverviewFragment.kt @@ -46,19 +46,26 @@ class FAQOverviewFragment : BaseMainFragment() { super.onViewCreated(view, savedInstanceState) binding?.healthSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfHeartLarge()) + HabiticaIconsHelper.imageOfHeartLarge() + ) binding?.experienceSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfExperienceReward()) + HabiticaIconsHelper.imageOfExperienceReward() + ) binding?.manaSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfMagicLarge()) + HabiticaIconsHelper.imageOfMagicLarge() + ) binding?.goldSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfGoldReward()) + HabiticaIconsHelper.imageOfGoldReward() + ) binding?.gemsSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfGem()) + HabiticaIconsHelper.imageOfGem() + ) binding?.hourglassesSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfHourglassLarge()) + HabiticaIconsHelper.imageOfHourglassLarge() + ) binding?.statsSection?.findViewById(R.id.icon_view)?.setImageBitmap( - HabiticaIconsHelper.imageOfStats()) + HabiticaIconsHelper.imageOfStats() + ) binding?.moreHelpTextView?.setMarkdown(context?.getString(R.string.need_help_header_description, "[Habitica Help Guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)")) binding?.moreHelpTextView?.setOnClickListener { MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to "5481ccf3-5d2d-48a9-a871-70a7380cee5a")) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt index 1b1d8c084..20fdf5bef 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt @@ -64,7 +64,6 @@ class SupportMainFragment : BaseMainFragment() { lifecycleScope.launch(ExceptionHandler.coroutine()) { userRepository.resetTutorial() activity?.showSnackbar(null, null, getString(R.string.tutorial_reset_confirmation), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS) - } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt index 870429bb7..1070b6798 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt @@ -68,10 +68,10 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() { } (recyclerAdapter as? RewardsRecyclerViewAdapter)?.purchaseCardEvents = { - selectedCard = it - val intent = Intent(activity, SkillMemberActivity::class.java) - cardSelectedResult.launch(intent) - } + selectedCard = it + val intent = Intent(activity, SkillMemberActivity::class.java) + cardSelectedResult.launch(intent) + } recyclerAdapter?.brokenTaskEvents = { showBrokenChallengeDialog(it) } viewModel.user.observe(viewLifecycleOwner) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index 977b2b497..16d936e89 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -63,7 +63,8 @@ import kotlinx.coroutines.withContext import java.util.Date import javax.inject.Inject -open class TaskRecyclerViewFragment : BaseFragment(), +open class TaskRecyclerViewFragment : + BaseFragment(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener { private var taskFlowJob: Job? = null val viewModel: TasksViewModel by viewModels({ requireParentFragment() }) @@ -274,8 +275,10 @@ open class TaskRecyclerViewFragment : BaseFragment= (recyclerAdapter?.data?.size ?: 0)) { recyclerAdapter?.data?.get(newPosition - 1)?.position ?: newPosition } else { - (recyclerAdapter?.data?.get(newPosition + 1)?.position - ?: newPosition) - 1 + ( + recyclerAdapter?.data?.get(newPosition + 1)?.position + ?: newPosition + ) - 1 } } - //Factor in if adventure guide is shown. + // Factor in if adventure guide is shown. if (recyclerAdapter?.showAdventureGuide == true) { newPosition = newPosition - 1 } @@ -556,8 +561,10 @@ open class TaskRecyclerViewFragment : BaseFragment Unit)? - get() = emptyAdapter.onRefresh - set(value) { emptyAdapter.onRefresh = value } + get() = emptyAdapter.onRefresh + set(value) { emptyAdapter.onRefresh = value } var state: RecyclerViewState = RecyclerViewState.LOADING set(value) { @@ -76,4 +77,4 @@ class RecyclerViewEmptySupport @JvmOverloads constructor( actualAdapter = adapter updateState(true) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.kt index 9394b08fd..6ef287f4b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/menu/BottomSheetMenu.kt @@ -22,7 +22,7 @@ class BottomSheetMenu(context: Context) : HabiticaBottomSheetDialog(context), Vi override fun onAttachedToWindow() { super.onAttachedToWindow() binding.menuItems.children.forEachIndexed { index, view -> - val anim = TranslateAnimation(0f, 0f, 10f.dpToPx(context) + (5f.dpToPx(context)*index), 0f) + val anim = TranslateAnimation(0f, 0f, 10f.dpToPx(context) + (5f.dpToPx(context) * index), 0f) anim.startOffset = 300 + (20 * index).toLong() anim.fillBefore = true anim.fillAfter = true diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt index cd98ed31c..b3e7ba015 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/theme/HabiticaTheme.kt @@ -94,11 +94,11 @@ fun HabiticaTheme( val Typography.caption1 get() = caption val Typography.caption2 -get() = TextStyle( - fontWeight = FontWeight.Medium, - fontSize = 12.sp, - letterSpacing = 0.4.sp -) + get() = TextStyle( + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + letterSpacing = 0.4.sp + ) val Typography.caption3 get() = TextStyle( fontWeight = FontWeight.Medium, @@ -123,7 +123,6 @@ object HabiticaTheme { @Composable get() = MaterialTheme.typography - val shapes: Shapes @Composable get() = MaterialTheme.shapes @@ -196,4 +195,4 @@ class HabiticaColors( colorResource(if (hasIcon) R.color.content_background else R.color.content_background_offset) } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ComposableViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ComposableViewHolder.kt index 27af0ae3e..68df6f443 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ComposableViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ComposableViewHolder.kt @@ -3,5 +3,4 @@ package com.habitrpg.android.habitica.ui.viewHolders import androidx.compose.ui.platform.ComposeView import androidx.recyclerview.widget.RecyclerView -class ComposableViewHolder(view: ComposeView) : RecyclerView.ViewHolder(view) { -} \ No newline at end of file +class ComposableViewHolder(view: ComposeView) : RecyclerView.ViewHolder(view) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt index a8ddcc1d2..583c21f55 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt @@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.viewHolders.tasks import android.content.Context import android.graphics.PorterDuff -import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View import android.view.ViewGroup diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt index 6019833ec..1fd05ff05 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt @@ -55,7 +55,8 @@ class RewardViewHolder( binding.priceLabel.setCompoundDrawablesWithIntrinsicBounds( HabiticaIconsHelper.imageOfLocked( ContextCompat.getColor(context, R.color.gray_1_30), 10, 12 - ).toDrawable(context.resources), null, null, null + ).toDrawable(context.resources), + null, null, null ) binding.priceLabel.compoundDrawablePadding = 2.dpToPx(context) } else { @@ -83,7 +84,8 @@ class RewardViewHolder( ContextCompat.getColor( context, R.color.offset_background - ), 127 + ), + 127 ) ) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt index 8e9d34100..b6c555310 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/GroupViewModel.kt @@ -116,11 +116,13 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali fun retrieveGroup(function: (() -> Unit)?) { if (groupID?.isNotEmpty() == true) { - viewModelScope.launch(ExceptionHandler.coroutine { - if (it is HttpException && it.code() == 404) { - MainNavigationController.navigateBack() + viewModelScope.launch( + ExceptionHandler.coroutine { + if (it is HttpException && it.code() == 404) { + MainNavigationController.navigateBack() + } } - }) { + ) { val group = socialRepository.retrieveGroup(groupID ?: "") if (groupViewType == GroupViewType.PARTY) { socialRepository.retrievePartyMembers(group?.id ?: "", true) @@ -161,7 +163,6 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali fun leaveGroup( groupChallenges: List, keepChallenges: Boolean = true, - function: (() -> Unit)? = null ) { if (!keepChallenges) { viewModelScope.launchCatching { @@ -206,7 +207,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali val message = socialRepository.likeMessage(message) val index = _chatMessages.value?.indexOfFirst { it.id == message?.id } if (index == null || index < 0) { - retrieveGroupChat { } + retrieveGroupChat { } return@launchCatching } val list = _chatMessages.value?.toMutableList() @@ -222,21 +223,25 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali val list = _chatMessages.value?.toMutableList() list?.remove(chatMessage) _chatMessages.postValue(list) - viewModelScope.launch(ExceptionHandler.coroutine { - list?.add(oldIndex, chatMessage) - _chatMessages.postValue(list) - ExceptionHandler.reportError(it) - }) { + viewModelScope.launch( + ExceptionHandler.coroutine { + list?.add(oldIndex, chatMessage) + _chatMessages.postValue(list) + ExceptionHandler.reportError(it) + } + ) { socialRepository.deleteMessage(chatMessage) } } fun postGroupChat(chatText: String, onComplete: () -> Unit, onError: () -> Unit) { groupID?.let { groupID -> - viewModelScope.launch(ExceptionHandler.coroutine { - ExceptionHandler.reportError(it) - onError() - }) { + viewModelScope.launch( + ExceptionHandler.coroutine { + ExceptionHandler.reportError(it) + onError() + } + ) { val response = socialRepository.postGroupChat(groupID, chatText) val list = _chatMessages.value?.toMutableList() if (response != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt index 4fb2926cf..a0b06d3f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt @@ -34,7 +34,7 @@ class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseVie @Inject lateinit var socialRepository: SocialRepository - protected var memberIDFlow = MutableStateFlow(null) + private var memberIDFlow = MutableStateFlow(null) val memberIDState: StateFlow = memberIDFlow private val config = PagedList.Config.Builder() @@ -124,10 +124,10 @@ class MessagesDataSource( } } .collect { - if (it.size < 10 && footer != null) - callback.onResult(it.plusElement(footer!!), 0) - else - callback.onResult(it, 0) + if (it.size < 10 && footer != null) + callback.onResult(it.plusElement(footer!!), 0) + else + callback.onResult(it, 0) } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt index bd2d67e3f..cf91f1858 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainActivityViewModel.kt @@ -1,7 +1,6 @@ package com.habitrpg.android.habitica.ui.viewmodels import android.content.SharedPreferences -import android.os.Build import androidx.core.content.edit import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt index ba0b0ec5b..841245b55 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/MainUserViewModel.kt @@ -36,7 +36,7 @@ class MainUserViewModel(private val providedUserID: String, val userRepository: val isUserInParty: Boolean get() = user.value?.hasParty == true val mirrorGroupTasks: List - get() = user.value?.preferences?.tasks?.mirrorGroupTasks ?: emptyList() + get() = user.value?.preferences?.tasks?.mirrorGroupTasks ?: emptyList() val user: LiveData = userRepository.getUser().asLiveData() var currentTeamPlan: MutableStateFlow = MutableStateFlow(null) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt index 6ed5036b6..c6ff664f7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/StableViewModel.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject -class StableViewModel(private val application: Application?, private val itemType: String?): BaseViewModel() { +class StableViewModel(private val application: Application?, private val itemType: String?) : BaseViewModel() { @Inject lateinit var inventoryRepository: InventoryRepository @@ -35,7 +35,6 @@ class StableViewModel(private val application: Application?, private val itemTyp component.inject(this) } - private val _items: MutableLiveData> = MutableLiveData() val items: LiveData> = _items val eggs: LiveData> = inventoryRepository.getItems(Egg::class.java) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt index dafb36964..6c3378935 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TaskFormViewModel.kt @@ -6,7 +6,7 @@ import com.habitrpg.shared.habitica.models.tasks.Attribute import com.habitrpg.shared.habitica.models.tasks.HabitResetOption import com.habitrpg.shared.habitica.models.tasks.TaskDifficulty -class TaskFormViewModel: BaseViewModel() { +class TaskFormViewModel : BaseViewModel() { override fun inject(component: UserComponent) { component.inject(this) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt index cef8df773..89dbc90df 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/TasksViewModel.kt @@ -282,12 +282,14 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider { } else { query.equalTo("completed", false) } - Task.FILTER_GRAY -> query = - query.equalTo("completed", true).or().equalTo("isDue", false) + Task.FILTER_GRAY -> + query = + query.equalTo("completed", true).or().equalTo("isDue", false) Task.FILTER_WEAK -> query = query.lessThan("value", 1.0) Task.FILTER_STRONG -> query = query.greaterThanOrEqualTo("value", 1.0) - Task.FILTER_DATED -> query = - query.isNotNull("dueDate").equalTo("completed", false).sort("dueDate") + Task.FILTER_DATED -> + query = + query.isNotNull("dueDate").equalTo("completed", false).sort("dueDate") Task.FILTER_COMPLETED -> query = query.equalTo("completed", true) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt index 8216b58fc..feb08e96d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt @@ -78,13 +78,13 @@ fun UserLevelText(user: Avatar) { } fun AvatarStats.getTranslatedClassName(resources: Resources): String { - return when (habitClass) { - Stats.HEALER -> resources.getString(R.string.healer) - Stats.ROGUE -> resources.getString(R.string.rogue) - Stats.WARRIOR -> resources.getString(R.string.warrior) - Stats.MAGE -> resources.getString(R.string.mage) - else -> resources.getString(R.string.warrior) - } + return when (habitClass) { + Stats.HEALER -> resources.getString(R.string.healer) + Stats.ROGUE -> resources.getString(R.string.rogue) + Stats.WARRIOR -> resources.getString(R.string.warrior) + Stats.MAGE -> resources.getString(R.string.mage) + else -> resources.getString(R.string.warrior) + } } @Composable @@ -107,90 +107,96 @@ fun AppHeaderView( ) val animationValue = animateFloatAsState(targetValue = if (teamPlan != null) 1f else 0f).value Box(modifier = Modifier.height(100.dp)) { - Column(Modifier.padding(bottom = (animationValue * 48f).dp, end = (animationValue * 80f).dp)) { + Column(Modifier.padding(bottom = (animationValue * 48f).dp, end = (animationValue * 80f).dp)) { + LabeledBar( + icon = HabiticaIconsHelper.imageOfHeartLightBg(), + label = stringResource(R.string.HP_default), + color = colorResource(R.color.hpColor), + value = user?.stats?.hp ?: 0.0, + maxValue = user?.stats?.maxHealth?.toDouble() ?: 0.0, + displayCompact = teamPlan != null, + modifier = Modifier.weight(1f) + ) + LabeledBar( + icon = HabiticaIconsHelper.imageOfExperience(), + label = stringResource(R.string.XP_default), + color = colorResource(R.color.xpColor), + value = user?.stats?.exp ?: 0.0, + maxValue = user?.stats?.toNextLevel?.toDouble() ?: 0.0, + displayCompact = teamPlan != null, + abbreviateValue = false, + abbreviateMax = false, + modifier = Modifier.weight(1f) + ) + if (user?.hasClass == true) { LabeledBar( - icon = HabiticaIconsHelper.imageOfHeartLightBg(), - label = stringResource(R.string.HP_default), - color = colorResource(R.color.hpColor), - value = user?.stats?.hp ?: 0.0, - maxValue = user?.stats?.maxHealth?.toDouble() ?: 0.0, - displayCompact = teamPlan != null, - modifier = Modifier.weight(1f) - ) - LabeledBar( - icon = HabiticaIconsHelper.imageOfExperience(), - label = stringResource(R.string.XP_default), - color = colorResource(R.color.xpColor), - value = user?.stats?.exp ?: 0.0, - maxValue = user?.stats?.toNextLevel?.toDouble() ?: 0.0, + icon = HabiticaIconsHelper.imageOfMagic(), + label = stringResource(R.string.MP_default), + color = colorResource(R.color.mpColor), + value = user.stats?.mp ?: 0.0, + maxValue = user.stats?.maxMP?.toDouble() ?: 0.0, displayCompact = teamPlan != null, abbreviateValue = false, abbreviateMax = false, + modifier = Modifier + .weight(1f) + .clickable { + MainNavigationController.navigate(R.id.skillsFragment) + } + ) + } else if ((user?.stats?.lvl ?: 0) < 10) { + LabeledBar( + icon = HabiticaIconsHelper.imageOfMagic(), + label = stringResource(R.string.unlock_level, 10), + color = colorResource(R.color.mpColor), + value = 0.0, + maxValue = 1.0, + displayCompact = teamPlan != null, + disabled = true, modifier = Modifier.weight(1f) ) - if (user?.hasClass == true) { - LabeledBar( - icon = HabiticaIconsHelper.imageOfMagic(), - label = stringResource(R.string.MP_default), - color = colorResource(R.color.mpColor), - value = user.stats?.mp ?: 0.0, - maxValue = user.stats?.maxMP?.toDouble() ?: 0.0, - displayCompact = teamPlan != null, - abbreviateValue = false, - abbreviateMax = false, - modifier = Modifier - .weight(1f) - .clickable { - MainNavigationController.navigate(R.id.skillsFragment) - } - ) - } else if ((user?.stats?.lvl ?: 0) < 10) { - LabeledBar( - icon = HabiticaIconsHelper.imageOfMagic(), - label = stringResource(R.string.unlock_level, 10), - color = colorResource(R.color.mpColor), - value = 0.0, - maxValue = 1.0, - displayCompact = teamPlan != null, - disabled = true, - modifier = Modifier.weight(1f) - ) - } } - val animWidth = with(LocalDensity.current) { 48.dp.roundToPx() } + } + val animWidth = with(LocalDensity.current) { 48.dp.roundToPx() } androidx.compose.animation.AnimatedVisibility( - visible = teamPlan != null, - enter = slideInHorizontally { animWidth } + fadeIn(), - exit = slideOutHorizontally { animWidth } + fadeOut(), - modifier = Modifier.align(Alignment.TopEnd)) { - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .padding(start = 12.dp) - .width(72.dp) - .height(48.dp) - .clip(MaterialTheme.shapes.medium) - .background( - colorResource(R.color.window_background) + visible = teamPlan != null, + enter = slideInHorizontally { animWidth } + fadeIn(), + exit = slideOutHorizontally { animWidth } + fadeOut(), + modifier = Modifier.align(Alignment.TopEnd) + ) { + Row( + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(start = 12.dp) + .width(72.dp) + .height(48.dp) + .clip(MaterialTheme.shapes.medium) + .background( + colorResource(R.color.window_background) + ) + .clickable { + MainNavigationController.navigate( + R.id.guildFragment, + bundleOf("groupID" to teamPlan?.id, "tabToOpen" to 1) ) - .clickable { - MainNavigationController.navigate( - R.id.guildFragment, - bundleOf("groupID" to teamPlan?.id, "tabToOpen" to 1) - ) - } - ) { - Image(painterResource(R.drawable.icon_chat), null, colorFilter = ColorFilter.tint( - colorResource(R.color.text_ternary))) - } + } + ) { + Image( + painterResource(R.drawable.icon_chat), null, + colorFilter = ColorFilter.tint( + colorResource(R.color.text_ternary) + ) + ) } + } val animHeight = with(LocalDensity.current) { 40.dp.roundToPx() } androidx.compose.animation.AnimatedVisibility( visible = teamPlan != null, enter = slideInVertically { animHeight } + fadeIn(), exit = slideOutVertically { animHeight } + fadeOut(), - modifier = Modifier.align(Alignment.BottomCenter)) { + modifier = Modifier.align(Alignment.BottomCenter) + ) { Row( horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically, @@ -208,10 +214,12 @@ fun AppHeaderView( } ) { for (member in teamPlanMembers?.filter { it.id != user?.id }?.sortedByDescending { it.authentication?.timestamps?.lastLoggedIn }?.take(6) ?: emptyList()) { - Box(modifier = Modifier - .clip(CircleShape) - .size(26.dp) - .padding(end = 6.dp, top = 4.dp)) { + Box( + modifier = Modifier + .clip(CircleShape) + .size(26.dp) + .padding(end = 6.dp, top = 4.dp) + ) { ComposableAvatarView( avatar = member, Modifier @@ -237,7 +245,8 @@ fun AppHeaderView( .padding(end = 12.dp) .clickable { MainNavigationController.navigate(R.id.subscriptionPurchaseActivity) - }, decimals = 0 + }, + decimals = 0 ) } CurrencyText( @@ -288,6 +297,5 @@ private class UserProvider : PreviewParameterProvider { @Preview private fun Preview(@PreviewParameter(UserProvider::class) user: User) { AppHeaderView(user) { - } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AvatarCircleShape.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AvatarCircleShape.kt index aa2a5d975..ee5d711e3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AvatarCircleShape.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AvatarCircleShape.kt @@ -14,4 +14,4 @@ object AvatarCircleShape : Shape { density: Density ): Outline = CircleShape.createOutline(size, 20f, 20f, 20f, 20f, layoutDirection) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BottomSheetUtils.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BottomSheetUtils.kt index df14f1d16..ace971c78 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BottomSheetUtils.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BottomSheetUtils.kt @@ -1,7 +1,6 @@ package com.habitrpg.android.habitica.ui.views import android.app.Activity -import android.util.Log import android.view.ViewGroup import androidx.activity.compose.BackHandler import androidx.compose.foundation.background @@ -71,7 +70,6 @@ private fun BottomSheetWrapper( composeView: ComposeView, content: @Composable (() -> Unit) -> Unit ) { - val TAG = parent::class.java.simpleName val coroutineScope = rememberCoroutineScope() val modalBottomSheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden) var isSheetOpened by remember { mutableStateOf(false) } @@ -143,8 +141,7 @@ private fun BottomSheetWrapper( } } else -> { - Log.i(TAG, "Bottom sheet ${modalBottomSheetState.currentValue} state") } } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BuffIcon.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BuffIcon.kt index d7551b876..19c201e40 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BuffIcon.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BuffIcon.kt @@ -10,4 +10,4 @@ fun BuffIcon(buffed: Boolean?, modifier: Modifier = Modifier) { if (buffed == true) { Image(HabiticaIconsHelper.imageOfBuffIcon().asImageBitmap(), null, modifier = modifier) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassIcon.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassIcon.kt index 8293820f8..c67ab53af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassIcon.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ClassIcon.kt @@ -19,4 +19,4 @@ fun ClassIcon(className: String?, hasClass: Boolean, modifier: Modifier = Modifi Image(bitmap = icon, "", modifier = modifier) } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt index 1cd66afc9..22aae4bdd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CompletedAt.kt @@ -30,11 +30,15 @@ fun CompletedAt( modifier = Modifier.padding(top = 4.dp) ) { Image(painterResource(R.drawable.completed), null) - Text(stringResource(R.string.completed_at, - completedAt?.let { if (completedToday) completedTimeFormatToday.format(it) else completedTimeFormat.format(it) } - ?: ""), + Text( + stringResource( + R.string.completed_at, + completedAt?.let { if (completedToday) completedTimeFormatToday.format(it) else completedTimeFormat.format(it) } + ?: "" + ), fontSize = 14.sp, color = if (completedToday) colorResource(R.color.green_10) else colorResource(R.color.text_secondary), - modifier = Modifier.padding(start = 4.dp)) + modifier = Modifier.padding(start = 4.dp) + ) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ComposableAvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ComposableAvatarView.kt index 8b2180169..8739884aa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ComposableAvatarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ComposableAvatarView.kt @@ -22,4 +22,4 @@ fun ComposableAvatarView( } } ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt index 4a064c604..4da601f97 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt @@ -63,4 +63,4 @@ fun CurrencyText( fontWeight = FontWeight.SemiBold ) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt index a83f49fc2..94da9ee4f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/FlowLayout.kt @@ -5,8 +5,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.MeasurePolicy -fun flowLayoutMeasurePolicy(spacing: Int = 0) = MeasurePolicy{ measurables,constraints -> - layout(constraints.maxWidth,constraints.maxHeight){ +fun flowLayoutMeasurePolicy(spacing: Int = 0) = MeasurePolicy { measurables, constraints -> + layout(constraints.maxWidth, constraints.maxHeight) { val placeables = measurables.map { measurable -> measurable.measure(constraints) } @@ -41,9 +41,11 @@ fun FlowLayout( modifier: Modifier = Modifier, spacing: Int = 0, content: @Composable () -> Unit, -){ +) { val measurePolicy = flowLayoutMeasurePolicy(spacing) - Layout(measurePolicy = measurePolicy, + Layout( + measurePolicy = measurePolicy, content = content, - modifier = modifier ) -} \ No newline at end of file + modifier = modifier + ) +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt index 4630e5ec7..46eba020e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/GroupPlanMemberList.kt @@ -40,9 +40,7 @@ import kotlin.random.Random fun GroupPlanMemberList( members: List?, group: Group?, - onMemberClicked: (String) -> Unit, - onMoreClicked: (Member) -> Unit -) { + onMemberClicked: (String) -> Unit) { LazyColumn { item { Text( @@ -56,25 +54,27 @@ fun GroupPlanMemberList( .padding(bottom = 20.dp) ) } - for (member in members?.sortedByDescending { it.authentication?.timestamps?.lastLoggedIn } - ?: emptyList()) { - item { - val role = if (group?.isLeader(member.id ?: "") == true) { - stringResource(R.string.owner) - } else if (group?.isManager(member.id ?: "") == true) { - stringResource(R.string.manager) - } else { - stringResource(R.string.member) + for ( + member in members?.sortedByDescending { it.authentication?.timestamps?.lastLoggedIn } + ?: emptyList() + ) { + item { + val role = if (group?.isLeader(member.id ?: "") == true) { + stringResource(R.string.owner) + } else if (group?.isManager(member.id ?: "") == true) { + stringResource(R.string.manager) + } else { + stringResource(R.string.member) + } + MemberItem( + member, + role, + onMemberClicked, + modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp) + ) } - MemberItem( - member, - role, - onMemberClicked, - modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp) - ) } } - } } @Composable @@ -98,7 +98,8 @@ fun MemberItem( modifier = Modifier.padding(8.dp) ) { ComposableAvatarView( - avatar = member, modifier = Modifier + avatar = member, + modifier = Modifier .padding(6.dp) .size(94.dp, 98.dp) ) @@ -196,7 +197,7 @@ private class MemberProvider : PreviewParameterProvider { member.profile?.name = "User $x" member.authentication = Authentication() member.authentication?.localAuthentication = LocalAuthentication() - member.authentication?.localAuthentication?.username = "user${x}" + member.authentication?.localAuthentication?.username = "user$x" member.stats = Stats() member.stats?.hp = Random.nextDouble() member.stats?.maxHealth = 50 @@ -216,4 +217,4 @@ private class MemberProvider : PreviewParameterProvider { @Preview private fun Preview(@PreviewParameter(MemberProvider::class) member: Member) { MemberItem(member = member, role = "Manager", onMemberClicked = {}) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaListPreference.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaListPreference.kt index 65306f352..f3802fc4d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaListPreference.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaListPreference.kt @@ -22,9 +22,9 @@ class HabiticaListPreference : ListPreference { override fun onClick() { val subtitleText = TextView(context) subtitleText.setText(R.string.cds_subtitle) - val builder = AlertDialog.Builder(context).setSingleChoiceItems(entries, getValueIndex()+1) { dialog, index -> - if (callChangeListener(entryValues[index-1].toString())) { - setValueIndex(index-1) + val builder = AlertDialog.Builder(context).setSingleChoiceItems(entries, getValueIndex() + 1) { dialog, index -> + if (callChangeListener(entryValues[index - 1].toString())) { + setValueIndex(index - 1) } dialog.dismiss() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt index 43401622b..a751bc9ac 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/LabeledBar.kt @@ -67,9 +67,11 @@ fun LabeledBar( modifier = modifier.alpha(if (disabled) 0.5f else 1.0f) ) { icon?.let { - AnimatedVisibility(visible = !displayCompact, + AnimatedVisibility( + visible = !displayCompact, enter = slideInHorizontally { -18 }, - exit = slideOutHorizontally { -18 }) { + exit = slideOutHorizontally { -18 } + ) { Image( it.asImageBitmap(), null, modifier = Modifier.padding(end = 8.dp) ) @@ -158,4 +160,4 @@ private fun Preview() { disabled = true ) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/PixelArtView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/PixelArtView.kt index d9f95f89c..b06d69e3f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/PixelArtView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/PixelArtView.kt @@ -25,4 +25,4 @@ fun PixelArtView( } } ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt index c13f53773..6acfb8392 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/SegmentedControl.kt @@ -35,7 +35,7 @@ fun SegmentedControl( defaultSelectedItemIndex: Int = 0, useFixedWidth: Boolean = false, itemWidth: Dp = 120.dp, - cornerRadius : Int = 10, + cornerRadius: Int = 10, onItemSelection: (selectedItemIndex: Int) -> Unit ) { val selectedIndex = remember { mutableStateOf(defaultSelectedItemIndex) } @@ -104,7 +104,8 @@ fun SegmentedControl( ) }, border = BorderStroke( - 1.dp, if (selectedIndex.value == index) { + 1.dp, + if (selectedIndex.value == index) { color } else { color.copy(alpha = 0.75f) @@ -136,4 +137,4 @@ fun SegmentedControl( } } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt index 76633d458..bbae638dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UserRow.kt @@ -32,11 +32,13 @@ fun UserRow( color: Color? = null ) { Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier.fillMaxWidth()) { - Box(modifier = Modifier - .padding(end = 12.dp) - .clip(CircleShape) - .size(40.dp) - .padding(end = 12.dp, top = if (avatar?.currentMount?.isNotBlank() == true) 24.dp else 12.dp)) { + Box( + modifier = Modifier + .padding(end = 12.dp) + .clip(CircleShape) + .size(40.dp) + .padding(end = 12.dp, top = if (avatar?.currentMount?.isNotBlank() == true) 24.dp else 12.dp) + ) { if (avatar != null) { ComposableAvatarView( avatar = avatar, @@ -63,4 +65,4 @@ fun UserRow( endContent() } } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt index ce0c49760..153e26711 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/UsernameLabel.kt @@ -14,7 +14,8 @@ import com.habitrpg.common.habitica.R import com.habitrpg.common.habitica.models.PlayerTier class UsernameLabel @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { private val textView = TextView(context) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt index 796ead3d0..6bc37c468 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ads/AdButton.kt @@ -11,9 +11,9 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.AdButtonBinding import com.habitrpg.android.habitica.extensions.getMinuteOrSeconds import com.habitrpg.android.habitica.extensions.getShortRemainingString -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.helpers.AdHandler import com.habitrpg.android.habitica.helpers.AdType +import com.habitrpg.common.habitica.extensions.layoutInflater import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt index 9a1c31f8b..518934844 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/AchievementDialog.kt @@ -8,11 +8,11 @@ import android.widget.TextView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.DialogAchievementDetailBinding import com.habitrpg.android.habitica.extensions.fromHtml -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.helpers.MainNavigationController -import com.habitrpg.common.habitica.models.Notification import com.habitrpg.android.habitica.models.user.User +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.loadImage +import com.habitrpg.common.habitica.models.Notification class AchievementDialog(context: Context) : HabiticaAlertDialog(context) { var isLastOnboardingAchievement: Boolean = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt index 02248c18f..c5806d104 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaAlertDialog.kt @@ -248,7 +248,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style. params } else { LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 48.dpToPx(context)) - } + } buttonView.layoutParams = layoutParams buttonView.elevation = 10f diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt index e5eed8ced..2037487ca 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt @@ -12,11 +12,11 @@ import android.widget.TextView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.DialogCompletedQuestContentBinding import com.habitrpg.android.habitica.extensions.fromHtml -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.inventory.QuestDropItem -import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.common.habitica.extensions.layoutInflater +import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.common.habitica.views.PixelArtView class QuestCompletedDialogContent : LinearLayout { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt index d81ddf073..2aa02ab60 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/WonChallengeDialog.kt @@ -7,8 +7,8 @@ import android.widget.ImageView import android.widget.TextView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.fromHtml -import com.habitrpg.common.habitica.models.notifications.ChallengeWonData import com.habitrpg.common.habitica.extensions.loadImage +import com.habitrpg.common.habitica.models.notifications.ChallengeWonData import com.habitrpg.common.habitica.views.PixelArtView class WonChallengeDialog(context: Context) : HabiticaAlertDialog(context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt index 5a501637a..1c949020f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt @@ -39,7 +39,8 @@ fun OverviewItem( ) { val hasIcon = isTwoHanded || (iconName?.isNotBlank() == true && iconName != "shirt_" && !iconName.endsWith("_none") && !iconName.endsWith("_base_0")) Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier + horizontalAlignment = Alignment.CenterHorizontally, + modifier = modifier .width(70.dp) ) { Box( @@ -53,7 +54,8 @@ fun OverviewItem( Image(painterResource(R.drawable.equipment_two_handed), null) } else if (hasIcon) { PixelArtView( - imageName = iconName, modifier = Modifier + imageName = iconName, + modifier = Modifier .size(70.dp) ) @@ -87,36 +89,59 @@ fun EquipmentOverviewView( .padding(12.dp) ) { Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { - OverviewItem(stringResource(R.string.outfit_weapon), outfit?.weapon.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("weapon", outfit?.weapon) - }) - OverviewItem(stringResource(R.string.outfit_shield), outfit?.shield.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("shield", outfit?.shield) - }, isUsingTwohanded) - OverviewItem(stringResource(R.string.outfit_head), outfit?.head.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("head", outfit?.head) - }) - OverviewItem(stringResource(R.string.outfit_armor), outfit?.armor.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("armor", outfit?.armor) - }) + OverviewItem( + stringResource(R.string.outfit_weapon), outfit?.weapon.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("weapon", outfit?.weapon) + } + ) + OverviewItem( + stringResource(R.string.outfit_shield), outfit?.shield.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("shield", outfit?.shield) + }, + isUsingTwohanded + ) + OverviewItem( + stringResource(R.string.outfit_head), outfit?.head.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("head", outfit?.head) + } + ) + OverviewItem( + stringResource(R.string.outfit_armor), outfit?.armor.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("armor", outfit?.armor) + } + ) } Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { OverviewItem( stringResource(R.string.outfit_headAccessory), - outfit?.headAccessory.let { "shop_$it" }, modifier = Modifier.clickable { + outfit?.headAccessory.let { "shop_$it" }, + modifier = Modifier.clickable { onEquipmentTap("headAccessory", outfit?.headAccessory) - }) - OverviewItem(stringResource(R.string.outfit_body), outfit?.body.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("body", outfit?.body) - }) - OverviewItem(stringResource(R.string.outfit_back), outfit?.back.let { "shop_$it" }, modifier = Modifier.clickable { - onEquipmentTap("back", outfit?.back) - }) + } + ) + OverviewItem( + stringResource(R.string.outfit_body), outfit?.body.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("body", outfit?.body) + } + ) + OverviewItem( + stringResource(R.string.outfit_back), outfit?.back.let { "shop_$it" }, + modifier = Modifier.clickable { + onEquipmentTap("back", outfit?.back) + } + ) OverviewItem( stringResource(R.string.outfit_eyewear), - outfit?.eyeWear.let { "shop_$it" }, modifier = Modifier.clickable { + outfit?.eyeWear.let { "shop_$it" }, + modifier = Modifier.clickable { onEquipmentTap("eyewear", outfit?.eyeWear) - }) + } + ) } } } @@ -140,15 +165,18 @@ fun AvatarCustomizationOverviewView( Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) { OverviewItem( stringResource(R.string.avatar_shirt), - preferences?.shirt.let { "icon_${preferences?.size}_shirt_$it" }, modifier = Modifier.clickable { + preferences?.shirt.let { "icon_${preferences?.size}_shirt_$it" }, + modifier = Modifier.clickable { onCustomizationTap("shirt", null) - }) + } + ) OverviewItem( stringResource(R.string.avatar_skin), preferences?.skin.let { "icon_skin_$it" }, modifier = Modifier.clickable { onCustomizationTap("skin", null) - }) + } + ) OverviewItem( stringResource(R.string.avatar_hair_color), if (preferences?.hair?.color != null && preferences.hair?.color != "") "icon_hair_bangs_1_" + preferences.hair?.color else "", @@ -200,13 +228,15 @@ fun AvatarCustomizationOverviewView( preferences?.chair?.let { if (it.startsWith("handleless")) "icon_chair_$it" else "icon_$it" }, modifier = Modifier.clickable { onCustomizationTap("chair", null) - }) + } + ) OverviewItem( stringResource(R.string.avatar_background), preferences?.background.let { "icon_background_$it" }, modifier = Modifier.clickable { onCustomizationTap("background", null) - }) + } + ) OverviewItem( stringResource(R.string.animal_ears), outfit?.headAccessory.let { "shop_$it" }, @@ -229,8 +259,10 @@ fun AvatarCustomizationOverviewView( @Composable fun EquipmentOverviewItemPreview() { Column(Modifier.width(320.dp)) { - Row(modifier = Modifier.background(colorResource(id = R.color.equipment_overview_background)), - horizontalArrangement = Arrangement.spacedBy(8.dp)) { + Row( + modifier = Modifier.background(colorResource(id = R.color.equipment_overview_background)), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { OverviewItem("Main-Hand", "shop_weapon_warrior_1") OverviewItem("Off-Hand", null, isTwoHanded = true) OverviewItem("Armor", null) @@ -238,4 +270,4 @@ fun EquipmentOverviewItemPreview() { EquipmentOverviewView(null, false, { _, _ -> }) AvatarCustomizationOverviewView(null, null, { _, _ -> }, { _, _ -> }) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt index 6dde4e47d..da73570b5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/BottomNavigationItem.kt @@ -9,10 +9,10 @@ import android.widget.RelativeLayout import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.BottomNavigationItemBinding +import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.common.habitica.extensions.getThemeColor import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import com.habitrpg.common.habitica.extensions.layoutInflater -import com.habitrpg.android.habitica.extensions.setTintWith class BottomNavigationItem @JvmOverloads constructor( context: Context, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt index 6114b5175..b5ef7ab88 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/BirthdayMenuView.kt @@ -50,7 +50,8 @@ fun BirthdayBanner(endDate: Date, modifier: Modifier = Modifier) { .fillMaxWidth() .clickable { MainNavigationController.navigate(R.id.birthdayActivity) - }) { + } + ) { Column(Modifier.fillMaxWidth()) { Box( contentAlignment = Alignment.CenterStart, @@ -80,7 +81,8 @@ fun BirthdayBanner(endDate: Date, modifier: Modifier = Modifier) { Column( verticalArrangement = Arrangement.spacedBy( 2.dp, Alignment.CenterVertically - ), modifier = Modifier.padding(start = 8.dp) + ), + modifier = Modifier.padding(start = 8.dp) ) { Image( painterResource(R.drawable.birthday_menu_text), null @@ -123,7 +125,9 @@ fun BirthdayBanner(endDate: Date, modifier: Modifier = Modifier) { @Composable private fun buildString( - value: Int, endDate: Date, formatString: Int + value: Int, + endDate: Date, + formatString: Int ): String { return stringResource( formatString, endDate.getShortRemainingString() @@ -132,7 +136,11 @@ private fun buildString( @Composable fun TimeRemainingText( - endDate: Date, formatString: Int, color: Color, fontSize: TextUnit, fontWeight: FontWeight + endDate: Date, + formatString: Int, + color: Color, + fontSize: TextUnit, + fontWeight: FontWeight ) { var value by remember { mutableStateOf(0) } LaunchedEffect(value) { @@ -152,4 +160,4 @@ fun TimeRemainingText( fontSize = fontSize, fontWeight = fontWeight ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/PromoMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/PromoMenuView.kt index 6b26229e3..90cc53e3e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/PromoMenuView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/PromoMenuView.kt @@ -7,7 +7,6 @@ import android.view.View import android.widget.ImageView import android.widget.RelativeLayout import android.widget.TextView -import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.PromoMenuBinding import com.habitrpg.common.habitica.extensions.getThemeColor diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt index 98e147614..fbd33c960 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/promo/SubscriptionBuyGemsPromoView.kt @@ -4,7 +4,6 @@ import android.content.Context import android.util.AttributeSet import android.widget.Button import android.widget.RelativeLayout -import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.inflate diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt index 2fa19af74..ee5114996 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogBackgroundContent.kt @@ -5,9 +5,9 @@ import android.widget.TextView import com.habitrpg.android.habitica.databinding.PurchaseDialogBackgroundBinding import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.common.habitica.extensions.layoutInflater -import com.habitrpg.shared.habitica.models.Avatar import com.habitrpg.common.habitica.views.AvatarView import com.habitrpg.common.habitica.views.PixelArtView +import com.habitrpg.shared.habitica.models.Avatar import java.util.EnumMap class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGearContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGearContent.kt index 715af1907..a2444966a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGearContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGearContent.kt @@ -5,9 +5,9 @@ import android.widget.TextView import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.DialogPurchaseContentGearBinding -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.shops.ShopItem +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.views.PixelArtView internal class PurchaseDialogGearContent(context: Context) : PurchaseDialogContent(context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGemsContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGemsContent.kt index 42fda0c87..826fb0f01 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGemsContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogGemsContent.kt @@ -4,9 +4,9 @@ import android.content.Context import android.widget.TextView import com.habitrpg.android.habitica.databinding.DialogPurchaseGemsBinding import com.habitrpg.android.habitica.extensions.asDrawable -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.views.PixelArtView internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt index e49bcaa77..32a8633ea 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogItemContent.kt @@ -3,8 +3,8 @@ package com.habitrpg.android.habitica.ui.views.shops import android.content.Context import android.widget.TextView import com.habitrpg.android.habitica.databinding.DialogPurchaseContentItemBinding -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.shops.ShopItem +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.views.PixelArtView class PurchaseDialogItemContent(context: Context) : PurchaseDialogContent(context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt index 89120b44a..eb0e1101e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/ChatBarView.kt @@ -11,13 +11,13 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.databinding.ChatBarViewBinding import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher -import com.habitrpg.common.habitica.extensions.getThemeColor -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.MainNavigationController import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter import com.habitrpg.android.habitica.ui.helpers.AutocompleteTokenizer +import com.habitrpg.common.habitica.extensions.getThemeColor +import com.habitrpg.common.habitica.extensions.layoutInflater import javax.inject.Inject class ChatBarView : LinearLayout { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt index 92bbaa8e8..2282bfd98 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt @@ -4,8 +4,8 @@ import android.content.Context import android.util.AttributeSet import android.widget.LinearLayout import com.habitrpg.android.habitica.databinding.ViewInvitationBinding -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.invitations.GenericInvitation +import com.habitrpg.common.habitica.extensions.layoutInflater class InvitationsView @JvmOverloads constructor( context: Context, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index 7f7f9dada..8f7d10e49 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -11,16 +11,16 @@ import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.QuestCollectBinding import com.habitrpg.android.habitica.databinding.QuestProgressOldBinding -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.setScaledPadding import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.inventory.QuestProgress import com.habitrpg.android.habitica.models.inventory.QuestProgressCollect import com.habitrpg.android.habitica.models.user.User -import com.habitrpg.common.habitica.extensions.loadImage import com.habitrpg.android.habitica.ui.views.HabiticaIcons import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.common.habitica.extensions.getThemeColor +import com.habitrpg.common.habitica.extensions.layoutInflater +import com.habitrpg.common.habitica.extensions.loadImage class OldQuestProgressView : LinearLayout { private val binding = QuestProgressOldBinding.inflate(context.layoutInflater, this) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt index 129275201..6d14ad974 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestMenuView.kt @@ -9,11 +9,11 @@ import android.widget.LinearLayout import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.QuestMenuViewBinding -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.inventory.Quest import com.habitrpg.android.habitica.models.inventory.QuestContent import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.common.habitica.extensions.layoutInflater import java.util.Locale class QuestMenuView : LinearLayout { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt index fa8e349ed..3c99a4369 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt @@ -19,7 +19,6 @@ import androidx.core.graphics.drawable.toBitmap import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.QuestCollectBinding import com.habitrpg.android.habitica.databinding.QuestProgressBinding -import com.habitrpg.android.habitica.helpers.ExceptionHandler import com.habitrpg.android.habitica.helpers.launchCatching import com.habitrpg.android.habitica.models.inventory.Quest import com.habitrpg.android.habitica.models.inventory.QuestContent diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt index 076f65255..2a5862c38 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt @@ -11,9 +11,9 @@ import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.StatsSliderViewBinding import com.habitrpg.android.habitica.extensions.AfterChangeTextWatcher -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.extensions.setTintWith import com.habitrpg.android.habitica.extensions.styledAttributes +import com.habitrpg.common.habitica.extensions.layoutInflater class StatsSliderView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { private val binding = StatsSliderViewBinding.inflate(context.layoutInflater, this) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt index 23545919f..bc8e624ab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt @@ -53,21 +53,25 @@ fun StatsViewComposable( Column( Modifier .background(colorResource(R.color.window_background)) - .clip(MaterialTheme.shapes.large)) { + .clip(MaterialTheme.shapes.large) + ) { Row( Modifier .height(43.dp) .fillMaxWidth() .background(statColor) .padding(horizontal = 12.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically) { + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { Text(statText, color = colorResource(R.color.white)) Text("${levelValue + equipmentValue + buffValue + allocatedValue}", color = colorResource(R.color.white)) } - Row(Modifier.height(61.dp), + Row( + Modifier.height(61.dp), horizontalArrangement = Arrangement.SpaceEvenly, - verticalAlignment = Alignment.CenterVertically ) { + verticalAlignment = Alignment.CenterVertically + ) { Column(modifier = Modifier.weight(1f), verticalArrangement = Arrangement.Center, Alignment.CenterHorizontally) { Text(text = "$levelValue", fontSize = 20.sp) Text(text = stringResource(R.string.level), color = colorResource(R.color.text_quad), fontSize = 12.sp) @@ -80,21 +84,26 @@ fun StatsViewComposable( Text(text = "$buffValue", fontSize = 20.sp) Text(text = stringResource(R.string.buffs), color = colorResource(R.color.text_quad), fontSize = 12.sp) } - Column(modifier = Modifier - .weight(1f) - .fillMaxHeight() - .background(colorResource(if (canAllocate) R.color.offset_background_30 else R.color.window_background)), verticalArrangement = Arrangement.Center, Alignment.CenterHorizontally) { + Column( + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .background(colorResource(if (canAllocate) R.color.offset_background_30 else R.color.window_background)), + verticalArrangement = Arrangement.Center, Alignment.CenterHorizontally + ) { Text(text = "$allocatedValue", fontSize = 20.sp, color = if (canAllocate) statColor else colorResource(R.color.text_primary)) Text(text = stringResource(R.string.allocated), color = if (canAllocate) statColor else colorResource(R.color.text_quad), fontSize = 12.sp) } AnimatedVisibility(visible = canAllocate) { - TextButton(onClick = allocateAction, + TextButton( + onClick = allocateAction, Modifier .width(48.dp) .fillMaxHeight() .background( colorResource(id = R.color.offset_background_30) - )) { + ) + ) { Image(HabiticaIconsHelper.imageOfAttributeAllocateButton().asImageBitmap(), null) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt index 2a4f0a89e..2de04d9dc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignSheet.kt @@ -93,8 +93,9 @@ fun AssignSheetRow( color = colorResource(R.color.text_ternary) ) }, endContent = { - IsAssignedIndicator(isAssigned = isAssigned) - }, modifier = modifier + IsAssignedIndicator(isAssigned = isAssigned) + }, + modifier = modifier .clickable { member.id?.let { onAssignClick(it) } } @@ -112,22 +113,26 @@ private fun IsAssignedIndicator( val transition = updateTransition(isAssigned, label = "isAssigned") val rotation = transition.animateFloat( label = "isAssigned", - transitionSpec = { spring(Spring.DampingRatioLowBouncy, Spring.StiffnessMediumLow) }) { + transitionSpec = { spring(Spring.DampingRatioLowBouncy, Spring.StiffnessMediumLow) } + ) { if (it) 0f else 135f } val backgroundColor = transition.animateColor( label = "isAssigned", - transitionSpec = { tween(450, easing = FastOutLinearInEasing) }) { + transitionSpec = { tween(450, easing = FastOutLinearInEasing) } + ) { if (it) MaterialTheme.colors.primary else colorResource(id = R.color.transparent) } val color = transition.animateColor( label = "isAssigned", - transitionSpec = { tween(450, easing = FastOutLinearInEasing) }) { + transitionSpec = { tween(450, easing = FastOutLinearInEasing) } + ) { colorResource(if (it) R.color.white else R.color.text_dimmed) } val borderColor = transition.animateColor( label = "isAssigned", - transitionSpec = { tween(450, easing = FastOutLinearInEasing) }) { + transitionSpec = { tween(450, easing = FastOutLinearInEasing) } + ) { if (it) MaterialTheme.colors.primary else colorResource(id = R.color.text_dimmed) } Image( @@ -158,4 +163,4 @@ private fun IsAssignedIndicatorPreview() { IsAssignedIndicator(isAssigned = isAssigned.value) IsAssignedIndicator(isAssigned = !isAssigned.value) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt index 10ba61978..98c8bf9d4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/AssignedView.kt @@ -69,27 +69,32 @@ fun AssignedView( endContent = { completedAt[assignable.id]?.let { if (showEditButton) { - UndoTaskCompletion(Modifier.clickable { - assignable.id?.let { it1 -> onUndoClick(it1) } - }) + UndoTaskCompletion( + Modifier.clickable { + assignable.id?.let { it1 -> onUndoClick(it1) } + } + ) } } } ) } if (showEditButton) { - Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier - .clickable { - onEditClick() - } - .padding(vertical = 4.dp) - .background( - backgroundColor, - MaterialTheme.shapes.medium - ) - .padding(15.dp, 12.dp) - .heightIn(min = 24.dp) - .fillMaxWidth()) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .clickable { + onEditClick() + } + .padding(vertical = 4.dp) + .background( + backgroundColor, + MaterialTheme.shapes.medium + ) + .padding(15.dp, 12.dp) + .heightIn(min = 24.dp) + .fillMaxWidth() + ) { Image( painterResource(R.drawable.edit), null, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt index 785c1d1df..36690646c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/TaskFilterDialog.kt @@ -62,7 +62,6 @@ class TaskFilterDialog(context: Context, component: UserComponent?, private val binding.thirdTaskFilter.setText(R.string.completed) } TaskType.REWARD -> { - } } setActiveFilter(viewModel.getActiveFilter(value)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistContainer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistContainer.kt index fb07ff88a..5372b858f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistContainer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ChecklistContainer.kt @@ -6,9 +6,9 @@ import android.util.AttributeSet import android.view.View import androidx.core.view.children import androidx.core.view.updateMargins -import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.android.habitica.models.tasks.ChecklistItem import com.habitrpg.android.habitica.ui.views.DragLinearLayout +import com.habitrpg.common.habitica.extensions.dpToPx class ChecklistContainer @JvmOverloads constructor( context: Context, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt index 83fe74d3b..e99672c45 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt @@ -92,10 +92,12 @@ private fun HabitScoringSelection( } Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(12.dp), modifier = modifier) { Box( - contentAlignment = Alignment.Center, modifier = Modifier + contentAlignment = Alignment.Center, + modifier = Modifier .padding(horizontal = 12.dp) .size(34.dp) - .border(1.dp, borderColor.value, CircleShape + .border( + 1.dp, borderColor.value, CircleShape ) .clip(CircleShape) .clickable { onSelect() } @@ -131,11 +133,12 @@ private fun Preview() { Modifier .background(MaterialTheme.colors.background) .width(300.dp) - .padding(8.dp)) { + .padding(8.dp) + ) { HabitScoringSelector( selectedUp.value, selectedDown.value, { selectedUp.value = !selectedUp.value }, { selectedDown.value = !selectedDown.value }, Modifier.align(Alignment.Center) ) } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderContainer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderContainer.kt index c0ac2fdc2..600987c5a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderContainer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/ReminderContainer.kt @@ -7,8 +7,8 @@ import android.view.View import android.widget.LinearLayout import androidx.core.view.children import androidx.core.view.updateMargins -import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.android.habitica.models.tasks.RemindersItem +import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.shared.habitica.models.tasks.TaskType class ReminderContainer @JvmOverloads constructor( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt index 1230ef00a..be1281d59 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/StepperValueFormView.kt @@ -8,8 +8,8 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.FormStepperValueBinding import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher import com.habitrpg.android.habitica.extensions.asDrawable -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.common.habitica.extensions.layoutInflater import java.text.DecimalFormat class StepperValueFormView @JvmOverloads constructor( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt index 317718187..d857e17c3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt @@ -87,12 +87,14 @@ private fun TaskDifficultySelection( } Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(6.dp), modifier = modifier) { Box( - contentAlignment = Alignment.Center, modifier = Modifier + contentAlignment = Alignment.Center, + modifier = Modifier .size(57.dp) .background( Color( LocalContext.current.getThemeColor(R.attr.colorTintedBackgroundOffset) - ), MaterialTheme.shapes.medium + ), + MaterialTheme.shapes.medium ) .clip(MaterialTheme.shapes.medium) .clickable { onSelect(value) } @@ -128,4 +130,4 @@ private class DifficultyProvider : PreviewParameterProvider { private fun TaskDifficultySelectorPreview(@PreviewParameter(DifficultyProvider::class) difficulty: TaskDifficulty) { val selected = remember { mutableStateOf(difficulty) } TaskDifficultySelector(selected.value, { selected.value = it }, Modifier.width(300.dp)) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskFormSelector.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskFormSelector.kt index 910f76068..f68e13f18 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskFormSelector.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskFormSelector.kt @@ -82,11 +82,13 @@ private fun TaskFormSelection( if (it) HabiticaTheme.colors.tintedUiDetails else Color(context.getThemeColor(R.attr.textColorTintedSecondary)) } Box( - contentAlignment = Alignment.Center, modifier = modifier + contentAlignment = Alignment.Center, + modifier = modifier .background( Color( LocalContext.current.getThemeColor(R.attr.colorTintedBackgroundOffset) - ), MaterialTheme.shapes.medium + ), + MaterialTheme.shapes.medium ) .clip(MaterialTheme.shapes.medium) .clickable { onSelect(value) } @@ -130,4 +132,4 @@ private fun TaskFormSelectorPreview() { { selected.value = it }, Modifier.width(300.dp) ) -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt index ff00cb52c..46b927d03 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskSchedulingControls.kt @@ -113,14 +113,14 @@ class TaskSchedulingControls @JvmOverloads constructor( } var firstDayOfWeek: Int = -1 - set(value) { - field = value - if (value >= 0) { - val codes = (1..7).toList() - Collections.rotate(codes, -firstDayOfWeek+1) - weekdayOrder = codes + set(value) { + field = value + if (value >= 0) { + val codes = (1..7).toList() + Collections.rotate(codes, -firstDayOfWeek + 1) + weekdayOrder = codes + } } - } private val weekdays: Array by lazy { DateFormatSymbols().weekdays diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt index 20da74375..dee96c21c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt @@ -246,10 +246,10 @@ class YesterdailyDialog private constructor( return@launchCatching } val dailies = taskRepository.getTasks(TaskType.DAILY, null, emptyArray()).map { - val taskMap = mutableMapOf() - it.forEachIndexed { index, task -> taskMap[task.id ?: ""] = index } - taskMap - }.firstOrNull() + val taskMap = mutableMapOf() + it.forEachIndexed { index, task -> taskMap[task.id ?: ""] = index } + taskMap + }.firstOrNull() val sortedTasks = tasks?.sortedBy { dailies?.get(it.id ?: "") } val additionalData = HashMap() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AssignedDetailsDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AssignedDetailsDeserializer.kt index 9adef8c45..29b8a9bfd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AssignedDetailsDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/AssignedDetailsDeserializer.kt @@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.models.tasks.GroupAssignedDetails import io.realm.RealmList import java.lang.reflect.Type -class AssignedDetailsDeserializer: JsonDeserializer> { +class AssignedDetailsDeserializer : JsonDeserializer> { override fun deserialize( json: JsonElement?, typeOfT: Type?, @@ -21,11 +21,11 @@ class AssignedDetailsDeserializer: JsonDeserializer(jsonObject[it], GroupAssignedDetails::class.java) + val details = context?.deserialize(jsonObject[it], GroupAssignedDetails::class.java) details?.assignedUserID = it list.add(details) } } return list } -} \ No newline at end of file +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt index cbf4089ff..0dcea3e7d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt @@ -196,10 +196,10 @@ class CustomizationDeserializer : JsonDeserializer> { customization.isBuyable = false } else -> { - val readableSetName = "SET ${setCount+1}: ${ - getMonthName( - setName.substring(11, 13).toInt() - 1 - ) + val readableSetName = "SET ${setCount + 1}: ${ + getMonthName( + setName.substring(11, 13).toInt() - 1 + ) } ${setName.substring(13, 17)}" customization.customizationSetName = readableSetName customization.customizationSet = setName.substring(13, 17) + "." + setName.substring(11, 13) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt index 858f32f7d..f32bbc038 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt @@ -194,7 +194,6 @@ class TaskSerializer : JsonSerializer, JsonDeserializer { obj.addProperty("completed", task.completed) } else -> { - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt index 62f511e6f..05212ec49 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt @@ -166,8 +166,10 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() { remoteViews.setProgressBar(R.id.mp_bar, stats.maxMP ?: 0, stats.mp?.toInt() ?: 0, false) remoteViews.setViewVisibility( R.id.mp_wrapper, - if (showManaBar[widgetId] != true || stats.habitClass == null || (stats.lvl - ?: 0) < 10 || user.preferences?.disableClasses == true + if (showManaBar[widgetId] != true || stats.habitClass == null || ( + stats.lvl + ?: 0 + ) < 10 || user.preferences?.disableClasses == true ) View.GONE else View.VISIBLE ) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt index 52c469901..c4ee5e4c2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetService.kt @@ -52,7 +52,6 @@ class HabitButtonWidgetService : Service() { } } - stopSelf() return START_STICKY diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt index 6eb2c6f50..0798f0bf8 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt @@ -2,8 +2,8 @@ package com.habitrpg.android.habitica.helpers import com.habitrpg.common.habitica.helpers.HealthFormatter import io.kotest.matchers.shouldBe -import java.util.Locale import org.junit.jupiter.api.Test +import java.util.Locale class HealthFormatterTest { @Test diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt index 30b8ab226..3c746818e 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt @@ -8,7 +8,7 @@ import io.kotest.matchers.shouldBe import io.mockk.clearMocks import io.mockk.every import io.mockk.mockk -import java.util.* +import java.util.Locale class NumberAbbreviatorTest : StringSpec({ val mockContext = mockk() diff --git a/build.gradle b/build.gradle index 18ded092e..6d75a6e22 100644 --- a/build.gradle +++ b/build.gradle @@ -8,22 +8,23 @@ buildscript { app_version_code = 0 accompanist_version = '0.28.0' - amplitude_version = '1.5.1' - appcompat_version = '1.5.1' + amplitude_version = '1.6.1' + appcompat_version = '1.6.1' coil_version = '2.2.2' - compose_version = '1.3.1' + compose_version = '1.3.3' core_ktx_version = '1.9.0' coroutines_version = '1.6.4' daggerhilt_version = '2.44.2' - firebase_bom = '30.2.0' - kotlin_version = '1.7.21' + firebase_bom = '31.2.0' + kotlin_version = '1.8.10' + ktlint_version = '0.48.2' lifecycle_version = '2.5.1' markwon_version = '4.6.2' moshi_version = '1.14.0' navigation_version = '2.5.3' okhttp_version = '4.10.0' play_wearables_version = '18.0.0' - play_auth_version = '20.4.0' + play_auth_version = '20.4.1' preferences_version = '1.2.0' realm_version = '1.0.2' retrofit_version = '2.9.0' @@ -36,9 +37,9 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.0' + classpath 'com.android.tools.build:gradle:7.4.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' - classpath 'com.google.gms:google-services:4.3.14' + classpath 'com.google.gms:google-services:4.3.15' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' classpath "io.realm:realm-gradle-plugin:10.11.0" classpath("io.realm.kotlin:gradle-plugin:$realm_version") @@ -47,12 +48,14 @@ buildscript { classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" classpath 'com.google.firebase:perf-plugin:1.4.2' classpath "com.google.dagger:hilt-android-gradle-plugin:$daggerhilt_version" + classpath "org.jlleitschuh.gradle:ktlint-gradle:11.1.0" } } apply plugin: 'io.gitlab.arturbosch.detekt' allprojects { + apply plugin: "org.jlleitschuh.gradle.ktlint" repositories { google() mavenCentral() diff --git a/common/src/androidTest/java/com/habitrpg/common/habitica/ExampleInstrumentedTest.kt b/common/src/androidTest/java/com/habitrpg/common/habitica/ExampleInstrumentedTest.kt deleted file mode 100644 index 9e4a0be54..000000000 --- a/common/src/androidTest/java/com/habitrpg/common/habitica/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.habitrpg.common.habitica - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.habitrpg.common.habitica.test", appContext.packageName) - } -} \ No newline at end of file diff --git a/common/src/main/java/com/habitrpg/common/habitica/api/HostConfig.kt b/common/src/main/java/com/habitrpg/common/habitica/api/HostConfig.kt index 246f86e58..ab9d7cdff 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/api/HostConfig.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/api/HostConfig.kt @@ -72,4 +72,4 @@ class HostConfig { fun hasAuthentication(): Boolean { return userID.isNotEmpty() && apiKey.isNotEmpty() } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/api/Server.kt b/common/src/main/java/com/habitrpg/common/habitica/api/Server.kt index e963e57cf..ee245f620 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/api/Server.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/api/Server.kt @@ -25,4 +25,4 @@ class Server { override fun toString(): String { return addr } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt index e3101625c..86b4db55c 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/Application-Extensions.kt @@ -24,4 +24,4 @@ fun Application.setupCoil() { builder = builder.logger(DebugLogger()) } Coil.setImageLoader(builder.build()) -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/DataBindingUtils.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/DataBindingUtils.kt index a3c98720a..82d66e3ee 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/DataBindingUtils.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/DataBindingUtils.kt @@ -30,13 +30,14 @@ fun PixelArtView.loadImage(imageName: String?, imageFormat: String? = null) { setImageDrawable(null) DataBindingUtils.loadImage(context, imageName, imageFormat) { if (tag == fullname) { - if (fullname.endsWith("gif")) { + bitmap = if (fullname.endsWith("gif")) { setImageDrawable(it) if (it is Animatable) { it.start() } + null } else { - bitmap = it.toBitmap() + it.toBitmap() } } } diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/HabitResetOption.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/HabitResetOption.kt index 9c8d5d426..1ae48fd5b 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/HabitResetOption.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/HabitResetOption.kt @@ -5,7 +5,7 @@ import com.habitrpg.shared.habitica.models.tasks.HabitResetOption val HabitResetOption.nameRes: Int get() = when (this) { - HabitResetOption.DAILY -> R.string.daily - HabitResetOption.WEEKLY -> R.string.weekly - HabitResetOption.MONTHLY -> R.string.monthly - } \ No newline at end of file + HabitResetOption.DAILY -> R.string.daily + HabitResetOption.WEEKLY -> R.string.weekly + HabitResetOption.MONTHLY -> R.string.monthly + } diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt index 9ea5e7366..a2fc97467 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/Int-Extensions.kt @@ -15,4 +15,4 @@ fun Float.dpToPx(context: Context?): Float { fun Double.dpToPx(context: Context?): Double { val displayMetrics = context?.resources?.displayMetrics return ((this * (displayMetrics?.density ?: 1.0f)) + 0.5) -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt index e012c1d9e..0c2c698d4 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/String-Extensions.kt @@ -19,8 +19,8 @@ fun String.fromHtml(): CharSequence { fun String.addZeroWidthSpace(): CharSequence { val spannable: Spannable = SpannableString(this) Linkify.addLinks(spannable, Linkify.WEB_URLS) - //Append a zero-width space to the Spannable to allow clicking - //on the open spaces (and prevent the link from opening) + // Append a zero-width space to the Spannable to allow clicking + // on the open spaces (and prevent the link from opening) return TextUtils.concat(spannable, "\u200B") } @@ -30,4 +30,4 @@ fun String.removeZeroWidthSpace(): String { fun String.localizedCapitalize(): String { return this.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt b/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt index a67bda25d..10a03e294 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/extensions/TaskDifficulty-Extensions.kt @@ -17,4 +17,4 @@ val TaskDifficulty.nameSentenceRes: Int TaskDifficulty.EASY -> R.string.easy_sentence TaskDifficulty.MEDIUM -> R.string.medium_sentence TaskDifficulty.HARD -> R.string.hard_sentence - } \ No newline at end of file + } diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/AppConfigManager.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/AppConfigManager.kt index 941eae549..1a4cb4b61 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/AppConfigManager.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/AppConfigManager.kt @@ -6,4 +6,4 @@ open class AppConfigManager() { // TODO actual implementation return emptyMap() } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/DeviceCommunication.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/DeviceCommunication.kt index 559b66735..5556532c7 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/DeviceCommunication.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/DeviceCommunication.kt @@ -8,4 +8,4 @@ class DeviceCommunication { const val SHOW_RYA = "/show/rya" const val SHOW_TASK_EDIT = "/tasks/edit" } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt index 2e96ba72a..e6f7a38d0 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/MarkdownParser.kt @@ -9,7 +9,6 @@ import android.text.SpannableString import android.text.Spanned import android.text.method.LinkMovementMethod import android.text.util.Linkify -import android.util.Log import android.widget.TextView import com.habitrpg.common.habitica.R import com.habitrpg.common.habitica.extensions.handleUrlClicks @@ -29,10 +28,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.lang.Integer.min import java.lang.NullPointerException -import kotlin.system.measureNanoTime -import kotlin.system.measureTimeMillis object MarkdownParser { private val cache = sortedMapOf() @@ -177,7 +173,7 @@ private fun handleUrlClicks(context: Context, url: String) { Uri.parse("${context.getString(R.string.base_url)}$url") } else { if (Uri.parse(url).scheme == null) { - Uri.parse("http://$url"); + Uri.parse("http://$url") } else { Uri.parse(url) } diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt index 093dfc020..42e9b25dc 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt @@ -23,9 +23,11 @@ object NumberAbbreviator { if (decimalCount > 0) { pattern = ("$pattern.").padEnd(4 + decimalCount, '#') } - val formatter = DecimalFormat(pattern + abbreviationForCounter(context, counter) - .replace(".", "") - .replace(",", "")) + val formatter = DecimalFormat( + pattern + abbreviationForCounter(context, counter) + .replace(".", "") + .replace(",", "") + ) formatter.roundingMode = RoundingMode.FLOOR return formatter.format(usedNumber) } diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/RecyclerViewEmptySupport.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/RecyclerViewEmptySupport.kt index 871a7145e..f37c48f92 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/helpers/RecyclerViewEmptySupport.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/RecyclerViewEmptySupport.kt @@ -39,7 +39,7 @@ class FailedViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { } } -class HolderViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) +class HolderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) class EmptyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { @@ -50,7 +50,9 @@ class EmptyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { ContextCompat.getColor( itemView.context, R.color.text_dimmed - ), android.graphics.PorterDuff.Mode.MULTIPLY) + ), + android.graphics.PorterDuff.Mode.MULTIPLY + ) emptyItem?.iconResource?.let { binding.emptyIconView.setImageResource(it) } binding.emptyViewTitle.text = emptyItem?.title binding.emptyViewDescription.text = emptyItem?.text @@ -93,7 +95,7 @@ class RecyclerViewStateAdapter(val showLoadingAsEmpty: Boolean = false) : Recycl object : RecyclerView.ViewHolder(view) {} } 1 -> FailedViewHolder(parent.inflate(R.layout.failed_item)) - else ->if (emptyViewBuilder != null) { + else -> if (emptyViewBuilder != null) { HolderViewHolder(emptyViewBuilder?.invoke() ?: View(parent.context)) } else { EmptyViewHolder(parent.inflate(R.layout.empty_item)) @@ -122,4 +124,3 @@ class RecyclerViewStateAdapter(val showLoadingAsEmpty: Boolean = false) : Recycl } } } - diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuth.kt b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuth.kt index 2c8a2fa74..634dc65e3 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuth.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuth.kt @@ -1,6 +1,8 @@ package com.habitrpg.common.habitica.models.auth -class UserAuth(var username: String? = null, var password: String? = null, - var confirmPassword: String? = null, var email: String? = null -) { -} \ No newline at end of file +class UserAuth( + var username: String? = null, + var password: String? = null, + var confirmPassword: String? = null, + var email: String? = null +) diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthResponse.kt b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthResponse.kt index 317f41a27..dde393ead 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthResponse.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthResponse.kt @@ -12,4 +12,4 @@ class UserAuthResponse { } var newUser = false var id: String = "" -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocial.kt b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocial.kt index 49bf03412..3c14ce3a2 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocial.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocial.kt @@ -3,4 +3,4 @@ package com.habitrpg.common.habitica.models.auth class UserAuthSocial { var network: String? = null var authResponse: UserAuthSocialTokens? = null -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocialTokens.kt b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocialTokens.kt index c3c02f5a0..528dc68d2 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocialTokens.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/auth/UserAuthSocialTokens.kt @@ -3,4 +3,4 @@ package com.habitrpg.common.habitica.models.auth class UserAuthSocialTokens { var client_id: String? = null var access_token: String? = null -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/notifications/GuildInvitationData.kt b/common/src/main/java/com/habitrpg/common/habitica/models/notifications/GuildInvitationData.kt index f31fe1b7f..1ba55299c 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/notifications/GuildInvitationData.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/notifications/GuildInvitationData.kt @@ -1,6 +1,5 @@ package com.habitrpg.common.habitica.models.notifications - open class GuildInvitationData : NotificationData { var invitation: GuildInvite? = null diff --git a/common/src/main/java/com/habitrpg/common/habitica/models/notifications/ItemReceivedData.kt b/common/src/main/java/com/habitrpg/common/habitica/models/notifications/ItemReceivedData.kt index 31b12e756..4f57e8e8d 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/models/notifications/ItemReceivedData.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/models/notifications/ItemReceivedData.kt @@ -1,8 +1,8 @@ package com.habitrpg.common.habitica.models.notifications -open class ItemReceivedData: NotificationData { +open class ItemReceivedData : NotificationData { var title: String? = null var text: String? = null var icon: String? = null var destination: String? = null -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt index dd2289fa9..54edd717e 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/AvatarView.kt @@ -83,9 +83,11 @@ class AvatarView : FrameLayout { imageViewHolder.forEach { val lp = it.layoutParams val bitmap = it.drawable?.toBitmap(lp.width, lp.height) ?: return@forEach - avatarCanvas?.drawBitmap(bitmap, + avatarCanvas?.drawBitmap( + bitmap, Rect(0, 0, bitmap.width, bitmap.height), - Rect(it.marginStart, it.marginTop, bitmap.width, bitmap.height), null) + Rect(it.marginStart, it.marginTop, bitmap.width, bitmap.height), null + ) } return avatarBitmap @@ -381,8 +383,9 @@ class AvatarView : FrameLayout { LayerType.BACKGROUND -> if (!(showMount || showPet)) { offset = PointF(-25.0f, 0.0f) // compact hero box } - LayerType.MOUNT_BODY, LayerType.MOUNT_HEAD -> offset = - PointF(24.0f, 18.0f) // full hero box + LayerType.MOUNT_BODY, LayerType.MOUNT_HEAD -> + offset = + PointF(24.0f, 18.0f) // full hero box LayerType.CHAIR, LayerType.BACK, LayerType.SKIN, LayerType.SHIRT, LayerType.ARMOR, LayerType.BODY, LayerType.HEAD_0, LayerType.HAIR_BASE, LayerType.HAIR_BANGS, LayerType.HAIR_MUSTACHE, LayerType.HAIR_BEARD, LayerType.EYEWEAR, LayerType.VISUAL_BUFF, LayerType.HEAD, LayerType.HEAD_ACCESSORY, LayerType.HAIR_FLOWER, LayerType.SHIELD, LayerType.WEAPON, LayerType.ZZZ -> if (showMount || showPet) { // full hero box offset = when { @@ -398,8 +401,9 @@ class AvatarView : FrameLayout { // compact hero box offset = PointF(0.0f, 18.0f) } - LayerType.PET -> offset = - PointF(0f, (FULL_HERO_RECT.height() - bounds.height()).toFloat()) + LayerType.PET -> + offset = + PointF(0f, (FULL_HERO_RECT.height() - bounds.height()).toFloat()) } } @@ -518,4 +522,4 @@ class AvatarView : FrameLayout { private val COMPACT_HERO_RECT = Rect(0, 0, 114, 114) private val HERO_ONLY_RECT = Rect(0, 0, 90, 90) } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt b/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt index e1b7c3acc..ce71ed61e 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/HabiticaProgressBar.kt @@ -12,7 +12,8 @@ import com.habitrpg.common.habitica.extensions.layoutInflater import kotlin.math.min class HabiticaProgressBar @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : FrameLayout(context, attrs) { val binding = ProgressBarBinding.inflate(context.layoutInflater, this) diff --git a/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt b/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt index 2d795e96e..ffd306f77 100644 --- a/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt +++ b/common/src/main/java/com/habitrpg/common/habitica/views/PixelArtView.kt @@ -41,9 +41,11 @@ class PixelArtView @JvmOverloads constructor( val smallestSide = min(width, height) val factor = min( - (if (smallestSide > 0 && targetWidth > 0 && smallestSide != targetWidth) { - smallestSide / (targetWidth / 3) - } else 1), + ( + if (smallestSide > 0 && targetWidth > 0 && smallestSide != targetWidth) { + smallestSide / (targetWidth / 3) + } else 1 + ), if (smallestSide > 0 && targetHeight > 0 && smallestSide != targetHeight) { smallestSide / (targetHeight / 3) } else 1 diff --git a/common/src/test/java/com/habitrpg/common/habitica/ExampleUnitTest.kt b/common/src/test/java/com/habitrpg/common/habitica/ExampleUnitTest.kt deleted file mode 100644 index 759425045..000000000 --- a/common/src/test/java/com/habitrpg/common/habitica/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.habitrpg.common.habitica - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/detekt.yml b/detekt.yml index b175ae3bd..af6ca092d 100644 --- a/detekt.yml +++ b/detekt.yml @@ -116,7 +116,7 @@ complexity: active: true functionThreshold: 6 constructorThreshold: 7 - ignoreDefaultParameters: false + ignoreDefaultParameters: true ignoreDataClasses: true ignoreAnnotated: [] MethodOverloading: @@ -556,7 +556,6 @@ potential-bugs: LateinitUsage: active: false excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**'] - excludeAnnotatedProperties: [] ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: false @@ -644,7 +643,7 @@ style: ignoreOverridableFunction: true ignoreActualFunction: true excludedFunctions: '' - excludeAnnotatedFunction: + ignoreAnnotated: - 'dagger.Provides' LibraryCodeMustSpecifyReturnType: active: true @@ -715,7 +714,7 @@ style: active: false ReturnCount: active: true - max: 2 + max: 3 excludedFunctions: 'equals' excludeLabeled: false excludeReturnFromLambda: true @@ -734,10 +733,10 @@ style: active: false UnderscoresInNumericLiterals: active: false - acceptableDecimalLength: 5 + acceptableLength: 5 UnnecessaryAbstractClass: active: true - excludeAnnotatedClasses: + ignoreAnnotated: - 'dagger.Module' UnnecessaryAnnotationUseSiteTarget: active: false @@ -760,6 +759,8 @@ style: UnusedPrivateMember: active: true allowedNames: '(_|ignored|expected|serialVersionUID)' + ignoreAnnotated: + - 'Preview' UseArrayLiteralsInAnnotations: active: false UseCheckNotNull: @@ -768,7 +769,6 @@ style: active: false UseDataClass: active: false - excludeAnnotatedClasses: [] allowVars: false UseEmptyCounterpart: active: false diff --git a/detekt_baseline.xml b/detekt_baseline.xml index 2c43e4deb..92259f95a 100644 --- a/detekt_baseline.xml +++ b/detekt_baseline.xml @@ -1,110 +1,128 @@ - + - + - ComplexCondition:AutocompleteAdapter.kt$AutocompleteAdapter.<no name provided>$constraint[0] == '@' && constraint.length >= 3 && socialRepository != null && remoteAutocomplete - ComplexCondition:AvatarStatsWidgetProvider.kt$AvatarStatsWidgetProvider$showManaBar && (stats.habitClass == null || (stats.lvl ?: 0) < 10 || user.preferences?.disableClasses == true) + ComplexCondition:AccountPreferenceFragment.kt$AccountPreferenceFragment$(showEmail && emailEditText?.isValid != true) || passwordEditText?.isValid != true || passwordRepeatEditText?.isValid != true + ComplexCondition:AutocompleteAdapter.kt$AutocompleteAdapter.<no name provided>$constraint[0] == '@' && constraint.length >= 3 && socialRepository != null && remoteAutocomplete + ComplexCondition:AvatarStatsWidgetProvider.kt$AvatarStatsWidgetProvider$showManaBar[widgetId] != true || stats.habitClass == null || ( stats.lvl ?: 0 ) < 10 || user.preferences?.disableClasses == true ComplexCondition:AvatarStatsWidgetProvider.kt$AvatarStatsWidgetProvider$user == null || stats == null || context == null || appWidgetManager == null ComplexCondition:ChallengeListFragment.kt$ChallengeListFragment$(!forced && binding?.refreshLayout?.isRefreshing == true) || loadedAllData || !this::challengeRepository.isInitialized ComplexCondition:ChatRecyclerViewHolder.kt$ChatRecyclerMessageViewHolder$(name != null && msg.text?.contains("@$name") == true) || (username != null && msg.text?.contains(username) == true) - ComplexCondition:HabitViewHolder.kt$HabitViewHolder$data.counterUp != null && data.counterUp ?: 0 > 0 && data.counterDown != null && data.counterDown ?: 0 > 0 + ComplexCondition:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter$this.customizationList[position] is CustomizationSet && (position == (customizationList.size - 1) || (position < customizationList.size && customizationList[position + 1] is CustomizationSet)) + ComplexCondition:ItemRecyclerAdapter.kt$ItemRecyclerAdapter.ItemViewHolder$!(selectedItem is QuestContent || selectedItem is SpecialItem || ownedItem?.itemType == "special") && index == 0 ComplexCondition:LoginActivity.kt$LoginActivity$username.isEmpty() || password.isEmpty() || email.isEmpty() || confirmPassword.isEmpty() ComplexCondition:LoginBackgroundView.kt$LoginBackgroundView$viewWidth <= 0 || viewHeight <= 0 || didLayoutStars || starViews?.size == 0 ComplexCondition:NavigationDrawerFragment.kt$NavigationDrawerFragment$adapter.selectedItem != null && adapter.selectedItem == transitionId && bundle == null && preventReselection - ComplexCondition:PurchaseDialog.kt$PurchaseDialog$(shopItem.currency != "gold" || shopItem.canAfford(user, purchaseQuantity)) && !shopItem.locked && purchaseQuantity >= 1 + ComplexCondition:PurchaseDialog.kt$PurchaseDialog$(shopItem.currency != "gold" || shopItem.canAfford(user, purchaseQuantity)) && !shopItem.locked && purchaseQuantity >= 1 ComplexCondition:PurchaseDialog.kt$PurchaseDialog$shopIdentifier != null && shopIdentifier == Shop.TIME_TRAVELERS_SHOP || "mystery_set" == shopItem.purchaseType || shopItem.currency == "hourglasses" ComplexCondition:PurchaseDialog.kt$PurchaseDialog$shopItem.habitClass != null && shopItem.habitClass != "special" && shopItem.habitClass != "armoire" && user?.stats?.habitClass != shopItem.habitClass - ComplexCondition:PushNotificationManager.kt$PushNotificationManager$this.refreshedToken.isEmpty() || this.user == null || this.userHasPushDevice() || !this.userIsSubscribedToNotifications() + ComplexCondition:PurchaseDialog.kt$PurchaseDialog$shopItem.purchaseType == "customization" || shopItem.purchaseType == "background" || shopItem.purchaseType == "backgrounds" || shopItem.purchaseType == "customizationSet" ComplexCondition:QuestProgressView.kt$QuestProgressView$quest == null || progress == null || !quest.isValid || !progress.isValid ComplexCondition:RealmTaskLocalRepository.kt$RealmTaskLocalRepository$firstTask != null && secondTask != null && firstTask.isValid && secondTask.isValid - ComplexCondition:RxErrorHandler.kt$RxErrorHandler.Companion$!IOException::class.java.isAssignableFrom(throwable.javaClass) && !HttpException::class.java.isAssignableFrom(throwable.javaClass) && !retrofit2.HttpException::class.java.isAssignableFrom(throwable.javaClass) && !EOFException::class.java.isAssignableFrom(throwable.javaClass) && throwable !is ConnectionShutdownException + ComplexCondition:RewardsRecyclerViewAdapter.kt$RewardsRecyclerViewAdapter$(customRewards != null && position < customRewardCount) || (customRewardCount == 0 && inAppRewardCount == 0) ComplexCondition:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$!removalsPending && !movesPending && !additionsPending && !changesPending - ComplexCondition:SubscriptionFragment.kt$SubscriptionFragment$user?.purchased?.plan?.paymentMethod == "Google" && user?.purchased?.plan?.isActive == true && user?.purchased?.plan?.dateTerminated == null && (newestSubscription?.isAutoRenewing == false) + ComplexCondition:SubscriptionFragment.kt$SubscriptionFragment$user?.purchased?.plan?.paymentMethod == "Google" && user?.purchased?.plan?.isActive == true && user?.purchased?.plan?.dateTerminated == null && (newestSubscription?.isAutoRenewing != true) + ComplexCondition:Task.kt$Task$counterUp != null && (counterUp ?: 0) > 0 && counterDown != null && (counterDown ?: 0) > 0 + ComplexCondition:TaskAlarmManager.kt$TaskAlarmManager$remindersItem == null || (reminderItemTask.type == TaskType.DAILY && zonedTime?.isBefore(now) == true && reminderItemTask.nextDue?.firstOrNull() != null) || (reminderItemTask.type == TaskType.TODO && zonedTime?.isBefore(now) == true) ComplexMethod:AccountPreferenceFragment.kt$AccountPreferenceFragment$override fun onPreferenceTreeClick(preference: Preference): Boolean + ComplexMethod:AppHeaderView.kt$@Composable fun AppHeaderView( user: Avatar?, teamPlan: TeamPlan? = null, teamPlanMembers: List<Member>? = null, onMemberRowClicked: () -> Unit ) ComplexMethod:AvatarStatsWidgetProvider.kt$AvatarStatsWidgetProvider$private fun updateData(widgetIds: IntArray? = null) - ComplexMethod:AvatarView.kt$AvatarView$@Suppress("ReturnCount") private fun getAvatarLayerMap(avatar: Avatar, substitutions: Map<String, Map<String, String>>): EnumMap<LayerType, String> - ComplexMethod:AvatarView.kt$AvatarView$private fun getLayerBounds(layerType: LayerType, layerName: String, drawable: Drawable): Rect ComplexMethod:BaseActivity.kt$BaseActivity$internal open fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean = false) - ComplexMethod:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun bind(data: Task, position: Int, displayMode: String) + ComplexMethod:BaseTaskViewHolder.kt$BaseTaskViewHolder$open fun bind( data: Task, position: Int, displayMode: String, ownerID: String? ) ComplexMethod:ChatMessageDeserializer.kt$ChatMessageDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): ChatMessage ComplexMethod:ChatRecyclerViewHolder.kt$ChatRecyclerMessageViewHolder$fun bind(msg: ChatMessage, uuid: String, user: User?, isExpanded: Boolean) ComplexMethod:ChecklistedViewHolder.kt$ChecklistedViewHolder$private fun updateChecklistDisplay() + ComplexMethod:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter$fun setCustomizations(newCustomizationList: List<Customization>) ComplexMethod:CustomizationSetupAdapter.kt$CustomizationSetupAdapter$private fun isCustomizationActive(customization: SetupCustomization): Boolean + ComplexMethod:EquipmentOverviewView.kt$@Composable fun AvatarCustomizationOverviewView( preferences: Preferences?, outfit: Outfit?, onCustomizationTap: (String, String?) -> Unit, onAvatarEquipmentTap: (String, String?) -> Unit, modifier: Modifier = Modifier ) ComplexMethod:GroupSerialization.kt$GroupSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Group - ComplexMethod:HabitViewHolder.kt$HabitViewHolder$override fun bind(data: Task, position: Int, displayMode: String) ComplexMethod:ItemRecyclerAdapter.kt$ItemRecyclerAdapter.ItemViewHolder$override fun onClick(v: View) ComplexMethod:LocalNotificationActionReceiver.kt$LocalNotificationActionReceiver$private fun handleLocalNotificationAction(action: String?) ComplexMethod:MemberSerialization.kt$MemberSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Member ComplexMethod:NavigationDrawerFragment.kt$NavigationDrawerFragment$private fun updateUser(user: User) - ComplexMethod:Notification.kt$Notification$fun getDataType(): java.lang.reflect.Type? - ComplexMethod:NotificationsManager.kt$NotificationsManager$private fun handlePopupNotifications(notifications: List<Notification>): Boolean + ComplexMethod:NotificationsManager.kt$MainNotificationsManager$private fun handlePopupNotifications(notifications: List<Notification>): Boolean ComplexMethod:PetSuggestHatchDialog.kt$PetSuggestHatchDialog$fun configure( pet: Animal, egg: Egg?, potion: HatchingPotion?, eggCount: Int, potionCount: Int, hasUnlockedEgg: Boolean, hasUnlockedPotion: Boolean, hasMount: Boolean ) ComplexMethod:PreferencesFragment.kt$PreferencesFragment$override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) + ComplexMethod:PreferencesFragment.kt$PreferencesFragment$override fun setUser(user: User?) ComplexMethod:PurchaseDialog.kt$PurchaseDialog$private fun buyItem(quantity: Int) + ComplexMethod:PurchaseDialog.kt$PurchaseDialog$private suspend fun remainingPurchaseQuantity(onResult: (Int) -> Unit) ComplexMethod:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$override fun runPendingAnimations() - ComplexMethod:SetupCustomizationRepositoryImpl.kt$SetupCustomizationRepositoryImpl$override fun getCustomizations(type: String, subtype: String?, user: User): List<SetupCustomization> + ComplexMethod:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion$fun score(user: User, task: Task, direction: TaskDirection): TaskDirectionData? + ComplexMethod:SetupCustomizationRepositoryImpl.kt$SetupCustomizationRepositoryImpl$override fun getCustomizations(type: String, subtype: String?, user: User): List<SetupCustomization> ComplexMethod:ShowNotificationInteractor.kt$ShowNotificationInteractor$fun handleNotification(notification: Notification): Boolean - ComplexMethod:StableRecyclerFragment.kt$StableRecyclerFragment$private fun mapAnimals(unsortedAnimals: List<Animal>, ownedAnimals: Map<String, OwnedObject>): ArrayList<Any> + ComplexMethod:StableViewModel.kt$StableViewModel$private fun mapAnimals(unsortedAnimals: List<Animal>, ownedAnimals: Map<String, OwnedObject>): ArrayList<Any> ComplexMethod:StatsFragment.kt$StatsFragment$private fun updateStats(user: User) ComplexMethod:SubscriptionDetailsView.kt$SubscriptionDetailsView$fun setPlan(plan: SubscriptionPlan) ComplexMethod:Task.kt$Task$fun isBeingEdited(task: Task): Boolean + ComplexMethod:TaskDescriptionBuilder.kt$TaskDescriptionBuilder$private fun describeRepeatDays(task: Task): Any ComplexMethod:TaskFormActivity.kt$TaskFormActivity$override fun onCreate(savedInstanceState: Bundle?) ComplexMethod:TaskFormActivity.kt$TaskFormActivity$private fun fillForm(task: Task) - ComplexMethod:TaskRecyclerViewFragment.kt$TaskRecyclerViewFragment$private fun setInnerAdapter() ComplexMethod:TaskRepositoryImpl.kt$TaskRepositoryImpl$private fun handleTaskResponse( user: User, res: TaskDirectionData, task: Task, up: Boolean, localDelta: Float ) ComplexMethod:TaskSchedulingControls.kt$TaskSchedulingControls$private fun generateSummary() ComplexMethod:TaskSerializer.kt$TaskSerializer$override fun deserialize( json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext ): Task + ComplexMethod:TaskSummaryActivity.kt$@Composable fun TaskSummaryView(viewModel: TaskSummaryViewModel) ComplexMethod:UserDeserializer.kt$UserDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): User - ComplexMethod:UserStatComputer.kt$UserStatComputer$fun computeClassBonus(equipmentList: List<Equipment>, user: Avatar): List<StatsRow> + ComplexMethod:UserStatComputer.kt$UserStatComputer$fun computeClassBonus(equipmentList: List<Equipment>?, user: Avatar): List<StatsRow> ComplexMethod:WorldStateSerialization.kt$WorldStateSerialization$override fun deserialize( json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext? ): WorldState ConstructorParameterNaming:Days.kt$Days$`in`: Parcel ConstructorParameterNaming:Task.kt$Task$`in`: Parcel - DuplicateCaseInWhenExpression:Notification.kt$Notification$when (type) { Type.LOGIN_INCENTIVE.type -> LoginIncentiveData::class.java Type.NEW_STUFF.type -> NewStuffData::class.java Type.NEW_CHAT_MESSAGE.type -> NewChatMessageData::class.java Type.GROUP_TASK_NEEDS_WORK.type -> GroupTaskNeedsWorkData::class.java Type.GROUP_TASK_APPROVED.type -> GroupTaskApprovedData::class.java Type.GROUP_TASK_REQUIRES_APPROVAL.type -> GroupTaskRequiresApprovalData::class.java Type.UNALLOCATED_STATS_POINTS.type -> UnallocatedPointsData::class.java Type.GUILD_INVITATION.type -> GuildInvitationData::class.java Type.PARTY_INVITATION.type -> PartyInvitationData::class.java Type.QUEST_INVITATION.type -> QuestInvitationData::class.java Type.FIRST_DROP.type -> FirstDropData::class.java Type.ACHIEVEMENT_GENERIC.type -> AchievementData::class.java Type.WON_CHALLENGE.type -> ChallengeWonData::class.java Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> AchievementData::class.java Type.ACHIEVEMENT_BACK_TO_BASICS.type -> AchievementData::class.java Type.ACHIEVEMENT_JUST_ADD_WATER.type -> AchievementData::class.java Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> AchievementData::class.java Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> AchievementData::class.java Type.ACHIEVEMENT_DUST_DEVIL.type -> AchievementData::class.java Type.ACHIEVEMENT_ARID_AUTHORITY.type -> AchievementData::class.java Type.ACHIEVEMENT_MONSTER_MAGUS.type -> AchievementData::class.java Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> AchievementData::class.java Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> AchievementData::class.java Type.ACHIEVEMENT_PEARLY_PRO.type -> AchievementData::class.java Type.ACHIEVEMENT_TICKLED_PINK.type -> AchievementData::class.java Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> AchievementData::class.java Type.ACHIEVEMENT_BUG_BONANZA.type -> AchievementData::class.java Type.ACHIEVEMENT_BARE_NECESSITIES.type -> AchievementData::class.java Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> AchievementData::class.java Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> AchievementData::class.java Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> AchievementData::class.java Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> AchievementData::class.java Type.ACHIEVEMENT_BONE_COLLECTOR.type -> AchievementData::class.java Type.ACHIEVEMENT_SKELETON_CREW.type -> AchievementData::class.java Type.ACHIEVEMENT_SEEING_RED.type -> AchievementData::class.java Type.ACHIEVEMENT_RED_LETTER_DAY.type -> AchievementData::class.java else -> null } - DuplicateCaseInWhenExpression:NotificationsManager.kt$NotificationsManager$when (it.type) { Notification.Type.ACHIEVEMENT_PARTY_UP.type -> true Notification.Type.ACHIEVEMENT_PARTY_ON.type -> true Notification.Type.ACHIEVEMENT_BEAST_MASTER.type -> true Notification.Type.ACHIEVEMENT_MOUNT_MASTER.type -> true Notification.Type.ACHIEVEMENT_TRIAD_BINGO.type -> true Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> true Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> true Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> true Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> true Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> true Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> true Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> true Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> true Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> true Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> true Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> true Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> true Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> true Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> true Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> true Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> true Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> true Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> true Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> true Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> true Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> true Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> true Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> true Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> true Notification.Type.ACHIEVEMENT_SEEING_RED.type -> true Notification.Type.ACHIEVEMENT_RED_LETTER_DAY.type -> true Notification.Type.ACHIEVEMENT_GENERIC.type -> true Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> true Notification.Type.LOGIN_INCENTIVE.type -> true else -> false } - DuplicateCaseInWhenExpression:ShowNotificationInteractor.kt$ShowNotificationInteractor$when (notification.type) { Notification.Type.LOGIN_INCENTIVE.type -> showCheckinDialog(notification) Notification.Type.ACHIEVEMENT_PARTY_UP.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PARTY_ON.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BEAST_MASTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MOUNT_MASTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_TRIAD_BINGO.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> showAchievementDialog(notification) Notification.Type.WON_CHALLENGE.type -> showWonChallengeDialog(notification) Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_SEEING_RED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_RED_LETTER_DAY.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GENERIC.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> showAchievementDialog(notification) Notification.Type.FIRST_DROP.type -> showFirstDropDialog(notification) else -> return false } - EmptyCatchBlock:AmplitudeManager.kt$AmplitudeManager${ } + DuplicateCaseInWhenExpression:ShowNotificationInteractor.kt$ShowNotificationInteractor$when (notification.type) { Notification.Type.LOGIN_INCENTIVE.type -> showCheckinDialog(notification) Notification.Type.ACHIEVEMENT_PARTY_UP.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PARTY_ON.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BEAST_MASTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MOUNT_MASTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_TRIAD_BINGO.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> showAchievementDialog(notification) Notification.Type.WON_CHALLENGE.type -> showWonChallengeDialog(notification) Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_SEEING_RED.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_RED_LETTER_DAY.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_GENERIC.type -> showAchievementDialog(notification) Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> showAchievementDialog(notification) Notification.Type.FIRST_DROP.type -> showFirstDropDialog(notification) else -> return false } + EmptyCatchBlock:SoundFile.kt$SoundFile${ } EmptyCatchBlock:WorldStateSerialization.kt$WorldStateSerialization${ } EmptyDefaultConstructor:AuthenticationViewModel.kt$AuthenticationViewModel$() EmptyDefaultConstructor:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter$() EmptyFunctionBlock:AccountPreferenceFragment.kt$AccountPreferenceFragment${ } EmptyFunctionBlock:FallExtraGemsHabiticaPromotion.kt$FallExtraGemsHabiticaPromotion${ } EmptyFunctionBlock:GiftOneGetOneHabiticaPromotion.kt$GiftOneGetOneHabiticaPromotion${ } + EmptyFunctionBlock:HabiticaAccountDialog.kt$HabiticaAccountDialog.<no name provided>${ } EmptyFunctionBlock:HabiticaBaseApplication.kt$HabiticaBaseApplication${ } - EmptyFunctionBlock:MainActivity.kt$MainActivity.<no name provided>${ } + EmptyFunctionBlock:MainActivity.kt$MainActivity.<no name provided>${ } EmptyFunctionBlock:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository${ } EmptyFunctionBlock:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion${ } EmptyFunctionBlock:SpookyExtraGemsHabiticaPromotion.kt$SpookyExtraGemsHabiticaPromotion${ } EmptyFunctionBlock:Survey2021Promotion.kt$Survey2021Promotion${ } - EmptySecondaryConstructor:Server.kt$Server${} + ForbiddenComment:ShopItem.kt$ShopItem.Companion$// TODO: Needs a way to be translated. ForbiddenComment:ShopRecyclerAdapter.kt$ShopRecyclerAdapter$// TODO: Enable this again when we have a nicer design + ForbiddenComment:SubscriptionDetailsView.kt$SubscriptionDetailsView$// TODO: Unhide once we figured out discrepancies. FunctionParameterNaming:BaseLocalRepository.kt$BaseLocalRepository$`object`: T FunctionParameterNaming:DragLinearLayout.kt$DragLinearLayout.Companion$`val`: Float FunctionParameterNaming:FullProfileActivity.kt$FullProfileActivity$`val`: Float - LargeClass:ApiClientImpl.kt$ApiClientImpl : ConsumerApiClient - LongMethod:AvatarView.kt$AvatarView$@Suppress("ReturnCount") private fun getAvatarLayerMap(avatar: Avatar, substitutions: Map<String, Map<String, String>>): EnumMap<LayerType, String> - LongMethod:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun bind(data: Task, position: Int, displayMode: String) - LongMethod:ChallengeDetailFragment.kt$ChallengeDetailFragment$@Suppress("ReturnCount") override fun onViewCreated(view: View, savedInstanceState: Bundle?) + LargeClass:NavigationDrawerFragment.kt$NavigationDrawerFragment : DialogFragment + LargeClass:TaskFormActivity.kt$TaskFormActivity : BaseActivity + LongMethod:AppHeaderView.kt$@Composable fun AppHeaderView( user: Avatar?, teamPlan: TeamPlan? = null, teamPlanMembers: List<Member>? = null, onMemberRowClicked: () -> Unit ) + LongMethod:AvatarOverviewFragment.kt$@Composable fun AvatarOverviewView( userViewModel: MainUserViewModel, showCustomization: Boolean = true, showEquipment: Boolean = true, battleGearTwoHanded: Boolean = false, costumeTwoHanded: Boolean = false, onCustomizationTap: (String, String?) -> Unit, onAvatarEquipmentTap: (String, String?) -> Unit, onEquipmentTap: (String, String?, Boolean) -> Unit ) + LongMethod:AvatarStatsWidgetProvider.kt$AvatarStatsWidgetProvider$private fun updateData(widgetIds: IntArray? = null) + LongMethod:BaseTaskViewHolder.kt$BaseTaskViewHolder$open fun bind( data: Task, position: Int, displayMode: String, ownerID: String? ) + LongMethod:BirthdayActivity.kt$@Composable fun BirthdayActivityView( scaffoldState: ScaffoldState, isPurchasing: Boolean, hasGryphatrice: Boolean, hasEquipped: Boolean, price: String, startDate: Date, endDate: Date, onPurchaseClick: () -> Unit, onGemPurchaseClick: () -> Unit, onEquipClick: () -> Unit ) LongMethod:ChatRecyclerViewHolder.kt$ChatRecyclerMessageViewHolder$fun bind(msg: ChatMessage, uuid: String, user: User?, isExpanded: Boolean) LongMethod:ContentDeserializer.kt$ContentDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): ContentResult + LongMethod:CustomizationDeserializer.kt$CustomizationDeserializer$@Throws(JsonParseException::class) override fun deserialize( json: JsonElement, typeOfT: Type, context: JsonDeserializationContext ): List<Customization> + LongMethod:EquipmentOverviewView.kt$@Composable fun AvatarCustomizationOverviewView( preferences: Preferences?, outfit: Outfit?, onCustomizationTap: (String, String?) -> Unit, onAvatarEquipmentTap: (String, String?) -> Unit, modifier: Modifier = Modifier ) + LongMethod:GroupPlanMemberList.kt$@Composable fun MemberItem( member: Member, role: String, onMemberClicked: (String) -> Unit, modifier: Modifier = Modifier ) LongMethod:GroupSerialization.kt$GroupSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Group - LongMethod:HabitViewHolder.kt$HabitViewHolder$override fun bind(data: Task, position: Int, displayMode: String) - LongMethod:NavigationDrawerFragment.kt$NavigationDrawerFragment$@OptIn(ExperimentalTime::class) override fun onViewCreated(view: View, savedInstanceState: Bundle?) + LongMethod:HabitViewHolder.kt$HabitViewHolder$override fun bind( data: Task, position: Int, displayMode: String, ownerID: String? ) + LongMethod:ItemRecyclerAdapter.kt$ItemRecyclerAdapter.ItemViewHolder$override fun onClick(v: View) + LongMethod:LocalNotificationActionReceiver.kt$LocalNotificationActionReceiver$private fun handleLocalNotificationAction(action: String?) + LongMethod:NavigationDrawerFragment.kt$NavigationDrawerFragment$private fun initializeMenuItems() LongMethod:NavigationDrawerFragment.kt$NavigationDrawerFragment$private fun updateUser(user: User) LongMethod:NoPartyFragmentFragment.kt$NoPartyFragmentFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?) LongMethod:PetSuggestHatchDialog.kt$PetSuggestHatchDialog$fun configure( pet: Animal, egg: Egg?, potion: HatchingPotion?, eggCount: Int, potionCount: Int, hasUnlockedEgg: Boolean, hasUnlockedPotion: Boolean, hasMount: Boolean ) LongMethod:PreferencesFragment.kt$PreferencesFragment$override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) - LongMethod:PurchaseDialog.kt$PurchaseDialog$private fun buyItem(quantity: Int) + LongMethod:PreferencesFragment.kt$PreferencesFragment$override fun setUser(user: User?) LongMethod:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$override fun endAnimations() LongMethod:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$override fun runPendingAnimations() + LongMethod:SegmentedControl.kt$ @Composable fun SegmentedControl( items: List<String>, defaultSelectedItemIndex: Int = 0, useFixedWidth: Boolean = false, itemWidth: Dp = 120.dp, cornerRadius: Int = 10, onItemSelection: (selectedItemIndex: Int) -> Unit ) + LongMethod:SubscriptionDetailsView.kt$SubscriptionDetailsView$fun setPlan(plan: SubscriptionPlan) LongMethod:TaskFormActivity.kt$TaskFormActivity$override fun onCreate(savedInstanceState: Bundle?) + LongMethod:TaskSummaryActivity.kt$@Composable fun TaskSummaryView(viewModel: TaskSummaryViewModel) LongMethod:UserDeserializer.kt$UserDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): User - LongMethod:UserStatComputer.kt$UserStatComputer$fun computeClassBonus(equipmentList: List<Equipment>, user: Avatar): List<StatsRow> + LongMethod:UserStatComputer.kt$UserStatComputer$fun computeClassBonus(equipmentList: List<Equipment>?, user: Avatar): List<StatsRow> + LongParameterList:AssignedView.kt$( assigned: List<Assignable>, completedAt: Map<String, Date>, backgroundColor: Color, color: Color, onEditClick: () -> Unit, onUndoClick: (String) -> Unit, modifier: Modifier = Modifier, showEditButton: Boolean = false ) + LongParameterList:BirthdayActivity.kt$( scaffoldState: ScaffoldState, isPurchasing: Boolean, hasGryphatrice: Boolean, hasEquipped: Boolean, price: String, startDate: Date, endDate: Date, onPurchaseClick: () -> Unit, onGemPurchaseClick: () -> Unit, onEquipClick: () -> Unit ) LongParameterList:FullProfileActivity.kt$FullProfileActivity$( label: String, strVal: Float, intVal: Float, conVal: Float, perVal: Float, roundDown: Boolean, isSummary: Boolean ) - LongParameterList:HabiticaSnackbar.kt$HabiticaSnackbar.Companion$( container: ViewGroup, leftImage: Drawable, title: CharSequence?, content: CharSequence?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false ) LongParameterList:HabiticaSnackbar.kt$HabiticaSnackbar.Companion$( container: ViewGroup, leftImage: Drawable?, title: CharSequence?, content: CharSequence?, specialView: View?, rightIcon: Drawable?, rightTextColor: Int?, rightText: String?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false ) LongParameterList:HabiticaSnackbar.kt$HabiticaSnackbar.Companion$( container: ViewGroup, title: CharSequence?, content: CharSequence?, rightIcon: Drawable, rightTextColor: Int?, rightText: String, displayType: SnackbarDisplayType, isCelebratory: Boolean = false ) - LongParameterList:HabiticaSnackbar.kt$HabiticaSnackbar.Companion$( container: ViewGroup, title: CharSequence?, content: CharSequence?, specialView: View?, displayType: SnackbarDisplayType, isCelebratory: Boolean = false ) - LongParameterList:HabiticaSnackbar.kt$SnackbarActivity$( leftImage: Drawable? = null, title: CharSequence? = null, content: CharSequence? = null, specialView: View? = null, rightIcon: Drawable? = null, rightTextColor: Int? = null, rightText: String? = null, displayType: HabiticaSnackbar.SnackbarDisplayType = HabiticaSnackbar.SnackbarDisplayType.NORMAL, isCelebratory: Boolean = false ) + LongParameterList:HabiticaTheme.kt$HabiticaColors$( val windowBackground: Color, val contentBackground: Color, val contentBackgroundOffset: Color, val textPrimary: Color, val textSecondary: Color, val textTertiary: Color, val textQuad: Color, val textDimmed: Color, val tintedUiMain: Color, val tintedUiSub: Color, val tintedUiDetails: Color, val pixelArtBackground: Color ) LongParameterList:NotifyUserUseCase.kt$NotifyUserUseCase.Companion$( context: Context, xp: Double?, hp: Double?, gold: Double?, mp: Double?, questDamage: Double?, user: User? ) LongParameterList:NotifyUserUseCase.kt$NotifyUserUseCase.RequestValues$( val context: BaseActivity, val snackbarTargetView: ViewGroup, val user: User?, val xp: Double?, val hp: Double?, val gold: Double?, val mp: Double?, val questDamage: Double?, val hasLeveledUp: Boolean?, val level: Int? ) LongParameterList:PetDetailRecyclerAdapter.kt$PetDetailRecyclerAdapter.CanHatchViewHolder$( item: Pet, eggCount: Int, potionCount: Int, hasUnlockedEgg: Boolean, hasUnlockedPotion: Boolean, hasMount: Boolean, ) @@ -112,68 +130,61 @@ LongParameterList:PetViewHolder.kt$PetViewHolder$( item: Pet, trained: Int, eggCount: Int, potionCount: Int, canRaiseToMount: Boolean, ownsSaddles: Boolean, hasUnlockedEgg: Boolean, hasUnlockedPotion: Boolean, hasMount: Boolean, currentPet: String? ) LongParameterList:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion$( result: TaskDirectionData, delta: Double, stats: Stats, computedStats: Stats, task: Task, direction: TaskDirection ) LongParameterList:SocialRepository.kt$SocialRepository$( name: String?, description: String?, leader: String?, type: String?, privacy: String?, leaderCreateChallenge: Boolean? ) + LongParameterList:StatsView.kt$( statText: String, statColor: Color, levelValue: Int, equipmentValue: Int, buffValue: Int, allocatedValue: Int, canAllocate: Boolean, allocateAction: () -> Unit ) LongParameterList:UserRepositoryModule.kt$UserRepositoryModule$( localRepository: UserLocalRepository, apiClient: ApiClient, @Named(AppModule.NAMED_USER_ID) userId: String, taskRepository: TaskRepository, appConfigManager: AppConfigManager, analyticsManager: AnalyticsManager ) + LoopWithTooManyJumpStatements:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter$for (customization in newCustomizationList) { val isOwned = ownedCustomizations.contains(customization.id) val isUsable = customization.isUsable(isOwned) if (customization.availableFrom != null || customization.availableUntil != null) { if (( ( customization.availableFrom?.compareTo(today) ?: 0 ) > 0 || ( customization.availableUntil?.compareTo(today) ?: 0 ) < 0 ) && !isUsable ) { continue } } if (customization.identifier?.contains("birthday_bash") == true && !isOwned) { continue } if (customization.customizationSet != null && customization.customizationSet != lastSet.identifier) { if (lastSet.hasPurchasable && lastSet.price > 0) { customizationList.add(lastSet) } val set = CustomizationSet() set.identifier = customization.customizationSet set.text = customization.customizationSetName set.price = customization.setPrice ?: 0 set.hasPurchasable = true lastSet = set customizationList.add(set) } customizationList.add(customization) lastSet.customizations.add(customization) if (isUsable && lastSet.hasPurchasable) { lastSet.ownedCustomizations.add(customization) if (!lastSet.isSetDeal()) { lastSet.hasPurchasable = false } } } MatchingDeclarationName:Date-Extensions.kt$DateUtils - MemberNameEqualsClassName:KeyHelper.kt$KeyHelper.Companion$private var keyHelper: KeyHelper? = null - MemberNameEqualsClassName:Status.kt$Status$var status: String? = null - NestedBlockDepth:AvatarView.kt$AvatarView$private fun getLayerBounds(layerType: LayerType, layerName: String, drawable: Drawable): Rect - NestedBlockDepth:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun bind(data: Task, position: Int, displayMode: String) + MatchingDeclarationName:TaskFormSelector.kt$LabeledValue<V> NestedBlockDepth:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun onTouch(view: View?, motionEvent: MotionEvent?): Boolean NestedBlockDepth:ChallengeDeserializer.kt$ChallengeDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Challenge NestedBlockDepth:ChecklistedViewHolder.kt$ChecklistedViewHolder$private fun updateChecklistDisplay() - NestedBlockDepth:CustomizationDeserializer.kt$CustomizationDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): List<Customization> + NestedBlockDepth:CustomizationDeserializer.kt$CustomizationDeserializer$@Throws(JsonParseException::class) override fun deserialize( json: JsonElement, typeOfT: Type, context: JsonDeserializationContext ): List<Customization> + NestedBlockDepth:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter.CustomizationViewHolder$override fun onClick(v: View) NestedBlockDepth:GroupSerialization.kt$GroupSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Group - NestedBlockDepth:GuildDetailFragment.kt$GuildDetailFragment$private fun getGroupChallenges(): List<Challenge> - NestedBlockDepth:InsufficientGemsDialog.kt$InsufficientGemsDialog$override fun onAttachedToWindow() NestedBlockDepth:ItemRecyclerAdapter.kt$ItemRecyclerAdapter.ItemViewHolder$override fun onClick(v: View) NestedBlockDepth:MemberSerialization.kt$MemberSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Member NestedBlockDepth:NavigationDrawerFragment.kt$NavigationDrawerFragment$private fun updateUser(user: User) - NestedBlockDepth:PartyDetailFragment.kt$PartyDetailFragment$private fun getGroupChallenges(): List<Challenge> NestedBlockDepth:PartyDetailFragment.kt$PartyDetailFragment$private fun updateUser(user: User?) + NestedBlockDepth:PreferencesFragment.kt$PreferencesFragment$override fun onPreferenceTreeClick(preference: Preference): Boolean NestedBlockDepth:PurchaseDialog.kt$PurchaseDialog$private fun onBuyButtonClicked() - NestedBlockDepth:QuestDetailFragment.kt$QuestDetailFragment$private fun setQuestParticipants(participants: List<Member>?) - NestedBlockDepth:QuestDropItemsListSerialization.kt$QuestDropItemsListSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): RealmList<QuestDropItem> + NestedBlockDepth:PurchaseDialog.kt$PurchaseDialog$private suspend fun remainingPurchaseQuantity(onResult: (Int) -> Unit) + NestedBlockDepth:PurchaseHandler.kt$PurchaseHandler$private fun processPurchases(result: BillingResult, purchases: List<Purchase>) + NestedBlockDepth:QuestDetailFragment.kt$QuestDetailFragment$private fun setQuestParticipants(participants: List<Member>?) + NestedBlockDepth:QuestDropItemsListSerialization.kt$QuestDropItemsListSerialization$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): RealmList<QuestDropItem> NestedBlockDepth:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$override fun endAnimation(item: RecyclerView.ViewHolder) NestedBlockDepth:ShopRecyclerAdapter.kt$ShopRecyclerAdapter$@Suppress("ReturnCount") override fun onBindViewHolder( holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int ) - NestedBlockDepth:Task.kt$Task$fun getDaysOfMonth(): List<Int>? - NestedBlockDepth:Task.kt$Task$fun getWeeksOfMonth(): List<Int>? + NestedBlockDepth:Task.kt$Task$fun getDaysOfMonth(): List<Int>? + NestedBlockDepth:Task.kt$Task$fun getWeeksOfMonth(): List<Int>? + NestedBlockDepth:TaskFormActivity.kt$TaskFormActivity$private fun saveTask() NestedBlockDepth:TaskListDeserializer.kt$TaskListDeserializer$override fun deserialize(json: JsonElement, typeOfT: Type, ctx: JsonDeserializationContext): TaskList - NestedBlockDepth:TaskListDeserializer.kt$TaskListDeserializer$private fun handleTags( databaseTags: List<Tag>, json: JsonArray?, context: JsonDeserializationContext ): RealmList<Tag> - NestedBlockDepth:TaskTagDeserializer.kt$TaskTagDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): List<Tag> - NestedBlockDepth:TasksViewModel.kt$TasksViewModel$fun createQuery(unfilteredData: OrderedRealmCollection<Task>): RealmQuery<Task>? + NestedBlockDepth:TaskListDeserializer.kt$TaskListDeserializer$private fun handleTags( databaseTags: List<Tag>, json: JsonArray?, context: JsonDeserializationContext ): RealmList<Tag> + NestedBlockDepth:TaskTagDeserializer.kt$TaskTagDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): List<Tag> + NestedBlockDepth:TasksViewModel.kt$TasksViewModel$fun createQuery(unfilteredData: OrderedRealmCollection<Task>): RealmQuery<Task>? NestedBlockDepth:UserDeserializer.kt$UserDeserializer$@Throws(JsonParseException::class) override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): User NestedBlockDepth:WorldStateSerialization.kt$WorldStateSerialization$override fun deserialize( json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext? ): WorldState - ProtectedMemberInFinalClass:InboxViewModel.kt$InboxViewModel$protected var memberIDSubject = BehaviorSubject.create<Optional<String>>() - ReturnCount:AccountPreferenceFragment.kt$AccountPreferenceFragment$override fun onPreferenceTreeClick(preference: Preference): Boolean - ReturnCount:ApiClientImpl.kt$ApiClientImpl$override fun accept(throwable: Throwable) - ReturnCount:AppConfigManager.kt$AppConfigManager$fun activePromo(): HabiticaPromotion? ReturnCount:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun onTouch(view: View?, motionEvent: MotionEvent?): Boolean ReturnCount:Customization.kt$Customization$fun getImageName(userSize: String?, hairColor: String?): String ReturnCount:DragLinearLayout.kt$DragLinearLayout$override fun onInterceptTouchEvent(event: MotionEvent): Boolean ReturnCount:DragLinearLayout.kt$DragLinearLayout$override fun onTouchEvent(event: MotionEvent): Boolean - ReturnCount:PetDetailRecyclerAdapter.kt$PetDetailRecyclerAdapter$private fun canRaiseToMount(pet: Pet): Boolean - ReturnCount:PreferencesFragment.kt$PreferencesFragment$override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) - ReturnCount:RealmBaseLocalRepository.kt$RealmBaseLocalRepository$override fun <T : BaseObject> getLiveObject(obj: T): T? - ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun feedPet(foodKey: String, petKey: String, feedValue: Int, userID: String) - ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun getLiveObject(obj: OwnedItem): OwnedItem? - ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun hatchPet(eggKey: String, potionKey: String, userID: String) - ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun unhatchPet(eggKey: String, potionKey: String, userID: String) - ReturnCount:StableRecyclerAdapter.kt$StableRecyclerAdapter$private fun canRaiseToMount(pet: Pet): Boolean + ReturnCount:RealmBaseLocalRepository.kt$RealmBaseLocalRepository$override fun <T : BaseObject> getLiveObject(obj: T): T? ReturnCount:Task.kt$Task$fun isBeingEdited(task: Task): Boolean ThrowingExceptionsWithoutMessageOrCause:EllipsisTextView.kt$EllipsisTextView$NullPointerException() + TooGenericExceptionCaught:ApiClientImpl.kt$ApiClientImpl$throwable: Throwable TooGenericExceptionCaught:AuthenticationViewModel.kt$AuthenticationViewModel$e: Exception TooGenericExceptionCaught:CustomizationDeserializer.kt$CustomizationDeserializer$e: Exception - TooGenericExceptionCaught:KeyHelper.kt$KeyHelper$e: Exception + TooGenericExceptionCaught:LoginActivity.kt$LoginActivity$e: Exception TooGenericExceptionCaught:MainActivityViewModel.kt$MainActivityViewModel$e: Exception TooGenericExceptionCaught:MainNavigationController.kt$MainNavigationController$error: Exception + TooGenericExceptionCaught:PurchaseHandler.kt$PurchaseHandler$throwable: Throwable TooGenericExceptionCaught:SectionViewHolder.kt$SectionViewHolder$e: Exception TooGenericExceptionCaught:SetupCustomizationRepositoryImpl.kt$SetupCustomizationRepositoryImpl$e: Exception TooGenericExceptionCaught:SoundFile.kt$SoundFile$e: Exception + TooGenericExceptionCaught:TaskAlarmManager.kt$TaskAlarmManager.Companion$ex: Exception TooGenericExceptionCaught:TaskListDeserializer.kt$TaskListDeserializer$e: RuntimeException TooGenericExceptionCaught:TaskTagDeserializer.kt$TaskTagDeserializer$e: RuntimeException TooGenericExceptionCaught:WorldStateSerialization.kt$WorldStateSerialization$e: Exception TooManyFunctions:ApiClient.kt$ApiClient - TooManyFunctions:ApiClientImpl.kt$ApiClientImpl : ConsumerApiClient + TooManyFunctions:ApiClientImpl.kt$ApiClientImpl : ApiClient TooManyFunctions:ApiService.kt$ApiService TooManyFunctions:InventoryRepository.kt$InventoryRepository : BaseRepository TooManyFunctions:InventoryRepositoryImpl.kt$InventoryRepositoryImpl : BaseRepositoryImplInventoryRepository @@ -182,24 +193,23 @@ TooManyFunctions:UserRepository.kt$UserRepository : BaseRepository TooManyFunctions:UserRepositoryImpl.kt$UserRepositoryImpl : BaseRepositoryImplUserRepository UnnecessaryAbstractClass:HabiticaLocalNotification.kt$HabiticaLocalNotification - UnusedPrivateMember:AppTestingLevel.kt$AppTestingLevel$identifier: String + UnusedPrivateMember:ApiClientImpl.kt$ApiClientImpl$private fun hideConnectionProblemDialog() UnusedPrivateMember:BaseTasksRecyclerViewAdapter.kt$BaseTasksRecyclerViewAdapter$private fun updateTask(task: Task) UnusedPrivateMember:BaseTasksRecyclerViewAdapter.kt$BaseTasksRecyclerViewAdapter$private val userID: String? + UnusedPrivateMember:BirthdayMenuView.kt$value: Int UnusedPrivateMember:DragLinearLayout.kt$DragLinearLayout.Companion$`val`: Float - UnusedPrivateMember:EquipmentOverviewViewModel.kt$EquipmentOverviewViewModel$savedStateHandle: SavedStateHandle UnusedPrivateMember:FullProfileActivity.kt$FullProfileActivity$`val`: Float UnusedPrivateMember:GroupFormActivity.kt$GroupFormActivity$private var autocompleteAdapter: AutocompleteAdapter? = null UnusedPrivateMember:GuildFragment.kt$GuildFragment$group: Group? - UnusedPrivateMember:LoginActivity.kt$LoginActivity$user: User UnusedPrivateMember:NotificationOpenHandler.kt$NotificationOpenHandler.Companion$private fun openQuestDetailSCreen() - UnusedPrivateMember:PurchaseDialog.kt$PurchaseDialog$val sub = maybe.flatMap { for (thisItem in it) { if (thisItem.key == item.key) { ownedCount += thisItem.numberOwned } } inventoryRepository.getOwnedMounts().firstElement() }.flatMap { for (mount in it) { if (mount.key?.contains(item.key) == true) { ownedCount += if (mount.owned) 1 else 0 } } inventoryRepository.getOwnedPets().firstElement() }.subscribe( { for (pet in it) { if (pet.key?.contains(item.key) == true) { ownedCount += if (pet.trained > 0) 1 else 0 } } if (calledResult) return@subscribe calledResult = true if (!shouldWarn) { onResult(-1) return@subscribe } val remaining = totalCount - ownedCount onResult(max(0, remaining)) }, ExceptionHandler.rx(), { if (calledResult) return@subscribe calledResult = true if (!shouldWarn) { onResult(-1) return@subscribe } val remaining = totalCount - ownedCount onResult(max(0, remaining)) } ) - UnusedPrivateMember:PurchaseDialog.kt$PurchaseDialog$val subscription = observable .doOnNext { val text = if (snackbarText[0].isNotEmpty()) { snackbarText[0] } else { context.getString(R.string.successful_purchase, shopItem.text) } val rightTextColor = when (item.currency) { "gold" -> ContextCompat.getColor(context, R.color.text_yellow) "gems" -> ContextCompat.getColor(context, R.color.text_green) "hourglasses" -> ContextCompat.getColor(context, R.color.text_brand) else -> 0 } ((application?.currentActivity?.get() ?: getActivity() ?: ownerActivity) as? SnackbarActivity)?.showSnackbar( content = text, rightIcon = priceLabel.compoundDrawables[0], rightTextColor = rightTextColor, rightText = "-" + priceLabel.text ) } .flatMap { userRepository.retrieveUser(withTasks = false, forced = true) } .flatMap { inventoryRepository.retrieveInAppRewards() } .subscribe({ if (item.isTypeGear || item.currency == "hourglasses") { onGearPurchased?.invoke(item) } }) { throwable -> if (throwable.javaClass.isAssignableFrom(retrofit2.HttpException::class.java)) { val error = throwable as retrofit2.HttpException if (error.code() == 401 && shopItem.currency == "gems") { MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false))) } } } UnusedPrivateMember:PurchaseHandler.kt$PurchaseHandler$purchase: Purchase UnusedPrivateMember:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion$direction: TaskDirection UnusedPrivateMember:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion$task: Task UnusedPrivateMember:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion$user: User + UnusedPrivateMember:StableFragment.kt$StableFragment$private val viewModel: StableViewModel by viewModels() UnusedPrivateMember:SubscriptionFragment.kt$SubscriptionFragment.Companion$iSG1G1: Boolean UnusedPrivateMember:TaskAlarmManager.kt$TaskAlarmManager$private fun removeAlarmsForTask(task: Task) + UnusedPrivateMember:UserRepositoryImpl.kt$UserRepositoryImpl$private val analyticsManager: AnalyticsManager UnusedPrivateMember:UserRepositoryModule.kt$UserRepositoryModule$context: Context? UtilityClassWithPublicConstructor:AprilFoolsHandler.kt$AprilFoolsHandler UtilityClassWithPublicConstructor:Date-Extensions.kt$DateUtils @@ -207,14 +217,10 @@ UtilityClassWithPublicConstructor:KeyboardUtil.kt$KeyboardUtil UtilityClassWithPublicConstructor:NotificationOpenHandler.kt$NotificationOpenHandler UtilityClassWithPublicConstructor:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor - VariableNaming:Buffs.kt$Buffs$@SerializedName("int") var _int: Float? = null VariableNaming:Equipment.kt$Equipment$@SerializedName("int") var _int: Int = 0 VariableNaming:InboxAdapter.kt$InboxAdapter$private val FIRST_MESSAGE = 0 VariableNaming:InboxAdapter.kt$InboxAdapter$private val NORMAL_MESSAGE = 1 VariableNaming:Quest.kt$Quest$var RSVPNeeded: Boolean = false - VariableNaming:TaskDirectionData.kt$TaskDirectionData$var _tmp: TaskDirectionDataTemp? = null VariableNaming:Training.kt$Training$@SerializedName("int") var _int: Float = 0f - VariableNaming:UserAuthSocialTokens.kt$UserAuthSocialTokens$var access_token: String? = null - VariableNaming:UserAuthSocialTokens.kt$UserAuthSocialTokens$var client_id: String? = null diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index bcfc36ed5..a6b41766a 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -7,7 +7,7 @@ plugins { kotlin { android() - + listOf( iosX64(), iosArm64(), @@ -22,7 +22,6 @@ kotlin { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") - implementation("io.realm.kotlin:library-base:1.5.0") } } val commonTest by getting { @@ -67,4 +66,4 @@ android { } namespace = "com.habitrpg.shared.habitica" -} \ No newline at end of file +} diff --git a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.kt b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.kt index 6286cbbd1..a0fa0a379 100644 --- a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.kt +++ b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/Platform.kt @@ -8,4 +8,4 @@ actual class Platform actual constructor() { } actual typealias HParcelable = Parcelable -actual typealias HParcelize = Parcelize \ No newline at end of file +actual typealias HParcelize = Parcelize diff --git a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt index fa2589ee1..6371a57d8 100644 --- a/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt +++ b/shared/src/androidMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt @@ -25,4 +25,4 @@ actual class PlatformLogger actual constructor() { actual fun logError(tag: String, message: String, exception: Throwable) { Log.e(tag, message, exception) } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt index 86399b6d4..b6e26bc78 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/Platform.kt @@ -10,4 +10,4 @@ expect interface HParcelable @OptionalExpectation @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) -expect annotation class HParcelize() \ No newline at end of file +expect annotation class HParcelize() diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/Avatar.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/Avatar.kt index 166dfd11f..deb23816c 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/Avatar.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/Avatar.kt @@ -1,6 +1,5 @@ package com.habitrpg.shared.habitica.models - interface Avatar { val id: String? val balance: Double @@ -28,10 +27,10 @@ interface Avatar { val hasClass: Boolean get() { - return preferences?.disableClasses != true - && flags?.classSelected != false - && stats?.habitClass?.isNotEmpty() == true - && (stats?.lvl ?: 0) >= 10 + return preferences?.disableClasses != true && + flags?.classSelected != false && + stats?.habitClass?.isNotEmpty() == true && + (stats?.lvl ?: 0) >= 10 } val currentMount: String? @@ -41,4 +40,4 @@ interface Avatar { val sleep: Boolean get() = preferences?.sleep ?: false -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarFlags.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarFlags.kt index 4b07f706c..dbceb88fe 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarFlags.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarFlags.kt @@ -2,4 +2,4 @@ package com.habitrpg.shared.habitica.models interface AvatarFlags { var classSelected: Boolean -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarOutfit.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarOutfit.kt index 86866c332..15e79ea70 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarOutfit.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarOutfit.kt @@ -10,7 +10,6 @@ interface AvatarOutfit { var eyeWear: String var headAccessory: String - fun isAvailable(outfit: String): Boolean { return outfit.isNotBlank() && !outfit.endsWith("base_0") } diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarPreferences.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarPreferences.kt index 5c771e511..92fd42d76 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarPreferences.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/AvatarPreferences.kt @@ -10,4 +10,4 @@ interface AvatarPreferences { val background: String? val chair: String? val disableClasses: Boolean -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/MaintenanceResponse.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/MaintenanceResponse.kt index 76e54c859..133ef8da3 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/MaintenanceResponse.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/MaintenanceResponse.kt @@ -6,4 +6,4 @@ class MaintenanceResponse { var title: String? = null var imageUrl: String? = null var description: String? = null -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt index 3e9e78700..40d457109 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskDirectionDataTemp.kt @@ -21,4 +21,4 @@ data class TaskDirectionDataDrop( var key: String?, var type: String?, var dialog: String?, -): HParcelable +) : HParcelable diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt index 2cb2953b0..ee9aa8f9b 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/responses/TaskScoringResult.kt @@ -5,7 +5,8 @@ import com.habitrpg.shared.habitica.HParcelize import com.habitrpg.shared.habitica.models.AvatarStats @HParcelize -data class TaskScoringResult(var hasDied: Boolean = false, +data class TaskScoringResult( + var hasDied: Boolean = false, var drop: TaskDirectionDataDrop? = null, var experienceDelta: Double = 0.0, var healthDelta: Double = 0.0, @@ -14,7 +15,8 @@ data class TaskScoringResult(var hasDied: Boolean = false, var hasLeveledUp: Boolean = false, var level: Int = 0, var questDamage: Double? = null, - var questItemsFound: Int? = null): HParcelable { + var questItemsFound: Int? = null +) : HParcelable { constructor(data: TaskDirectionData, stats: AvatarStats?) : this( data.hp <= 0.0, diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/BaseTask.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/BaseTask.kt index 54c163687..ed63c2205 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/BaseTask.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/BaseTask.kt @@ -11,7 +11,6 @@ interface BaseTask { val isDisplayedActive: Boolean get() = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO) && !completed - } val BaseTask.streakString: String? @@ -27,4 +26,4 @@ val BaseTask.streakString: String? } else { null } - } \ No newline at end of file + } diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/HabitResetOption.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/HabitResetOption.kt index 1c29d539e..cf29f920f 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/HabitResetOption.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/HabitResetOption.kt @@ -8,4 +8,4 @@ enum class HabitResetOption(val value: Frequency) { companion object { fun from(type: Frequency?): HabitResetOption? = values().find { it.value == type } } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TaskDifficulty.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TaskDifficulty.kt index 5f650cafc..9f10fc91b 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TaskDifficulty.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TaskDifficulty.kt @@ -8,7 +8,7 @@ enum class TaskDifficulty(val value: Float) { companion object { fun valueOf(float: Float): TaskDifficulty { - return when(float) { + return when (float) { 0.1f -> TRIVIAL 1.0f -> EASY 1.5f -> MEDIUM @@ -17,4 +17,4 @@ enum class TaskDifficulty(val value: Float) { } } } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TasksOrder.kt b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TasksOrder.kt index cc849577e..63ba6aa56 100644 --- a/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TasksOrder.kt +++ b/shared/src/commonMain/kotlin/com/habitrpg/shared/habitica/models/tasks/TasksOrder.kt @@ -14,4 +14,4 @@ class TasksOrder { var dailys: List = listOf() var todos: List = listOf() var rewards: List = listOf() -} \ No newline at end of file +} diff --git a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.kt b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.kt index 9b064c1f4..169502ed6 100644 --- a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.kt +++ b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/Platform.kt @@ -6,4 +6,4 @@ actual class Platform actual constructor() { actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion } -actual interface HParcelable {} \ No newline at end of file +actual interface HParcelable diff --git a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt index e30cc6c03..ea5515487 100644 --- a/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt +++ b/shared/src/iosMain/kotlin/com/habitrpg/shared/habitica/PlatformLogger.kt @@ -23,4 +23,4 @@ actual class PlatformLogger { actual fun logError(tag: String, message: String, exception: Throwable) { println("[🔴] $tag: $message\n${exception.getStackTrace().joinToString("\n")}") } -} \ No newline at end of file +} diff --git a/version.properties b/version.properties index d04ad59da..4fbbbb4de 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ NAME=4.1.5 -CODE=5281 \ No newline at end of file +CODE=5291 \ No newline at end of file diff --git a/wearos/build.gradle b/wearos/build.gradle index 003352289..19cdc29d2 100644 --- a/wearos/build.gradle +++ b/wearos/build.gradle @@ -125,7 +125,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" implementation "androidx.preference:preference-ktx:$preferences_version" - implementation "androidx.navigation:navigation-fragment-ktx:2.5.2" + implementation "androidx.navigation:navigation-fragment-ktx:2.5.3" implementation "com.google.android.gms:play-services-auth:$play_auth_version" diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt index 1ea028d7e..6ef2090ac 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt @@ -41,17 +41,17 @@ class MainApplication : Application() { MainScope().launch { userRepository.getUser() .onEach { - if (it.isDead && BaseActivity.currentActivityClassName == MainActivity::class.java.name) { - val intent = Intent(this@MainApplication, FaintActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - startActivity(intent) - } else if (it.needsCron && BaseActivity.currentActivityClassName != RYAActivity::class.java.name && BaseActivity.currentActivityClassName != LoginActivity::class.java.name) { - val intent = Intent(this@MainApplication, RYAActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - startActivity(intent) - } + if (it.isDead && BaseActivity.currentActivityClassName == MainActivity::class.java.name) { + val intent = Intent(this@MainApplication, FaintActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + startActivity(intent) + } else if (it.needsCron && BaseActivity.currentActivityClassName != RYAActivity::class.java.name && BaseActivity.currentActivityClassName != LoginActivity::class.java.name) { + val intent = Intent(this@MainApplication, RYAActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + startActivity(intent) + } delay(1.toDuration(DurationUnit.SECONDS)) - }.collect() + }.collect() } logLaunch() @@ -73,4 +73,4 @@ class MainApplication : Application() { FirebaseAnalytics.getInstance(this).setUserProperty("app_testing_level", BuildConfig.TESTING_LEVEL) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt index 0441a0101..56d03f0ae 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt @@ -36,7 +36,7 @@ class ApiClient @Inject constructor( private val context: Context ) { val userID: String - get() = hostConfig.userID + get() = hostConfig.userID private lateinit var retrofitAdapter: Retrofit // I think we don't need the ApiClientImpl anymore we could just use ApiService @@ -104,10 +104,12 @@ class ApiClient @Inject constructor( cacheControl.noCache() .noStore() } - val response = chain.proceed(request.newBuilder().header( - "Cache-Control", - cacheControl.build().toString() - ).build()) + val response = chain.proceed( + request.newBuilder().header( + "Cache-Control", + cacheControl.build().toString() + ).build() + ) val responseBuilder = response.newBuilder() responseBuilder.header("was-cached", (response.networkResponse == null).toString()) if (request.method == "GET") { @@ -115,9 +117,11 @@ class ApiClient @Inject constructor( if (response.code == 504 || (userID != null && userID != hostConfig.userID)) { // Cache miss. Network might be down, but retry call without cache to be sure. response.close() - chain.proceed(request.newBuilder() - .header("Cache-Control", "no-cache") - .build()) + chain.proceed( + request.newBuilder() + .header("Cache-Control", "no-cache") + .build() + ) } else { responseBuilder .header("Cache-Control", request.header("Cache-Control") ?: "") @@ -170,7 +174,7 @@ class ApiClient @Inject constructor( private val adapter: JsonAdapter? = Moshi.Builder() .addLast(KotlinJsonAdapterFactory()).build().adapter(ErrorResponse::class.java).lenient() - private suspend fun process(call: suspend () -> Response>): NetworkResult { + private suspend fun process(call: suspend () -> Response>): NetworkResult { val response: Response> = call.invoke() val wasCached = response.headers()["was-cached"] == "true" @@ -185,7 +189,6 @@ class ApiClient @Inject constructor( throw(java.lang.Exception(errorResponse?.message)) } throw(java.lang.Exception(response.message())) - } } else { val body = response.body() @@ -216,13 +219,13 @@ class ApiClient @Inject constructor( suspend fun runCron() = process { apiService.runCron() } suspend fun getTasks(forced: Boolean = false) = if (forced) { - process { apiService.getTasksForced() } - } else { - process { apiService.getTasks() } - } + process { apiService.getTasksForced() } + } else { + process { apiService.getTasks() } + } suspend fun scoreTask(id: String, direction: String) = process { apiService.scoreTask(id, direction) } suspend fun createTask(task: Task) = process { apiService.createTask(task) } fun hasAuthentication() = hostConfig.hasAuthentication() -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt index a387a5228..3b7048868 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiService.kt @@ -102,4 +102,4 @@ interface ApiService { @POST("cron") suspend fun runCron(): Response> -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt index f27a3f945..432dc192b 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt @@ -101,10 +101,14 @@ class TaskLocalRepository @Inject constructor() { fun getActiveTaskCounts() = taskCountHelperValue.map { mapOf( TaskType.HABIT.value to (tasks[TaskType.HABIT]?.value?.size ?: 0), - TaskType.DAILY.value to (tasks[TaskType.DAILY]?.value?.filter { it.isDue == true && !it.completed }?.size - ?: 0), - TaskType.TODO.value to (tasks[TaskType.TODO]?.value?.filter { !it.completed }?.size - ?: 0), + TaskType.DAILY.value to ( + tasks[TaskType.DAILY]?.value?.filter { it.isDue == true && !it.completed }?.size + ?: 0 + ), + TaskType.TODO.value to ( + tasks[TaskType.TODO]?.value?.filter { !it.completed }?.size + ?: 0 + ), TaskType.REWARD.value to (tasks[TaskType.REWARD]?.value?.size ?: 0), ) } @@ -115,4 +119,4 @@ class TaskLocalRepository @Inject constructor() { } taskCountHelperValue.value = 0 } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt index 5dcb394b6..8f2022036 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt @@ -79,4 +79,4 @@ class TaskRepository @Inject constructor( fun getTaskCounts() = localRepository.getTaskCounts() fun getActiveTaskCounts() = localRepository.getActiveTaskCounts() fun clearData() = localRepository.clearData() -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserLocalRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserLocalRepository.kt index 20c2dd4a5..ef51b168e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserLocalRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserLocalRepository.kt @@ -19,4 +19,4 @@ class UserLocalRepository @Inject constructor() { fun clearData() { user.value = null } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt index af55d09db..3bb2366a0 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt @@ -10,7 +10,7 @@ class UserRepository @Inject constructor( private val localRepository: UserLocalRepository ) { val userID: String - get() = apiClient.userID + get() = apiClient.userID val hasAuthentication: Boolean get() = apiClient.hasAuthentication() @@ -43,4 +43,4 @@ class UserRepository @Inject constructor( fun clearData() { localRepository.clearData() } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/extensions/ViewExt.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/extensions/ViewExt.kt index 124990d2e..34d4d9e64 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/extensions/ViewExt.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/extensions/ViewExt.kt @@ -11,5 +11,3 @@ inline fun View.waitForLayout(crossinline f: View.() -> Unit) = with(viewTreeObs } }) } - - diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/AppStateManager.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/AppStateManager.kt index 38ea8c547..5509df343 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/AppStateManager.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/AppStateManager.kt @@ -19,4 +19,4 @@ class AppStateManager @Inject constructor() { fun endLoading() { _isLoading.value = false } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/DisplayedError.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/DisplayedError.kt index a60b2174e..269ba8ec0 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/DisplayedError.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/DisplayedError.kt @@ -1,3 +1,3 @@ package com.habitrpg.wearos.habitica.models -data class DisplayedError(val icon: Int, val title: String, val subtitle: String? = null) \ No newline at end of file +data class DisplayedError(val icon: Int, val title: String, val subtitle: String? = null) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/Result.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/NetworkResult.kt similarity index 77% rename from wearos/src/main/java/com/habitrpg/wearos/habitica/models/Result.kt rename to wearos/src/main/java/com/habitrpg/wearos/habitica/models/NetworkResult.kt index a21ed6f23..008d2ba74 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/Result.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/NetworkResult.kt @@ -2,13 +2,13 @@ package com.habitrpg.wearos.habitica.models sealed class NetworkResult { val isResponseFresh: Boolean - get() = if (this is Success) { - this.isFresh - } else if (this is Error) { - this.isFresh - } else { - false - } + get() = if (this is Success) { + this.isFresh + } else if (this is Error) { + this.isFresh + } else { + false + } val responseData: T? get() { return if (this is Success) { @@ -25,4 +25,4 @@ sealed class NetworkResult { data class Success(val data: T, val isFresh: Boolean) : NetworkResult() data class Error(val exception: Exception, val isFresh: Boolean) : NetworkResult() -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/WearableHabitResponse.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/WearableHabitResponse.kt index 54302c16e..e8340257f 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/WearableHabitResponse.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/WearableHabitResponse.kt @@ -5,4 +5,4 @@ class WearableHabitResponse { var success: Boolean = false var message: String? = null val isFresh: Boolean = true -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt index f719ed850..37f038c5b 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/BulkTaskScoringData.kt @@ -7,18 +7,18 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) class BulkTaskScoringData { - @Json(name="con") + @Json(name = "con") var constitution: Int? = null - @Json(name="str") + @Json(name = "str") var strength: Int? = null - @Json(name="per") + @Json(name = "per") var per: Int? = null - @Json(name="int") + @Json(name = "int") var intelligence: Int? = null var buffs: Buffs? = null var points: Int? = null var lvl: Int? = null - @Json(name="class") + @Json(name = "class") var habitClass: String? = null var gp: Double? = null var exp: Double? = null diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Days.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Days.kt index 298db1b2e..092affcb2 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Days.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Days.kt @@ -5,7 +5,7 @@ import android.os.Parcelable import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -open class Days(): Parcelable { +open class Days() : Parcelable { var m: Boolean = true var t: Boolean = true var w: Boolean = true @@ -47,4 +47,4 @@ open class Days(): Parcelable { return arrayOfNulls(size) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt index b0e2c8180..10aeb1c7b 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt @@ -15,9 +15,9 @@ import org.json.JSONException import java.util.Date @JsonClass(generateAdapter = true) -open class Task constructor(): Parcelable, BaseTask { +open class Task constructor() : Parcelable, BaseTask { - @Json(name="_id") + @Json(name = "_id") var id: String? = null var userId: String = "" var priority: Float = 0.0f @@ -52,7 +52,7 @@ open class Task constructor(): Parcelable, BaseTask { var startDate: Date? = null var repeat: Days? = null // todos - @Json(name="date") + @Json(name = "date") var dueDate: Date? = null @Json(ignore = true) @@ -212,8 +212,7 @@ open class Task constructor(): Parcelable, BaseTask { dest.writeInt(this.counterDown ?: 0) } - - protected constructor(`in`: Parcel): this() { + protected constructor(`in`: Parcel) : this() { this.userId = `in`.readString() ?: "" this.priority = `in`.readValue(Float::class.java.classLoader) as? Float ?: 0f this.text = `in`.readString() ?: "" diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/TaskList.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/TaskList.kt index 1b951db19..6aa3c1579 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/TaskList.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/TaskList.kt @@ -17,4 +17,4 @@ class WrappedTasklistAdapter { fun toJson(value: TaskList): List { return value.tasks.values.toList() } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Buffs.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Buffs.kt index 22372b158..60379811d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Buffs.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Buffs.kt @@ -4,7 +4,7 @@ import com.habitrpg.shared.habitica.models.AvatarBuffs import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Buffs: AvatarBuffs { +class Buffs : AvatarBuffs { override var con: Float? = null override var str: Float? = null override var per: Float? = null @@ -14,4 +14,4 @@ class Buffs: AvatarBuffs { override var shinySeed: Boolean? = null override var snowball: Boolean? = null override var streaks: Boolean? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Flags.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Flags.kt index ef2d52e14..84bb6e0c5 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Flags.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Flags.kt @@ -4,6 +4,6 @@ import com.habitrpg.shared.habitica.models.AvatarFlags import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Flags: AvatarFlags { +class Flags : AvatarFlags { override var classSelected: Boolean = false -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Gear.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Gear.kt index 16491ddee..7c6f6ce89 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Gear.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Gear.kt @@ -4,7 +4,7 @@ import com.habitrpg.shared.habitica.models.AvatarGear import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -open class Gear: AvatarGear { +open class Gear : AvatarGear { override var equipped: Outfit? = null override var costume: Outfit? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Hair.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Hair.kt index 6bd42a5a8..6631fbe82 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Hair.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Hair.kt @@ -4,11 +4,11 @@ import com.habitrpg.shared.habitica.models.AvatarHair import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Hair: AvatarHair { +class Hair : AvatarHair { override var mustache: Int = 0 override var beard: Int = 0 override var bangs: Int = 0 override var base: Int = 0 override var flower: Int = 0 override var color: String? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Items.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Items.kt index 600b64b71..99797f53e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Items.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Items.kt @@ -4,9 +4,9 @@ import com.habitrpg.shared.habitica.models.AvatarItems import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Items: AvatarItems { +class Items : AvatarItems { override var gear: Gear? = null override var currentMount: String? = null override var currentPet: String? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/MenuItem.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/MenuItem.kt index 72c8abddc..f09a35979 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/MenuItem.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/MenuItem.kt @@ -12,4 +12,4 @@ data class MenuItem( val isHidden: Boolean = false, var detailText: String? = null, val onClick: () -> Unit -) \ No newline at end of file +) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt index d6f6d57b2..889ebc7ad 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Outfit.kt @@ -5,7 +5,7 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Outfit: AvatarOutfit { +class Outfit : AvatarOutfit { override var armor: String = "" override var back: String = "" override var body: String = "" @@ -14,4 +14,4 @@ class Outfit: AvatarOutfit { override var weapon: String = "" @Json(name = "eyewear") override var eyeWear: String = "" override var headAccessory: String = "" -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Preferences.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Preferences.kt index 1368a6aa9..15dff2bbd 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Preferences.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Preferences.kt @@ -4,7 +4,7 @@ import com.habitrpg.shared.habitica.models.AvatarPreferences import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Preferences: AvatarPreferences { +class Preferences : AvatarPreferences { override var hair: Hair? = null override var costume: Boolean = false override var sleep: Boolean = false @@ -14,4 +14,4 @@ class Preferences: AvatarPreferences { override var background: String? = null override var chair: String? = null override var disableClasses: Boolean = false -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Profile.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Profile.kt index ec9e0cd90..9bedc7a70 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Profile.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Profile.kt @@ -5,4 +5,4 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) class Profile { var name: String? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Stats.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Stats.kt index b43c56bcb..259da8167 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Stats.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/Stats.kt @@ -4,7 +4,7 @@ import com.habitrpg.shared.habitica.models.AvatarStats import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class Stats: AvatarStats { +class Stats : AvatarStats { override val buffs: Buffs? = null override var habitClass: String? = null override var points: Int? = null @@ -16,4 +16,4 @@ class Stats: AvatarStats { override var toNextLevel: Int? = null override var maxHealth: Int? = null override var maxMP: Int? = null -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt index 9e9122047..38a7dd36f 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/user/User.kt @@ -7,10 +7,10 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class User: Avatar { +class User : Avatar { val tasksOrder: TasksOrder? = null val isDead: Boolean - get() = (stats?.hp ?: 0.0) <= 0.0 + get() = (stats?.hp ?: 0.0) <= 0.0 override val currentMount: String? get() = items?.currentMount override val currentPet: String? @@ -39,4 +39,4 @@ class User: Avatar { override fun isValid(): Boolean { return true } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt index 74e670bc2..546ed9150 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/modules/AppModule.kt @@ -119,4 +119,4 @@ class AppModule { fun provideTestingLevel(): AppTestingLevel { return AppTestingLevel.valueOf(BuildConfig.TESTING_LEVEL.uppercase()) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt index cceb73826..931ee019a 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt @@ -14,7 +14,7 @@ import java.lang.Integer.max import kotlin.math.roundToInt @AndroidEntryPoint -class AvatarActivity: BaseActivity() { +class AvatarActivity : BaseActivity() { override val viewModel: AvatarViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -61,4 +61,4 @@ class AvatarActivity: BaseActivity() { binding.root.outlineProvider = ViewOutlineProvider.BACKGROUND binding.root.clipToOutline = true } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt index d1a9d1088..ea76a2823 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import javax.inject.Inject -abstract class BaseActivity : ComponentActivity() { +abstract class BaseActivity : ComponentActivity() { @Inject lateinit var appStateManager: AppStateManager @@ -94,10 +94,12 @@ abstract class BaseActivity : ComponentActivi internal fun openRemoteActivity(url: String, keepActive: Boolean = false) { sendMessage("open_activity", url, null) - startActivity(Intent(this, ContinuePhoneActivity::class.java) - .apply { - putExtra("keep_active", keepActive) - }) + startActivity( + Intent(this, ContinuePhoneActivity::class.java) + .apply { + putExtra("keep_active", keepActive) + } + ) } internal fun sendMessage( @@ -128,4 +130,4 @@ abstract class BaseActivity : ComponentActivi } } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt index a09846b28..d33da1726 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt @@ -12,7 +12,7 @@ import kotlin.time.DurationUnit import kotlin.time.toDuration @AndroidEntryPoint -class ConfirmationActivity: +class ConfirmationActivity : BaseActivity() { override val viewModel: ConfirmactionActivityViewModel by viewModels() @@ -32,4 +32,4 @@ class ConfirmationActivity: binding.textView.setCompoundDrawablesWithIntrinsicBounds(0, viewModel.icon, 0, 0) binding.textView.text = viewModel.text } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ContinuePhoneActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ContinuePhoneActivity.kt index 9334208d5..ecdc0b8f8 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ContinuePhoneActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ContinuePhoneActivity.kt @@ -63,4 +63,4 @@ class ContinuePhoneActivity : BaseActivity() { +class FaintActivity : BaseActivity() { override val viewModel: FaintViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -20,10 +20,12 @@ class FaintActivity: BaseActivity() { binding.continueButton.setOnClickListener { binding.continueButton.isEnabled = false startAnimatingProgress() - lifecycleScope.launch(CoroutineExceptionHandler { _, _ -> - stopAnimatingProgress() - binding.continueButton.isEnabled = true - }) { + lifecycleScope.launch( + CoroutineExceptionHandler { _, _ -> + stopAnimatingProgress() + binding.continueButton.isEnabled = true + } + ) { viewModel.revive() finish() } @@ -37,4 +39,4 @@ class FaintActivity: BaseActivity() { super.onResume() binding.hpBar.animateProgress(50f, 2000) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/HabitDirectionActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/HabitDirectionActivity.kt index d11f05ee5..e84aa97c7 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/HabitDirectionActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/HabitDirectionActivity.kt @@ -11,8 +11,8 @@ import com.habitrpg.wearos.habitica.ui.viewmodels.HabitDirectionViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class HabitDirectionActivity: BaseActivity() { - override val viewModel: HabitDirectionViewModel by viewModels() +class HabitDirectionActivity : BaseActivity() { + override val viewModel: HabitDirectionViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityHabitDirectionBinding.inflate(layoutInflater) @@ -42,4 +42,4 @@ class HabitDirectionActivity: BaseActivity() { +class InputActivity : BaseActivity() { override val viewModel: InputViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -72,4 +72,4 @@ class InputActivity: BaseActivity() { } speechInputResult.launch(intent) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt index 150424de2..23d1acd17 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LevelupActivity.kt @@ -17,7 +17,7 @@ import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.launch @AndroidEntryPoint -class LevelupActivity: BaseActivity() { +class LevelupActivity : BaseActivity() { override val viewModel: LevelupViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -26,10 +26,12 @@ class LevelupActivity: BaseActivity() binding.continueButton.setOnClickListener { binding.continueButton.isEnabled = false startAnimatingProgress() - lifecycleScope.launch(CoroutineExceptionHandler { _, _ -> - stopAnimatingProgress() - binding.continueButton.isEnabled = true - }) { + lifecycleScope.launch( + CoroutineExceptionHandler { _, _ -> + stopAnimatingProgress() + binding.continueButton.isEnabled = true + } + ) { finish() } } @@ -69,4 +71,4 @@ class LevelupActivity: BaseActivity() super.onResume() binding.expBar.animateProgress(0f, 2000) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt index cd74d5f75..550340237 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt @@ -16,9 +16,8 @@ import com.habitrpg.common.habitica.helpers.DeviceCommunication import com.habitrpg.wearos.habitica.ui.viewmodels.LoginViewModel import dagger.hilt.android.AndroidEntryPoint - @AndroidEntryPoint -class LoginActivity: BaseActivity() { +class LoginActivity : BaseActivity() { enum class State { INITIAL, OTHER, @@ -26,45 +25,45 @@ class LoginActivity: BaseActivity() { } override val viewModel: LoginViewModel by viewModels() private var currentState: State = State.INITIAL - set(value) { - field = value - when(value) { - State.INITIAL -> { - binding.descriptionView.isVisible = true - binding.signInOnPhoneButton.isVisible = true - binding.otherButton.isVisible = true - binding.googleLoginButton.isVisible = false - binding.registerButton.isVisible = false - binding.usernamePasswordButton.isVisible = false - binding.usernameEditText.isVisible = false - binding.passwordEditText.isVisible = false - binding.loginButton.isVisible = false - } - State.OTHER -> { - binding.descriptionView.isVisible = false - binding.signInOnPhoneButton.isVisible = false - binding.otherButton.isVisible = false - binding.googleLoginButton.isVisible = true - binding.registerButton.isVisible = binding.registerButton.isEnabled - binding.usernamePasswordButton.isVisible = true - binding.usernameEditText.isVisible = false - binding.passwordEditText.isVisible = false - binding.loginButton.isVisible = false - } - State.INPUT -> { - binding.descriptionView.isVisible = false - binding.signInOnPhoneButton.isVisible = false - binding.otherButton.isVisible = false - binding.googleLoginButton.isVisible = false - binding.registerButton.isVisible = false - binding.usernamePasswordButton.isVisible = false - binding.usernameEditText.isVisible = true - binding.passwordEditText.isVisible = true - binding.loginButton.isVisible = true + set(value) { + field = value + when (value) { + State.INITIAL -> { + binding.descriptionView.isVisible = true + binding.signInOnPhoneButton.isVisible = true + binding.otherButton.isVisible = true + binding.googleLoginButton.isVisible = false + binding.registerButton.isVisible = false + binding.usernamePasswordButton.isVisible = false + binding.usernameEditText.isVisible = false + binding.passwordEditText.isVisible = false + binding.loginButton.isVisible = false + } + State.OTHER -> { + binding.descriptionView.isVisible = false + binding.signInOnPhoneButton.isVisible = false + binding.otherButton.isVisible = false + binding.googleLoginButton.isVisible = true + binding.registerButton.isVisible = binding.registerButton.isEnabled + binding.usernamePasswordButton.isVisible = true + binding.usernameEditText.isVisible = false + binding.passwordEditText.isVisible = false + binding.loginButton.isVisible = false + } + State.INPUT -> { + binding.descriptionView.isVisible = false + binding.signInOnPhoneButton.isVisible = false + binding.otherButton.isVisible = false + binding.googleLoginButton.isVisible = false + binding.registerButton.isVisible = false + binding.usernamePasswordButton.isVisible = false + binding.usernameEditText.isVisible = true + binding.passwordEditText.isVisible = true + binding.loginButton.isVisible = true + } } + binding.root.smoothScrollTo(0, 0) } - binding.root.smoothScrollTo(0, 0) - } override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityLoginBinding.inflate(layoutInflater) @@ -152,4 +151,4 @@ class LoginActivity: BaseActivity() { startActivity(intent) finish() } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt index dbc153867..b4f9b0aaa 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt @@ -115,7 +115,7 @@ class MainActivity : BaseActivity() { adapter.title = user.profile?.name ?: "" val index = adapter.data.indexOfFirst { it.identifier == "stats" } adapter.data[index].detailText = getString(R.string.user_level, user.stats?.lvl ?: 0) - adapter.notifyItemChanged(index+1) + adapter.notifyItemChanged(index + 1) } viewModel.taskCounts.observe(this) { adapter.data.forEach { menuItem -> @@ -153,7 +153,6 @@ class MainActivity : BaseActivity() { startActivity(Intent(this, AvatarActivity::class.java)) } - private fun openStatsActivity() { startActivity(Intent(this, StatsActivity::class.java)) } @@ -168,4 +167,4 @@ class MainActivity : BaseActivity() { } startActivity(intent) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt index 1e995e122..915c32c8e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt @@ -67,7 +67,8 @@ class RYAActivity : BaseActivity() { Intent(this, RYAActivity::class.java) .apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) - }) + } + ) } super.onDestroy() } @@ -116,4 +117,4 @@ class RYAActivity : BaseActivity() { holder.bind(task) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SettingsActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SettingsActivity.kt index 321fdedd3..5ff13ce66 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SettingsActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SettingsActivity.kt @@ -4,7 +4,6 @@ import android.app.Dialog import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle -import android.widget.Button import androidx.activity.viewModels import androidx.lifecycle.lifecycleScope import androidx.wear.widget.WearableLinearLayoutManager @@ -21,7 +20,7 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch @AndroidEntryPoint -class SettingsActivity: BaseActivity() { +class SettingsActivity : BaseActivity() { override val viewModel: SettingsViewModel by viewModels() private val adapter = SettingsAdapter() @@ -51,7 +50,6 @@ class SettingsActivity: BaseActivity val client = GoogleSignIn.getClient(this, gso) client.signOut() } catch (e: Exception) { - } val intent = Intent(this, LoginActivity::class.java) @@ -89,7 +87,7 @@ class SettingsActivity: BaseActivity getString(R.string.version_info, versionName, versionCode), SettingsItem.Types.FOOTER, null - ){ + ) { } ) } @@ -127,6 +125,4 @@ class SettingsActivity: BaseActivity logoutDialog.setContentView(myLayout) logoutDialog.show() } - - -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt index 231143cc0..71a98b8a5 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt @@ -17,7 +17,7 @@ import kotlin.time.DurationUnit import kotlin.time.toDuration @AndroidEntryPoint -class SplashActivity: BaseActivity() { +class SplashActivity : BaseActivity() { override val viewModel: SplashViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { @@ -89,4 +89,4 @@ class SplashActivity: BaseActivity() { } } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/StatsActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/StatsActivity.kt index b0b57737d..445fc2c69 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/StatsActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/StatsActivity.kt @@ -49,7 +49,6 @@ class StatsActivity : BaseActivity() { binding.mpBar.setPercentageValues(1f, 100f) binding.mpBar.animateProgress() - } private fun setStatViews() { @@ -102,5 +101,3 @@ class StatsActivity : BaseActivity() { } } } - - diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskDetailActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskDetailActivity.kt index 9e6534e60..9e3034f94 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskDetailActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskDetailActivity.kt @@ -32,7 +32,8 @@ class TaskDetailActivity : BaseActivity R.string.habit - TaskType.DAILY -> R.string.daily - TaskType.TODO -> R.string.todo - TaskType.REWARD -> R.string.reward - else -> R.string.task - }) + val typeName = getString( + when (value) { + TaskType.HABIT -> R.string.habit + TaskType.DAILY -> R.string.daily + TaskType.TODO -> R.string.todo + TaskType.REWARD -> R.string.reward + else -> R.string.task + } + ) binding.confirmationTitle.text = getString(R.string.new_task_x, typeName) binding.saveButton.setChipText(getString(R.string.save_task_x, typeName)) } @@ -60,20 +62,24 @@ class TaskFormActivity : BaseActivity - binding.saveButton.isEnabled = true - binding.editTaskWrapper.isVisible = true - binding.taskConfirmationWrapper.isVisible = false - }) { + lifecycleScope.launch( + CoroutineExceptionHandler { _, _ -> + binding.saveButton.isEnabled = true + binding.editTaskWrapper.isVisible = true + binding.taskConfirmationWrapper.isVisible = false + } + ) { viewModel.saveTask(binding.editText.text, taskType) val data = Intent() data.putExtra("task_type", taskType?.value) setResult(Activity.RESULT_OK, data) finish() - parent.startActivity(Intent(parent, TaskListActivity::class.java).apply { - putExtra("task_type", taskType?.value) - }) + parent.startActivity( + Intent(parent, TaskListActivity::class.java).apply { + putExtra("task_type", taskType?.value) + } + ) } } if (intent.extras?.containsKey("task_type") == true) { @@ -119,4 +125,4 @@ class TaskFormActivity : BaseActivity R.string.habit TaskType.DAILY -> R.string.daily @@ -92,9 +93,11 @@ class TaskListActivity : BaseActivity getString(R.string.some_food) - "Egg" -> getString(R.string.an_egg) - "HatchingPotion" -> getString(R.string.a_potion) - else -> getString(R.string.some_x, type) - }) + elements.add( + when (type) { + "Food" -> getString(R.string.some_food) + "Egg" -> getString(R.string.an_egg) + "HatchingPotion" -> getString(R.string.a_potion) + else -> getString(R.string.some_x, type) + } + ) dropBinding.imageView.loadImage("Pet_" + type + "_" + key) } dropBinding.textView.text = when (elements.size) { @@ -213,4 +219,4 @@ class TaskResultActivity : BaseActivity : RecyclerView.Adapter() { +abstract class BaseAdapter : RecyclerView.Adapter() { var title: String = "" - set(value) { - val previous = field - field = value - notifyItemChanged(0) - } + set(value) { + val previous = field + field = value + notifyItemChanged(0) + } var onRefresh: (() -> Unit)? = null var isDisconnected = false - set(value) { - field = value - notifyItemChanged(0) - } + set(value) { + field = value + notifyItemChanged(0) + } var data: List = listOf() set(value) { @@ -50,4 +50,4 @@ abstract class BaseAdapter : RecyclerView.Adapter() { +class HubAdapter : BaseAdapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = parent.context.layoutInflater return if (viewType == 1) { @@ -27,4 +27,3 @@ class HubAdapter: BaseAdapter() { override fun getItemViewType(position: Int) = if (position == 0) TYPE_HEADER else 1 } - diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/RewardListAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/RewardListAdapter.kt index c8569d984..8b9e357cd 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/RewardListAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/RewardListAdapter.kt @@ -2,11 +2,11 @@ package com.habitrpg.wearos.habitica.ui.adapters import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.databinding.RowRewardBinding +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.RewardViewHolder -class RewardListAdapter: TaskListAdapter() { +class RewardListAdapter : TaskListAdapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == 1) { return RewardViewHolder(RowRewardBinding.inflate(parent.context.layoutInflater, parent, false).root) @@ -14,4 +14,4 @@ class RewardListAdapter: TaskListAdapter() { super.onCreateViewHolder(parent, viewType) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/SettingsAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/SettingsAdapter.kt index 3f6e0f52b..5a47319bb 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/SettingsAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/SettingsAdapter.kt @@ -16,7 +16,7 @@ import com.habitrpg.wearos.habitica.ui.viewHolders.BindableViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.FooterViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.SpacerViewHolder -class SettingsAdapter: BaseAdapter() { +class SettingsAdapter : BaseAdapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { 1 -> FooterViewHolder(RowFooterBinding.inflate(parent.context.layoutInflater, parent, false).root) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt index 9c9b5e3f0..fda1fcfc9 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt @@ -10,7 +10,7 @@ import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.TaskViewHolder open class TaskListAdapter : BaseAdapter() { var onTaskScore: ((Task) -> Unit)? = null - var onTaskTapped:((Task) -> Unit)? = null + var onTaskTapped: ((Task) -> Unit)? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == TYPE_HEADER) { @@ -31,7 +31,7 @@ open class TaskListAdapter : BaseAdapter() { holder.itemView.setOnClickListener { onTaskTapped?.invoke(item) } - } else if (holder is HeaderTaskViewHolder){ + } else if (holder is HeaderTaskViewHolder) { if (position == 0) { holder.bind(title, data.firstOrNull() is String, isDisconnected) holder.itemView.setOnClickListener { @@ -50,7 +50,7 @@ open class TaskListAdapter : BaseAdapter() { TYPE_HEADER } else { val item = data[position - 1] - if (item is Task) 1 else TYPE_HEADER + if (item is Task) 1 else TYPE_HEADER } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/ToDoListAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/ToDoListAdapter.kt index a9719aa76..fc104fc65 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/ToDoListAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/ToDoListAdapter.kt @@ -2,11 +2,11 @@ package com.habitrpg.wearos.habitica.ui.adapters import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.databinding.RowTodoBinding +import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.ToDoViewHolder -class ToDoListAdapter: TaskListAdapter() { +class ToDoListAdapter : TaskListAdapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == 1) { return ToDoViewHolder(RowTodoBinding.inflate(parent.context.layoutInflater, parent, false).root) @@ -14,4 +14,4 @@ class ToDoListAdapter: TaskListAdapter() { super.onCreateViewHolder(parent, viewType) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/BindableViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/BindableViewHolder.kt index 77b235fc6..617ef006e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/BindableViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/BindableViewHolder.kt @@ -5,4 +5,4 @@ import androidx.recyclerview.widget.RecyclerView abstract class BindableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { abstract fun bind(data: T) -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/DisconnectedViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/DisconnectedViewHolder.kt index d598320e2..7101ce15e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/DisconnectedViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/DisconnectedViewHolder.kt @@ -3,4 +3,4 @@ package com.habitrpg.wearos.habitica.ui.viewHolders import androidx.recyclerview.widget.RecyclerView import com.habitrpg.android.habitica.databinding.RowDisconnectedBinding -class DisconnectedViewHolder(private val binding: RowDisconnectedBinding): RecyclerView.ViewHolder(binding.root) \ No newline at end of file +class DisconnectedViewHolder(private val binding: RowDisconnectedBinding) : RecyclerView.ViewHolder(binding.root) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/FooterViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/FooterViewHolder.kt index 45c064dd9..501bfaff8 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/FooterViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/FooterViewHolder.kt @@ -3,10 +3,10 @@ package com.habitrpg.wearos.habitica.ui.viewHolders import android.view.View import com.habitrpg.android.habitica.databinding.RowFooterBinding -class FooterViewHolder(itemView: View): BindableViewHolder(itemView) { +class FooterViewHolder(itemView: View) : BindableViewHolder(itemView) { private val binding = RowFooterBinding.bind(itemView) override fun bind(data: String) { binding.textView.text = data } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HeaderViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HeaderViewHolder.kt index 6e21d9480..211537207 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HeaderViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HeaderViewHolder.kt @@ -6,7 +6,7 @@ import androidx.core.view.isVisible import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.RowHeaderBinding -class HeaderViewHolder(itemView: View): BindableViewHolder(itemView) { +class HeaderViewHolder(itemView: View) : BindableViewHolder(itemView) { private val binding = RowHeaderBinding.bind(itemView) override fun bind(data: String) { @@ -20,4 +20,4 @@ class HeaderViewHolder(itemView: View): BindableViewHolder(itemView) { fun setIsDisconnected(isDisconnected: Boolean) { binding.disconnected.root.isVisible = isDisconnected } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt index 3f94e168e..855c565ef 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt @@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.RowHubBinding import com.habitrpg.wearos.habitica.models.user.MenuItem -class HubViewHolder(itemView: View): BindableViewHolder(itemView) { +class HubViewHolder(itemView: View) : BindableViewHolder(itemView) { val binding = RowHubBinding.bind(itemView) override fun bind(data: MenuItem) { @@ -29,4 +29,4 @@ class HubViewHolder(itemView: View): BindableViewHolder(itemView) { data.onClick() } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/SpacerViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/SpacerViewHolder.kt index 52a026db1..7d6e69e95 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/SpacerViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/SpacerViewHolder.kt @@ -3,10 +3,10 @@ package com.habitrpg.wearos.habitica.ui.viewHolders import android.view.View import com.habitrpg.android.habitica.databinding.RowSpacerBinding -class SpacerViewHolder(itemView: View): BindableViewHolder(itemView) { +class SpacerViewHolder(itemView: View) : BindableViewHolder(itemView) { private val binding = RowSpacerBinding.bind(itemView) override fun bind(data: Int) { binding.root.layoutParams.height = data } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/CheckedTaskViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/CheckedTaskViewHolder.kt index b9ab7c41b..16b0403f0 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/CheckedTaskViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/CheckedTaskViewHolder.kt @@ -40,4 +40,4 @@ abstract class CheckedTaskViewHolder(itemView: View) : TaskViewHolder(itemView) ) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/DailyViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/DailyViewHolder.kt index 05de6fc91..2f1653aad 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/DailyViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/DailyViewHolder.kt @@ -14,4 +14,4 @@ class DailyViewHolder(itemView: View) : CheckedTaskViewHolder(itemView) { get() = binding.checkbox override val checkboxWrapper: ViewGroup get() = binding.checkboxWrapper -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/HabitViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/HabitViewHolder.kt index 9f938f21e..a8f016849 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/HabitViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/HabitViewHolder.kt @@ -43,4 +43,4 @@ class HabitViewHolder(itemView: View) : TaskViewHolder(itemView) { binding.habitButtonIcon.imageTintList = ColorStateList.valueOf(ContextCompat.getColor(itemView.context, R.color.white)) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/RewardViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/RewardViewHolder.kt index 2b965782c..b6bbc2033 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/RewardViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/RewardViewHolder.kt @@ -8,4 +8,4 @@ class RewardViewHolder(itemView: View) : TaskViewHolder(itemView) { private val binding = RowRewardBinding.bind(itemView) override val titleView: TaskTextView get() = binding.title -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/TaskViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/TaskViewHolder.kt index 9e345f954..9fa09bece 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/TaskViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/TaskViewHolder.kt @@ -11,4 +11,4 @@ abstract class TaskViewHolder(itemView: View) : BindableViewHolder(itemVie override fun bind(data: Task) { titleView.text = data.text } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/ToDoViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/ToDoViewHolder.kt index fded35c10..bf48c70bf 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/ToDoViewHolder.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/tasks/ToDoViewHolder.kt @@ -14,4 +14,4 @@ class ToDoViewHolder(itemView: View) : CheckedTaskViewHolder(itemView) { get() = binding.checkbox override val checkboxWrapper: ViewGroup get() = binding.checkboxWrapper -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt index 43e1f0dff..762fa61ee 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt @@ -12,11 +12,12 @@ import javax.inject.Inject class AvatarViewModel @Inject constructor( userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel( userRepository, taskRepository, exceptionBuilder, appStateManager ) { var user = userRepository.getUser().asLiveData() -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt index b3ed5593c..5ff5fac62 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt @@ -16,7 +16,7 @@ open class BaseViewModel( val taskRepository: TaskRepository, val exceptionBuilder: ExceptionHandlerBuilder, val appStateManager: AppStateManager -): ViewModel(), ErrorPresenter { +) : ViewModel(), ErrorPresenter { override val errorValues = MutableLiveData() fun retrieveFullUserData() { @@ -27,4 +27,4 @@ open class BaseViewModel( appStateManager.endLoading() } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt index ed68e10f7..14f2226bd 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt @@ -8,9 +8,11 @@ import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class FaintViewModel @Inject constructor(userRepository: UserRepository, +class FaintViewModel @Inject constructor( + userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { suspend fun revive() { userRepository.revive() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDirectionViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDirectionViewModel.kt index 15e7bf34f..f00587a72 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDirectionViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDirectionViewModel.kt @@ -14,7 +14,8 @@ class HabitDirectionViewModel @Inject constructor( savedStateHandle: SavedStateHandle, userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { val taskID = savedStateHandle.get("task_id") val task = taskRepository.getTask(taskID).asLiveData() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt index 56dd8454f..a0818df29 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt @@ -38,12 +38,14 @@ import java.io.IOException import javax.inject.Inject @HiltViewModel -class LoginViewModel @Inject constructor(userRepository: UserRepository, +class LoginViewModel @Inject constructor( + userRepository: UserRepository, taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, private val keyHelper: KeyHelper?, val sharedPreferences: SharedPreferences, - val apiClient: ApiClient, appStateManager: AppStateManager + val apiClient: ApiClient, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { lateinit var onLoginCompleted: () -> Unit diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt index 2c0a78bb1..179d3a207 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt @@ -15,7 +15,8 @@ import kotlin.time.toDuration class MainViewModel @Inject constructor( userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { private var lastUserFetch = 0L fun periodicUserRefresh() { @@ -28,4 +29,4 @@ class MainViewModel @Inject constructor( val taskCounts = taskRepository.getActiveTaskCounts().asLiveData() val user = userRepository.getUser().asLiveData() -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt index 6d4876865..9ed296df2 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt @@ -22,7 +22,8 @@ class RYAViewModel @Inject constructor( userRepository: UserRepository, taskRepository: TaskRepository, val sharedPreferences: SharedPreferences, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { var hasRunCron: Boolean = false val tasks = MutableLiveData>() @@ -53,7 +54,7 @@ class RYAViewModel @Inject constructor( } fun runCron(function: (Boolean) -> Unit) { - //Clear shared pref values for saved to-do tasks + // Clear shared pref values for saved to-do tasks sharedPreferences.edit { putString("to_do_tasks", null) } viewModelScope.launch(exceptionBuilder.userFacing(this)) { appStateManager.startLoading() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt index 7fa56107a..8c0fe1ac7 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt @@ -3,8 +3,6 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import android.content.SharedPreferences import androidx.core.content.edit import androidx.lifecycle.viewModelScope -import com.google.android.gms.auth.api.signin.GoogleSignIn -import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.habitrpg.wearos.habitica.data.ApiClient import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository @@ -15,7 +13,8 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class SettingsViewModel @Inject constructor(userRepository: UserRepository, +class SettingsViewModel @Inject constructor( + userRepository: UserRepository, taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, private val apiClient: ApiClient, diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt index 720775797..056fd9852 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt @@ -16,18 +16,20 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class SplashViewModel @Inject constructor(userRepository: UserRepository, +class SplashViewModel @Inject constructor( + userRepository: UserRepository, taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, val apiClient: ApiClient, val sharedPreferences: SharedPreferences, - val keyHelper: KeyHelper?, appStateManager: AppStateManager + val keyHelper: KeyHelper?, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager), MessageClient.OnMessageReceivedListener { lateinit var onLoginCompleted: (Boolean) -> Unit val hasAuthentication: Boolean - get() { - return apiClient.hasAuthentication() - } + get() { + return apiClient.hasAuthentication() + } override fun onMessageReceived(event: MessageEvent) { when (event.path) { @@ -36,9 +38,11 @@ class SplashViewModel @Inject constructor(userRepository: UserRepository, } private fun authDataReceived(event: MessageEvent) { - viewModelScope.launch(exceptionBuilder.silent { - onLoginCompleted(false) - }) { + viewModelScope.launch( + exceptionBuilder.silent { + onLoginCompleted(false) + } + ) { val (userID, apiKey) = String(event.data).split(":") try { if (userID.isBlank() || apiKey.isBlank()) { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt index 754327b40..9092a4342 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt @@ -14,9 +14,11 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class StatsViewModel @Inject constructor(userRepository: UserRepository, +class StatsViewModel @Inject constructor( + userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { fun retrieveUser() { viewModelScope.launch(exceptionBuilder.silent()) { @@ -26,11 +28,10 @@ class StatsViewModel @Inject constructor(userRepository: UserRepository, var user: LiveData = userRepository.getUser() .distinctUntilChanged { old, new -> - val oldStats = old.stats ?: return@distinctUntilChanged false - val newStats = new.stats ?: return@distinctUntilChanged false + val oldStats = old.stats ?: return@distinctUntilChanged false + val newStats = new.stats ?: return@distinctUntilChanged false return@distinctUntilChanged (oldStats.hp ?: 0.0) + (oldStats.exp ?: 0.0) + (oldStats.exp ?: 0.0) == (newStats.hp ?: 0.0) + (newStats.exp ?: 0.0) + (newStats.exp ?: 0.0) } .asLiveData() - -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt index d2fb107fe..9dcede223 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt @@ -14,7 +14,8 @@ class TaskDetailViewModel @Inject constructor( savedStateHandle: SavedStateHandle, taskRepository: TaskRepository, userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { val taskID = savedStateHandle.get("task_id") val task = taskRepository.getTask(taskID).asLiveData() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt index 24dad6133..ac035a42d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt @@ -14,7 +14,8 @@ import javax.inject.Inject class TaskFormViewModel @Inject constructor( userRepository: UserRepository, taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { suspend fun saveTask(text: CharSequence?, taskType: TaskType?) { if (text?.isNotBlank() != true || taskType == null) { @@ -29,4 +30,4 @@ class TaskFormViewModel @Inject constructor( task.frequency = Frequency.DAILY taskRepository.createTask(task) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt index db837c293..b13e8a5de 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt @@ -32,7 +32,8 @@ class TaskListViewModel @Inject constructor( userRepository: UserRepository, val sharedPreferences: SharedPreferences, moshi: Moshi, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { var type: Type = Types.newParameterizedType( MutableList::class.java, @@ -47,7 +48,7 @@ class TaskListViewModel @Inject constructor( } val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT) .map { - when(taskType) { + when (taskType) { TaskType.DAILY -> mapDaily(it) TaskType.TODO -> mapTodos(it) else -> map(it) @@ -64,15 +65,17 @@ class TaskListViewModel @Inject constructor( completedToDos.remove(task) } } - viewModelScope.launch(exceptionBuilder.userFacing(this) { - if (taskType == TaskType.TODO) { - if (direction == TaskDirection.UP) { - completedToDos.remove(task) - } else { - completedToDos.add(task) + viewModelScope.launch( + exceptionBuilder.userFacing(this) { + if (taskType == TaskType.TODO) { + if (direction == TaskDirection.UP) { + completedToDos.remove(task) + } else { + completedToDos.add(task) + } } } - }) { + ) { val result = taskRepository.scoreTask( userRepository.getUser().first(), task, @@ -94,7 +97,7 @@ class TaskListViewModel @Inject constructor( private fun mapDaily(tasks: List): MutableList { val taskList: MutableList = tasks.filter { it.isDue == true || it.type == TaskType.TODO }.sortedBy { it.completed }.toMutableList() - val firstCompletedIndex = taskList.indexOfFirst { it is Task && it.completed } + val firstCompletedIndex = taskList.indexOfFirst { it is Task && it.completed } if (firstCompletedIndex >= 0) { // since this is the index of the first completed task, this is also the number of incomplete tasks taskCount.value = firstCompletedIndex @@ -126,5 +129,4 @@ class TaskListViewModel @Inject constructor( putString("to_do_tasks", moshiAdapter.toJson(completedToDos)) } } - -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt index c6b5db34b..c437100a9 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt @@ -15,13 +15,14 @@ class TaskResultViewModel @Inject constructor( savedStateHandle: SavedStateHandle, taskRepository: TaskRepository, userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager + exceptionBuilder: ExceptionHandlerBuilder, + appStateManager: AppStateManager ) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) { val user = userRepository.getUser().asLiveData() val hasLeveledUp: Boolean - get() = result?.hasLeveledUp == true + get() = result?.hasLeveledUp == true val hasDied: Boolean - get() = result?.hasDied == true + get() = result?.hasDied == true val hasDrop: Boolean get() { return result?.drop?.key?.isNotBlank() == true // || (result?.questItemsFound ?: 0) > 0 diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/AddTaskButton.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/AddTaskButton.kt index be1a72182..7c63f8adb 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/AddTaskButton.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/AddTaskButton.kt @@ -16,7 +16,8 @@ import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.layoutInflater class AddTaskButton @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : FrameLayout(context, attrs) { val binding = ButtonAddTaskBinding.inflate(context.layoutInflater, this) @@ -54,7 +55,7 @@ class AddTaskButton @JvmOverloads constructor( super.onLayout(changed, left, top, right, bottom) val totalWidth = right - left val width = totalWidth / 1.2375f - rect.left = (totalWidth - width)/2 + rect.left = (totalWidth - width) / 2 rect.right = rect.left + width rect.bottom = width / 1.8f invalidate() @@ -69,4 +70,4 @@ class AddTaskButton @JvmOverloads constructor( canvas.drawPath(path, fillPaint) canvas.drawPath(path, strokePaint) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt index 4c32ccc0e..2c53da1f3 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/CircularProgressView.kt @@ -30,10 +30,10 @@ class CircularProgressView( private val offset = attributes?.getDimension(R.styleable.CircularProgressView_offset, 0f)?.toInt() private val backgroundArcColor = attributes?.getColor(R.styleable.CircularProgressView_backgroundArcColor, 0) ?: Color.GRAY private var fillArcColor = attributes?.getColor(R.styleable.CircularProgressView_arcFillColor, 0) ?: Color.GRAY - set(value) { - field = value - fillArcPaint.color = fillArcColor - } + set(value) { + field = value + fillArcPaint.color = fillArcColor + } private val parentArcPaint = Paint().apply { style = Paint.Style.STROKE @@ -76,7 +76,6 @@ class CircularProgressView( ) } - private fun drawBackgroundArc(it: Canvas) { it.drawArc(ovalSpace, 0f, 360f, false, parentArcPaint) } @@ -117,6 +116,5 @@ class CircularProgressView( const val PERCENTAGE_VALUE_HOLDER = "percentage" } - private fun getCurrentAngleToFill() = if(currentPercentage > 0) {(arcFullRotationDegree.toFloat() * (currentPercentage / percentageDivider))} else {1f} + private fun getCurrentAngleToFill() = if (currentPercentage > 0) { (arcFullRotationDegree.toFloat() * (currentPercentage / percentageDivider)) } else { 1f } } - diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt index 2545eebf4..1162848a7 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt @@ -27,4 +27,4 @@ class ConnectedActionChipView(context: Context, attrs: AttributeSet? = null) : } } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt index 392a98231..decd44df4 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabitDirectionPickerButton.kt @@ -13,7 +13,8 @@ import com.habitrpg.android.habitica.R import com.habitrpg.common.habitica.extensions.dpToPx class HabitDirectionPickerButton @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : FrameLayout(context, attrs) { private var drawFromTop: Boolean private var drawable: BitmapDrawable? @@ -88,4 +89,4 @@ class HabitDirectionPickerButton @JvmOverloads constructor( canvas.drawBitmap(it.bitmap, null, bitmapRect, paint) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaRecyclerView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaRecyclerView.kt index 3d7cd9ab0..63fcd037d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaRecyclerView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaRecyclerView.kt @@ -10,7 +10,8 @@ import com.habitrpg.common.habitica.helpers.RecyclerViewStateAdapter import com.habitrpg.wearos.habitica.ui.adapters.BaseAdapter class HabiticaRecyclerView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : WearableRecyclerView(context, attrs) { override fun onAttachedToWindow() { super.onAttachedToWindow() @@ -76,9 +77,9 @@ class HabiticaRecyclerView @JvmOverloads constructor( state = if (actualAdapter != null && !isInitial) { val emptyViewVisible = if (actualAdapter is BaseAdapter<*>) { (actualAdapter as? BaseAdapter<*>)?.hasData() != true - } else { - actualAdapter?.itemCount == 0 - } + } else { + actualAdapter?.itemCount == 0 + } if (emptyViewVisible) { RecyclerViewState.EMPTY } else { @@ -97,4 +98,4 @@ class HabiticaRecyclerView @JvmOverloads constructor( actualAdapter = adapter updateState(true) } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaScrollView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaScrollView.kt index 6ce11019d..57c53a1b1 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaScrollView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/HabiticaScrollView.kt @@ -8,7 +8,8 @@ import androidx.core.widget.NestedScrollView import com.habitrpg.common.habitica.extensions.dpToPx class HabiticaScrollView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : NestedScrollView(context, attrs) { override fun onAttachedToWindow() { @@ -30,8 +31,8 @@ class HabiticaScrollView @JvmOverloads constructor( horizontalPadding, verticalPadding, horizontalPadding, - verticalPadding*2 + verticalPadding * 2 ) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt index 0519069b7..016797bef 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/IndeterminateProgressView.kt @@ -15,7 +15,9 @@ import com.habitrpg.android.habitica.R import com.habitrpg.common.habitica.extensions.dpToPx class IndeterminateProgressView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { var progressBarWidth = 6f.dpToPx(context) @@ -84,4 +86,4 @@ class IndeterminateProgressView @JvmOverloads constructor( canvas.drawRoundRect(halfBar, halfBar, width.toFloat() - halfBar, height.toFloat() - halfBar, cornerRadius, cornerRadius, paint) } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/StatValueView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/StatValueView.kt index 3c874aa35..ea2ccb654 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/StatValueView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/StatValueView.kt @@ -46,5 +46,4 @@ class StatValueView @JvmOverloads constructor( } animator.start() } - -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskRewardChip.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskRewardChip.kt index 30cba9a32..465d8161c 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskRewardChip.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskRewardChip.kt @@ -9,14 +9,15 @@ import android.widget.LinearLayout import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.databinding.TaskRewardChipBinding -import com.habitrpg.shared.habitica.extensions.round import com.habitrpg.android.habitica.extensions.setScaledPadding import com.habitrpg.common.habitica.extensions.layoutInflater +import com.habitrpg.shared.habitica.extensions.round import java.math.RoundingMode import java.text.NumberFormat class TaskRewardChip @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null + context: Context, + attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { enum class Size { SMALL, @@ -27,19 +28,22 @@ class TaskRewardChip @JvmOverloads constructor( val binding = TaskRewardChipBinding.inflate(context.layoutInflater, this) var size: Size = Size.MEDIUM - set(value) { - field = value - binding.textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, when (field) { - Size.SMALL -> 14f - Size.MEDIUM -> 16f - Size.LARGE -> 20f - }) - when (field) { - Size.SMALL -> setScaledPadding(context, 10, 9, 10, 9) - Size.MEDIUM -> setScaledPadding(context, 17, 9, 17, 9) - Size.LARGE -> setScaledPadding(context, 21, 12, 21, 12) + set(value) { + field = value + binding.textView.setTextSize( + TypedValue.COMPLEX_UNIT_SP, + when (field) { + Size.SMALL -> 14f + Size.MEDIUM -> 16f + Size.LARGE -> 20f + } + ) + when (field) { + Size.SMALL -> setScaledPadding(context, 10, 9, 10, 9) + Size.MEDIUM -> setScaledPadding(context, 17, 9, 17, 9) + Size.LARGE -> setScaledPadding(context, 21, 12, 21, 12) + } } - } init { background = ContextCompat.getDrawable(context, R.drawable.row_background) @@ -67,4 +71,4 @@ class TaskRewardChip @JvmOverloads constructor( isGroupingUsed = true } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskTextView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskTextView.kt index 41880828c..b55789484 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskTextView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TaskTextView.kt @@ -15,10 +15,10 @@ import com.habitrpg.android.habitica.R */ open class EllipsizedTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatTextView(context, attrs, defStyleAttr) { var ellipsis = getDefaultEllipsis().toString() - set(value) { - field = value - ellipsisSpannable = SpannableString(ellipsis) - } + set(value) { + field = value + ellipsisSpannable = SpannableString(ellipsis) + } var ellipsisColor = getDefaultEllipsisColor() private var ellipsisSpannable: SpannableString @@ -69,5 +69,6 @@ open class EllipsizedTextView @JvmOverloads constructor(context: Context, attrs: } class TaskTextView @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null -) : EllipsizedTextView(context, attrs) \ No newline at end of file + context: Context, + attrs: AttributeSet? = null +) : EllipsizedTextView(context, attrs) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt index d54ef2fd2..87c158b9f 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/TextActionChipView.kt @@ -43,4 +43,4 @@ open class TextActionChipView @JvmOverloads constructor(context: Context, attrs: fun setChipText(text: String) { binding.chipTextview.text = text } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt index 25a8e8cd2..72bfdce3a 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/DateJSONAdapter.kt @@ -77,4 +77,4 @@ class AttributeAdapter { fun toJson(type: Attribute): String = type.value @FromJson fun fromJson(value: String): Attribute? = Attribute.from(value) -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ExceptionHandlerBuilder.kt similarity index 99% rename from wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt rename to wearos/src/main/java/com/habitrpg/wearos/habitica/util/ExceptionHandlerBuilder.kt index 6ac8d780e..0ee10bc50 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ExceptionHandlerBuilder.kt @@ -34,4 +34,4 @@ class ExceptionHandlerBuilder @Inject constructor(val appStateManager: AppStateM appStateManager.endLoading() } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt index c0259a656..fc20fac0d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaScrollingLayoutCallback.kt @@ -36,4 +36,4 @@ class HabiticaScrollingLayoutCallback : WearableLinearLayoutManager.LayoutCallba alpha = scale * 2 } } -} \ No newline at end of file +} diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ScrollAwayBehavior.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ScrollAwayBehavior.kt index 478d49bdd..7af5fe6c0 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ScrollAwayBehavior.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/ScrollAwayBehavior.kt @@ -12,13 +12,24 @@ class ScrollAwayBehavior(context: Context, attrs: AttributeSet) : CoordinatorLayout.Behavior(context, attrs) { override fun onStartNestedScroll( - coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, axes: Int, type: Int + coordinatorLayout: CoordinatorLayout, + child: V, + directTargetChild: View, + target: View, + axes: Int, + type: Int ): Boolean { return axes == ViewCompat.SCROLL_AXIS_VERTICAL } override fun onNestedPreScroll( - coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int + coordinatorLayout: CoordinatorLayout, + child: V, + target: View, + dx: Int, + dy: Int, + consumed: IntArray, + type: Int ) { super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type) child.translationY = @@ -40,4 +51,4 @@ class ScrollAwayBehavior(context: Context, attrs: AttributeSet) : } } } -} \ No newline at end of file +}