diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index 8669c7e7e..1b07c5fdb 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -2,6 +2,7 @@ plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
+ id 'dagger.hilt.android.plugin'
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
@@ -34,8 +35,8 @@ dependencies {
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
//Dependency Injection
- implementation "com.google.dagger:dagger:$daggerhilt_version"
- kapt "com.google.dagger:dagger-compiler:$daggerhilt_version"
+ implementation "com.google.dagger:hilt-android:$daggerhilt_version"
+ kapt "com.google.dagger:hilt-compiler:$daggerhilt_version"
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
//App Compatibility and Material Design
implementation "androidx.appcompat:appcompat:$appcompat_version"
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index bbb43442a..7ba8677c8 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1168,6 +1168,7 @@
Apple
Not connected
Add password
+ Not Set
Connect
Disconnect
Add
diff --git a/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java b/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java
index 8dc72304f..afc43c2c9 100644
--- a/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java
+++ b/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java
@@ -5,12 +5,4 @@ import com.habitrpg.android.habitica.components.DaggerAppComponent;
import com.habitrpg.android.habitica.modules.AppModule;
public class HabiticaApplication extends HabiticaBaseApplication {
-
- @Override
- protected AppComponent initDagger() {
- return DaggerAppComponent.builder()
- .appModule(new AppModule(this))
- .developerModule(new DebugDeveloperModule())
- .build();
- }
}
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 7e62d18ed..b60edd96f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
@@ -23,14 +23,10 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.installations.FirebaseInstallations
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
-import com.habitrpg.android.habitica.components.AppComponent
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
-import com.habitrpg.android.habitica.modules.UserModule
-import com.habitrpg.android.habitica.modules.UserRepositoryModule
import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
@@ -40,13 +36,14 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.LanguageHelper
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.HiltAndroidApp
import io.realm.Realm
import io.realm.RealmConfiguration
import kotlinx.coroutines.MainScope
import java.lang.ref.WeakReference
import javax.inject.Inject
-// contains all HabiticaApplicationLogic except dagger componentInitialisation
+@HiltAndroidApp
abstract class HabiticaBaseApplication : Application(), Application.ActivityLifecycleCallbacks {
@Inject
internal lateinit var lazyApiHelper: ApiClient
@@ -71,7 +68,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
}
registerActivityLifecycleCallbacks(this)
setupRealm()
- setupDagger()
setLocale()
setupRemoteConfig()
setupNotifications()
@@ -150,14 +146,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
}
}
- private fun setupDagger() {
- component = initDagger()
- reloadUserComponent()
- component?.inject(this)
- }
-
- protected abstract fun initDagger(): AppComponent
-
override fun openOrCreateDatabase(
name: String,
mode: Int,
@@ -240,12 +228,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
}
companion object {
-
- var component: AppComponent? = null
- private set
-
- var userComponent: UserComponent? = null
-
fun getInstance(context: Context): HabiticaBaseApplication? {
return context.applicationContext as? HabiticaBaseApplication
}
@@ -268,17 +250,12 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
putString("theme_mode", lightMode)
putString("launch_screen", launchScreen)
}
- reloadUserComponent()
getInstance(context)?.lazyApiHelper?.updateAuthenticationCredentials(null, null)
Wearable.getCapabilityClient(context).removeLocalCapability("provide_auth")
startActivity(LoginActivity::class.java, context)
}
}
- fun reloadUserComponent() {
- userComponent = component?.plus(UserModule(), UserRepositoryModule())
- }
-
private fun startActivity(activityClass: Class<*>, context: Context) {
val intent = Intent(context, activityClass)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
deleted file mode 100644
index a67649a8c..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.habitrpg.android.habitica.components;
-
-import com.habitrpg.android.habitica.HabiticaBaseApplication;
-import com.habitrpg.android.habitica.modules.ApiModule;
-import com.habitrpg.android.habitica.modules.AppModule;
-import com.habitrpg.android.habitica.modules.DeveloperModule;
-import com.habitrpg.android.habitica.modules.RepositoryModule;
-import com.habitrpg.android.habitica.modules.UserModule;
-import com.habitrpg.android.habitica.modules.UserRepositoryModule;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-@Singleton
-@Component(modules = {DeveloperModule.class, AppModule.class, ApiModule.class, RepositoryModule.class})
-public interface AppComponent {
-
- UserComponent plus(UserModule userModule, UserRepositoryModule userRepositoryModule);
-
- void inject(HabiticaBaseApplication habiticaBaseApplication);
-}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.kt
new file mode 100644
index 000000000..b2e6ba145
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.kt
@@ -0,0 +1,19 @@
+package com.habitrpg.android.habitica.components
+
+import com.habitrpg.android.habitica.modules.ApiModule
+import com.habitrpg.android.habitica.modules.AppModule
+import com.habitrpg.android.habitica.modules.DeveloperModule
+import com.habitrpg.android.habitica.modules.RepositoryModule
+import com.habitrpg.android.habitica.modules.UserModule
+import com.habitrpg.android.habitica.modules.UserRepositoryModule
+import dagger.Component
+import javax.inject.Singleton
+
+@Singleton
+@Component(modules = [DeveloperModule::class, AppModule::class, ApiModule::class, RepositoryModule::class])
+interface AppComponent {
+ fun plus(
+ userModule : UserModule?,
+ userRepositoryModule : UserRepositoryModule?
+ ) : UserComponent?
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java
deleted file mode 100644
index 749d8dbaf..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java
+++ /dev/null
@@ -1,388 +0,0 @@
-package com.habitrpg.android.habitica.components;
-
-import com.habitrpg.android.habitica.HabiticaBaseApplication;
-import com.habitrpg.android.habitica.data.ApiClient;
-import com.habitrpg.android.habitica.helpers.SoundManager;
-import com.habitrpg.android.habitica.helpers.UserScope;
-import com.habitrpg.android.habitica.helpers.notifications.HabiticaFirebaseMessagingService;
-import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
-import com.habitrpg.android.habitica.modules.UserModule;
-import com.habitrpg.android.habitica.modules.UserRepositoryModule;
-import com.habitrpg.android.habitica.receivers.DeviceCommunicationService;
-import com.habitrpg.android.habitica.receivers.LocalNotificationActionReceiver;
-import com.habitrpg.android.habitica.receivers.NotificationPublisher;
-import com.habitrpg.android.habitica.receivers.TaskAlarmBootReceiver;
-import com.habitrpg.android.habitica.receivers.TaskReceiver;
-import com.habitrpg.android.habitica.ui.activities.AdventureGuideActivity;
-import com.habitrpg.android.habitica.ui.activities.ArmoireActivity;
-import com.habitrpg.android.habitica.ui.activities.BirthdayActivity;
-import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity;
-import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity;
-import com.habitrpg.android.habitica.ui.activities.DeathActivity;
-import com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity;
-import com.habitrpg.android.habitica.ui.activities.FullProfileActivity;
-import com.habitrpg.android.habitica.ui.activities.GemPurchaseActivity;
-import com.habitrpg.android.habitica.ui.activities.GiftGemsActivity;
-import com.habitrpg.android.habitica.ui.activities.GiftSubscriptionActivity;
-import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
-import com.habitrpg.android.habitica.ui.activities.GroupInviteActivity;
-import com.habitrpg.android.habitica.ui.activities.GuidelinesActivity;
-import com.habitrpg.android.habitica.ui.activities.HabitButtonWidgetActivity;
-import com.habitrpg.android.habitica.ui.activities.IntroActivity;
-import com.habitrpg.android.habitica.ui.activities.LoginActivity;
-import com.habitrpg.android.habitica.ui.activities.MainActivity;
-import com.habitrpg.android.habitica.ui.activities.MaintenanceActivity;
-import com.habitrpg.android.habitica.ui.activities.NotificationsActivity;
-import com.habitrpg.android.habitica.ui.activities.PrefsActivity;
-import com.habitrpg.android.habitica.ui.activities.ReportMessageActivity;
-import com.habitrpg.android.habitica.ui.activities.SetupActivity;
-import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity;
-import com.habitrpg.android.habitica.ui.activities.SkillTasksActivity;
-import com.habitrpg.android.habitica.ui.activities.TaskFormActivity;
-import com.habitrpg.android.habitica.ui.activities.TaskSummaryActivity;
-import com.habitrpg.android.habitica.ui.activities.TaskSummaryViewModel;
-import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter;
-import com.habitrpg.android.habitica.ui.adapter.tasks.DailiesRecyclerViewHolder;
-import com.habitrpg.android.habitica.ui.adapter.tasks.HabitsRecyclerViewAdapter;
-import com.habitrpg.android.habitica.ui.adapter.tasks.RewardsRecyclerViewAdapter;
-import com.habitrpg.android.habitica.ui.adapter.tasks.TodosRecyclerViewAdapter;
-import com.habitrpg.android.habitica.ui.fragments.AboutFragment;
-import com.habitrpg.android.habitica.ui.fragments.AchievementsFragment;
-import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment;
-import com.habitrpg.android.habitica.ui.fragments.NewsFragment;
-import com.habitrpg.android.habitica.ui.fragments.PromoInfoFragment;
-import com.habitrpg.android.habitica.ui.fragments.PromoWebFragment;
-import com.habitrpg.android.habitica.ui.fragments.StatsFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarCustomizationFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarEquipmentFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.customization.AvatarOverviewFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.equipment.EquipmentDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemDialogFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemsFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.shops.ShopFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.stable.MountDetailRecyclerFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.stable.PetDetailRecyclerFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.stable.StableFragment;
-import com.habitrpg.android.habitica.ui.fragments.inventory.stable.StableRecyclerFragment;
-import com.habitrpg.android.habitica.ui.fragments.preferences.AccountPreferenceFragment;
-import com.habitrpg.android.habitica.ui.fragments.preferences.EmailNotificationsPreferencesFragment;
-import com.habitrpg.android.habitica.ui.fragments.preferences.PreferencesFragment;
-import com.habitrpg.android.habitica.ui.fragments.preferences.PushNotificationsPreferencesFragment;
-import com.habitrpg.android.habitica.ui.fragments.purchases.GemsPurchaseFragment;
-import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragment;
-import com.habitrpg.android.habitica.ui.fragments.purchases.GiftPurchaseGemsFragment;
-import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment;
-import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment;
-import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
-import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment;
-import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment;
-import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment;
-import com.habitrpg.android.habitica.ui.fragments.skills.SkillsFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.InboxMessageListFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.InboxOverviewFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.QuestDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.TavernDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.TavernFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeListFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildListFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.guilds.GuildOverviewFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.NoPartyFragmentFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartyDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartyFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInvitePagerFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartySeekingFragment;
-import com.habitrpg.android.habitica.ui.fragments.social.party.PartySeekingViewModel;
-import com.habitrpg.android.habitica.ui.fragments.support.BugFixFragment;
-import com.habitrpg.android.habitica.ui.fragments.support.FAQDetailFragment;
-import com.habitrpg.android.habitica.ui.fragments.support.FAQOverviewFragment;
-import com.habitrpg.android.habitica.ui.fragments.support.SupportMainFragment;
-import com.habitrpg.android.habitica.ui.fragments.tasks.TaskRecyclerViewFragment;
-import com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment;
-import com.habitrpg.android.habitica.ui.viewmodels.AuthenticationViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.InboxViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.MainActivityViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.TaskFormViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel;
-import com.habitrpg.android.habitica.ui.viewmodels.inventory.equipment.EquipmentOverviewViewModel;
-import com.habitrpg.android.habitica.ui.views.dialogs.PetSuggestHatchDialog;
-import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog;
-import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog;
-import com.habitrpg.android.habitica.ui.views.social.ChatBarView;
-import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog;
-import com.habitrpg.android.habitica.ui.views.tasks.TaskFilterDialog;
-import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider;
-import com.habitrpg.android.habitica.widget.BaseWidgetProvider;
-import com.habitrpg.android.habitica.widget.DailiesWidgetProvider;
-import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider;
-import com.habitrpg.android.habitica.widget.HabitButtonWidgetService;
-import com.habitrpg.android.habitica.widget.TaskListFactory;
-import com.habitrpg.android.habitica.widget.TaskListWidgetProvider;
-
-import org.jetbrains.annotations.NotNull;
-
-import dagger.Subcomponent;
-
-@UserScope
-@Subcomponent(modules = {UserModule.class, UserRepositoryModule.class})
-public interface UserComponent {
- void inject(ClassSelectionActivity classSelectionActivity);
-
- void inject(GroupFormActivity groupFormActivity);
-
- void inject(IntroActivity introActivity);
-
- void inject(LoginActivity loginActivity);
-
- void inject(MainActivity mainActivity);
-
- void inject(MaintenanceActivity maintenanceActivity);
-
- void inject(GroupInviteActivity groupInviteActivity);
-
- void inject(PrefsActivity prefsActivity);
-
- void inject(NotificationsActivity notificationsActivity);
-
- void inject(SetupActivity setupActivity);
-
- void inject(SkillTasksActivity skillTasksActivity);
-
- void inject(SkillMemberActivity skillMembersActivity);
-
- void inject(TasksFragment tasksFragment);
-
- void inject(FAQOverviewFragment faqOverviewFragment);
-
- void inject(AvatarCustomizationFragment avatarCustomizationFragment);
-
- void inject(AvatarOverviewFragment avatarOverviewFragment);
-
- void inject(EquipmentDetailFragment equipmentDetailFragment);
-
- void inject(ItemRecyclerFragment itemRecyclerFragment);
-
- void inject(ItemsFragment itemsFragment);
-
- void inject(MountDetailRecyclerFragment mountDetailRecyclerFragment);
-
- void inject(PetDetailRecyclerFragment petDetailRecyclerFragment);
-
- void inject(StableFragment stableFragment);
-
- void inject(StableRecyclerFragment stableRecyclerFragment);
-
- void inject(AvatarSetupFragment avatarSetupFragment);
-
- void inject(IntroFragment introFragment);
-
- void inject(TaskSetupFragment taskSetupFragment);
-
- void inject(SkillsFragment skillsFragment);
-
- void inject(SkillTasksRecyclerViewFragment skillTasksRecyclerViewFragment);
-
- void inject(PartyFragment partyFragment);
-
- void inject(PartyInviteFragment partyInviteFragment);
-
- void inject(NoPartyFragmentFragment noPartyFragmentFragment);
-
- void inject(GuildFragment guildFragment);
-
- void inject(GuildListFragment guildListFragment);
-
- void inject(TavernFragment tavernFragment);
-
- void inject(TaskRecyclerViewFragment taskRecyclerViewFragment);
-
- void inject(GemsPurchaseFragment gemsPurchaseFragment);
-
- void inject(NewsFragment newsFragment);
-
- void inject(HabiticaBaseApplication habiticaApplication);
-
- void inject(PreferencesFragment preferencesFragment);
-
- void inject(InboxOverviewFragment inboxFragment);
-
- void inject(InboxMessageListFragment inboxMessageListFragment);
-
- void inject(ShopFragment shopFragment);
-
- void inject(PushNotificationManager pushNotificationManager);
-
- void inject(LocalNotificationActionReceiver localNotificationActionReceiver);
-
- void inject(FullProfileActivity fullProfileActivity);
-
- void inject(DailiesWidgetProvider dailiesWidgetProvider);
-
- void inject(HabitButtonWidgetService habitButtonWidgetService);
-
- void inject(HabitButtonWidgetActivity habitButtonWidgetActivity);
-
- void inject(HabitButtonWidgetProvider habitButtonWidgetProvider);
-
- void inject(AvatarStatsWidgetProvider avatarStatsWidgetProvider);
-
- void inject(SoundManager soundManager);
-
- void inject(ChallengesOverviewFragment challengesOverviewFragment);
-
- void inject(ChallengeListFragment challengeListFragment);
-
- void inject(ApiClient apiClient);
-
- void inject(TaskListWidgetProvider taskListWidgetProvider);
-
- void inject(DailiesRecyclerViewHolder dailiesRecyclerViewHolder);
-
- void inject(HabitsRecyclerViewAdapter habitsRecyclerViewAdapter);
-
- void inject(RewardsRecyclerViewAdapter rewardsRecyclerViewAdapter);
-
- void inject(TodosRecyclerViewAdapter todosRecyclerViewAdapter);
-
- void inject(SubscriptionFragment subscriptionFragment);
-
- void inject(ChallengeTasksRecyclerViewAdapter challengeTasksRecyclerViewAdapter);
-
- void inject(TaskListFactory taskListFactory);
-
- void inject(GemPurchaseActivity gemPurchaseActivity);
-
- void inject(TaskFilterDialog taskFilterDialog);
-
- void inject(TaskReceiver taskReceiver);
-
- void inject(TaskAlarmBootReceiver taskAlarmBootReceiver);
-
- void inject(HabiticaFirebaseMessagingService habiticaFirebaseMessagingService);
-
- void inject(BaseWidgetProvider baseWidgetProvider);
-
- void inject(NotificationPublisher notificationPublisher);
-
- void inject(ChallengeFormActivity challengeFormActivity);
-
- void inject(TavernDetailFragment tavernDetailFragment);
-
- void inject(PartyDetailFragment partyDetailFragment);
-
- void inject(QuestDetailFragment questDetailFragment);
-
- void inject(PurchaseDialog purchaseDialog);
-
- void inject(FixCharacterValuesActivity fixCharacterValuesActivity);
-
- void inject(StatsFragment statsFragment);
-
- void inject(BulkAllocateStatsDialog bulkAllocateStatsDialog);
-
- void inject(PushNotificationsPreferencesFragment pushNotificationsPreferencesFragment);
-
- void inject(WelcomeFragment welcomeFragment);
-
- void inject(NavigationDrawerFragment navigationDrawerFragment);
-
- void inject(ChallengeDetailFragment challengeDetailFragment);
-
- void inject(GroupViewModel viewModel);
-
- void inject(NotificationsViewModel viewModel);
-
- void inject(ChatFragment chatFragment);
-
- void inject(GiftSubscriptionActivity giftSubscriptionActivity);
-
- void inject(AboutFragment aboutFragment);
-
- void inject(ChatBarView chatBarView);
-
- void inject(TaskFormActivity taskFormActivity);
-
- void inject(ReportMessageActivity reportMessageActivity);
-
- void inject(GuildDetailFragment guildDetailFragment);
-
- void inject(AchievementsFragment achievementsFragment);
-
- void inject(InboxViewModel inboxViewModel);
-
- void inject(InsufficientGemsDialog insufficientGemsDialog);
-
- void inject(GiftGemsActivity giftGemsActivity);
-
- void inject(GiftPurchaseGemsFragment giftPurchaseGemsFragment);
-
- void inject(GiftBalanceGemsFragment giftBalanceGemsFragment);
-
- void inject(EmailNotificationsPreferencesFragment emailNotificationsPreferencesFragment);
-
- void inject(SupportMainFragment supportMainFragment);
-
- void inject(BugFixFragment bugFixFragment);
-
- void inject(FAQDetailFragment faqDetailFragment);
-
- void inject(AdventureGuideActivity adventureGuideFragment);
-
- void inject(PromoInfoFragment promoInfoFragment);
-
- void inject(@NotNull GuildOverviewFragment guildOverviewFragment);
-
- void inject(@NotNull PromoWebFragment promoWebFragment);
-
- void inject(@NotNull ItemDialogFragment itemDialogFragment);
-
- void inject(@NotNull EquipmentOverviewViewModel equipmentOverviewViewModel);
-
- void inject(@NotNull AccountPreferenceFragment accountPreferenceFragment);
-
- void inject(@NotNull AuthenticationViewModel authenticationViewModel);
-
- void inject(@NotNull MainActivityViewModel mainActivityViewModel);
-
- void inject(@NotNull GuidelinesActivity guidelinesActivity);
-
- void inject(@NotNull MainUserViewModel mainUserViewModel);
-
- void inject(@NotNull PetSuggestHatchDialog petSuggestHatchDialog);
-
- void inject(@NotNull ArmoireActivity armoireActivity);
-
- void inject(@NotNull TasksViewModel tasksViewModel);
-
- void inject(@NotNull StableViewModel stableViewModel);
-
- void inject(@NotNull DeathActivity deathActivity);
-
- void inject(@NotNull DeviceCommunicationService deviceCommunicationService);
-
- void inject(@NotNull TaskSummaryActivity taskSummaryActivity);
-
- void inject(@NotNull TaskSummaryViewModel taskSummaryViewModel);
-
- void inject(@NotNull TaskFormViewModel taskFormViewModel);
-
- void inject(@NotNull AvatarEquipmentFragment avatarEquipmentFragment);
-
- void inject(@NotNull BirthdayActivity birthdayActivity);
-
- void inject(@NotNull PartySeekingFragment partySeekingFragment);
-
- void inject(@NotNull PartySeekingViewModel partySeekingViewModel);
-
- void inject(@NotNull PartyInvitePagerFragment partyInvitePagerFragment);
-}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.kt
new file mode 100644
index 000000000..78b152db1
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.kt
@@ -0,0 +1,13 @@
+package com.habitrpg.android.habitica.components
+
+import com.habitrpg.android.habitica.modules.UserModule
+import com.habitrpg.android.habitica.modules.UserRepositoryModule
+import dagger.Subcomponent
+import dagger.hilt.android.scopes.ActivityRetainedScoped
+import dagger.hilt.android.scopes.ServiceScoped
+
+@ActivityRetainedScoped
+@ServiceScoped
+@Subcomponent(modules = [UserModule::class, UserRepositoryModule::class])
+interface UserComponent {
+}
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 f1fbe95a6..99549ffda 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
@@ -102,7 +102,6 @@ class ApiClientImpl(
private var hadError = false
init {
- HabiticaBaseApplication.userComponent?.inject(this)
analyticsManager.setUserIdentifier(this.hostConfig.userID)
buildRetrofit()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.kt
index 0822bb3b9..594d0622f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.kt
@@ -1,22 +1,14 @@
package com.habitrpg.android.habitica.helpers
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.MainScope
import javax.inject.Inject
-class SoundManager {
-
- @Inject
- lateinit var soundFileLoader: SoundFileLoader
+class SoundManager @Inject constructor(var soundFileLoader: SoundFileLoader) {
var soundTheme: String = SoundThemeOff
private val loadedSoundFiles: MutableMap = HashMap()
- init {
- HabiticaBaseApplication.userComponent?.inject(this)
- }
-
fun preloadAllFiles() {
loadedSoundFiles.clear()
if (soundTheme == SoundThemeOff) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/UserScope.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/UserScope.kt
deleted file mode 100644
index bffb030f2..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/UserScope.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.habitrpg.android.habitica.helpers
-
-import javax.inject.Scope
-
-@Scope
-@Retention(AnnotationRetention.RUNTIME)
-annotation class UserScope
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 75dc272a8..7be4c1ef3 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
@@ -3,35 +3,21 @@ package com.habitrpg.android.habitica.helpers.notifications
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
-import com.habitrpg.android.habitica.HabiticaBaseApplication
-import com.habitrpg.android.habitica.components.UserComponent
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@AndroidEntryPoint
class HabiticaFirebaseMessagingService : FirebaseMessagingService() {
- private val userComponent: UserComponent?
- get() = HabiticaBaseApplication.userComponent
-
@Inject
internal lateinit var pushNotificationManager: PushNotificationManager
override fun onMessageReceived(remoteMessage: RemoteMessage) {
- try {
- userComponent?.inject(this)
- } catch (_: java.lang.IllegalStateException) {
- }
PushNotificationManager.displayNotification(remoteMessage, applicationContext)
-
- if (remoteMessage.data["identifier"]?.contains(PushNotificationManager.WON_CHALLENGE_PUSH_NOTIFICATION_KEY) == true) {
- // if (this::userRepository.isInitialized) {
- // userRepository.retrieveUser(true).subscribe({}, RxErrorHandler.handleEmptyError())
- // }
- }
}
override fun onNewToken(s: String) {
super.onNewToken(s)
- userComponent?.inject(this)
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
val refreshedToken = task.result
if (refreshedToken != null && this::pushNotificationManager.isInitialized) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt
index 157d43088..8268b89f5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt
@@ -13,11 +13,15 @@ import com.habitrpg.common.habitica.helpers.AnalyticsManager
import com.habitrpg.common.habitica.helpers.KeyHelper
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.lang.ref.WeakReference
import javax.inject.Singleton
+@InstallIn(SingletonComponent::class)
@Module
open class ApiModule {
@Provides
@@ -25,7 +29,7 @@ open class ApiModule {
fun providesHostConfig(
sharedPreferences: SharedPreferences,
keyHelper: KeyHelper?,
- context: Context
+ @ApplicationContext context: Context
): HostConfig {
return HostConfig(sharedPreferences, keyHelper, context)
}
@@ -48,7 +52,7 @@ open class ApiModule {
hostConfig: HostConfig,
analyticsManager: AnalyticsManager,
notificationsManager: NotificationsManager,
- context: Context
+ @ApplicationContext context: Context
): ApiClient {
val apiClient = ApiClientImpl(
gsonConverter,
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt
index 25e29814e..92d7634c3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.kt
@@ -1,6 +1,5 @@
package com.habitrpg.android.habitica.modules
-import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import android.content.res.Resources
@@ -9,13 +8,15 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.SoundFileLoader
-import com.habitrpg.android.habitica.helpers.SoundManager
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
import com.habitrpg.common.habitica.helpers.KeyHelper
import com.habitrpg.common.habitica.helpers.KeyHelper.Companion.getInstance
import com.habitrpg.shared.habitica.HLogger
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import java.io.IOException
import java.security.KeyStore
import java.security.KeyStoreException
@@ -23,17 +24,12 @@ import java.security.NoSuchAlgorithmException
import java.security.cert.CertificateException
import javax.inject.Singleton
+@InstallIn(SingletonComponent::class)
@Module
-class AppModule(private val application: Application) {
+class AppModule {
@Provides
@Singleton
- fun providesContext(): Context {
- return application
- }
-
- @Provides
- @Singleton
- fun provideSharedPreferences(context: Context): SharedPreferences {
+ fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
return PreferenceManager.getDefaultSharedPreferences(context)
}
@@ -57,7 +53,7 @@ class AppModule(private val application: Application) {
@Provides
fun provideKeyHelper(
- context: Context,
+ @ApplicationContext context: Context,
sharedPreferences: SharedPreferences,
keyStore: KeyStore?
): KeyHelper? {
@@ -67,27 +63,21 @@ class AppModule(private val application: Application) {
}
@Provides
- fun providesResources(context: Context): Resources {
+ fun providesResources(@ApplicationContext context: Context): Resources {
return context.resources
}
@Provides
- fun providesSoundFileLoader(context: Context): SoundFileLoader {
+ fun providesSoundFileLoader(@ApplicationContext context: Context): SoundFileLoader {
return SoundFileLoader(context)
}
- @Provides
- @Singleton
- fun providesSoundManager(): SoundManager {
- return SoundManager()
- }
-
@Provides
@Singleton
fun pushNotificationManager(
apiClient: ApiClient,
sharedPreferences: SharedPreferences,
- context: Context
+ @ApplicationContext context: Context
): PushNotificationManager {
return PushNotificationManager(apiClient, sharedPreferences, context)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/DeveloperModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/DeveloperModule.kt
index 48e927953..91b2e8339 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/DeveloperModule.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/DeveloperModule.kt
@@ -5,14 +5,18 @@ import com.habitrpg.android.habitica.proxy.implementation.EmptyAnalyticsManager
import com.habitrpg.common.habitica.helpers.AnalyticsManager
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
// provide proxy class for libraries(to avoid 65k limit)
+@InstallIn(SingletonComponent::class)
@Module
open class DeveloperModule {
@Provides
@Singleton
- open fun provideAnalyticsManager(context: Context): AnalyticsManager {
+ open fun provideAnalyticsManager(@ApplicationContext context: Context): AnalyticsManager {
return EmptyAnalyticsManager()
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt
index eba641a84..9042cb1e9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.kt
@@ -8,8 +8,12 @@ import com.habitrpg.android.habitica.data.local.ContentLocalRepository
import com.habitrpg.android.habitica.data.local.implementation.RealmContentLocalRepository
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import io.realm.Realm
+@InstallIn(SingletonComponent::class)
@Module
open class RepositoryModule {
@Provides
@@ -26,7 +30,7 @@ open class RepositoryModule {
fun providesContentRepository(
contentLocalRepository: ContentLocalRepository,
apiClient: ApiClient,
- context: Context
+ @ApplicationContext context: Context
): ContentRepository {
return ContentRepositoryImpl(
contentLocalRepository,
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 e665812db..2f97fc2aa 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
@@ -7,18 +7,20 @@ import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
-import com.habitrpg.android.habitica.helpers.UserScope
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import javax.inject.Named
+@InstallIn(SingletonComponent::class)
@Module
class UserModule {
@Provides
- @UserScope
fun providesTaskAlarmManager(
- context: Context,
+ @ApplicationContext context: Context,
taskRepository: TaskRepository,
@Named(NAMED_USER_ID) userId: String
): TaskAlarmManager {
@@ -27,7 +29,6 @@ class UserModule {
@Provides
@Named(NAMED_USER_ID)
- @UserScope
fun providesUserID(sharedPreferences: SharedPreferences): String {
return if (BuildConfig.DEBUG && BuildConfig.TEST_USER_ID.isNotEmpty()) {
BuildConfig.TEST_USER_ID
@@ -37,7 +38,6 @@ class UserModule {
}
@Provides
- @UserScope
fun providesUserViewModel(
@Named(NAMED_USER_ID) userID: String,
userRepository: UserRepository,
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt
index 54ffa1532..78c167b7f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt
@@ -42,18 +42,21 @@ import com.habitrpg.android.habitica.data.local.implementation.RealmTutorialLoca
import com.habitrpg.android.habitica.data.local.implementation.RealmUserLocalRepository
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.PurchaseHandler
-import com.habitrpg.android.habitica.helpers.UserScope
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.helpers.AnalyticsManager
import dagger.Module
import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
import io.realm.Realm
import javax.inject.Named
+@InstallIn(SingletonComponent::class)
@Module
class UserRepositoryModule {
@Provides
- fun providesSetupCustomizationRepository(context: Context?): SetupCustomizationRepository {
+ fun providesSetupCustomizationRepository(@ApplicationContext context: Context?): SetupCustomizationRepository {
return SetupCustomizationRepositoryImpl(context!!)
}
@@ -63,7 +66,6 @@ class UserRepositoryModule {
}
@Provides
- @UserScope
fun providesTaskRepository(
localRepository: TaskLocalRepository,
apiClient: ApiClient,
@@ -148,9 +150,7 @@ class UserRepositoryModule {
@Provides
fun providesInventoryLocalRepository(
- realm: Realm?,
- context: Context?
- ): InventoryLocalRepository {
+ realm: Realm?): InventoryLocalRepository {
return RealmInventoryLocalRepository(realm!!)
}
@@ -207,9 +207,8 @@ class UserRepositoryModule {
}
@Provides
- @UserScope
fun providesPurchaseHandler(
- context: Context,
+ @ApplicationContext context: Context,
analyticsManager: AnalyticsManager,
apiClient: ApiClient,
userViewModel: MainUserViewModel
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 91be85d4c..ad556a3dd 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
@@ -4,14 +4,15 @@ import android.content.Intent
import com.google.android.gms.wearable.MessageEvent
import com.google.android.gms.wearable.Wearable
import com.google.android.gms.wearable.WearableListenerService
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
import com.habitrpg.common.habitica.api.HostConfig
import com.habitrpg.common.habitica.helpers.DeviceCommunication
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@AndroidEntryPoint
class DeviceCommunicationService : WearableListenerService() {
@Inject
lateinit var hostConfig: HostConfig
@@ -19,7 +20,6 @@ class DeviceCommunicationService : WearableListenerService() {
private val messageClient by lazy { Wearable.getMessageClient(this) }
init {
- HabiticaBaseApplication.userComponent?.inject(this)
}
override fun onMessageReceived(event: MessageEvent) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.kt
index 5ae4c18c1..1d98334ed 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.kt
@@ -8,7 +8,6 @@ import android.text.Spannable
import android.widget.Toast
import androidx.core.app.NotificationManagerCompat
import androidx.core.app.RemoteInput
-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.SocialRepository
@@ -18,10 +17,12 @@ import com.habitrpg.android.habitica.interactors.NotifyUserUseCase
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class LocalNotificationActionReceiver : BroadcastReceiver() {
@Inject
lateinit var userRepository: UserRepository
@@ -46,7 +47,6 @@ class LocalNotificationActionReceiver : BroadcastReceiver() {
private var intent: Intent? = null
override fun onReceive(context: Context, intent: Intent) {
- HabiticaBaseApplication.userComponent?.inject(this)
this.intent = intent
this.context = context
handleLocalNotificationAction(intent.action)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt
index 00a41e7eb..8e06e4186 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/NotificationPublisher.kt
@@ -10,7 +10,6 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.core.content.edit
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
@@ -19,6 +18,7 @@ import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import java.util.Calendar
@@ -27,6 +27,7 @@ import java.util.Random
import javax.inject.Inject
// https://gist.github.com/BrandonSmith/6679223
+@AndroidEntryPoint
class NotificationPublisher : BroadcastReceiver() {
@Inject
@@ -43,8 +44,7 @@ class NotificationPublisher : BroadcastReceiver() {
this.context = context
if (!wasInjected) {
wasInjected = true
- HabiticaBaseApplication.userComponent?.inject(this)
- }
+ }
var wasInactive = false
// Show special notification if user hasn't logged in for a week
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt
index 62719211f..ae2fc610c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskAlarmBootReceiver.kt
@@ -4,15 +4,16 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class TaskAlarmBootReceiver : BroadcastReceiver() {
@Inject
@@ -24,7 +25,6 @@ class TaskAlarmBootReceiver : BroadcastReceiver() {
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
return
}
- HabiticaBaseApplication.userComponent?.inject(this)
MainScope().launch(ExceptionHandler.coroutine()) {
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.kt
index de0d995e9..c899c671a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/TaskReceiver.kt
@@ -10,7 +10,6 @@ import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.extensions.withImmutableFlag
@@ -21,11 +20,13 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class TaskReceiver : BroadcastReceiver() {
@Inject
@@ -36,7 +37,6 @@ class TaskReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")
- HabiticaBaseApplication.userComponent?.inject(this)
val extras = intent.extras
if (extras != null) {
val taskId = extras.getString(TaskAlarmManager.TASK_ID_INTENT_KEY)
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 6ba60fa4d..27177e06b 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
@@ -10,7 +10,9 @@ import androidx.preference.PreferenceManager
import com.habitrpg.android.habitica.databinding.WidgetConfigureAddTaskBinding
import com.habitrpg.android.habitica.widget.AddTaskWidgetProvider
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AddTaskWidgetActivity : AppCompatActivity() {
private var widgetId: Int = 0
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt
index a0d18fd27..c1f90c7fe 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt
@@ -10,7 +10,6 @@ import android.widget.TextView
import androidx.core.app.NavUtils
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.ActivityAdventureGuideBinding
import com.habitrpg.android.habitica.databinding.AdventureGuideItemBinding
import com.habitrpg.android.habitica.helpers.AmplitudeManager
@@ -18,8 +17,10 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.extensions.fromHtml
import com.habitrpg.common.habitica.extensions.loadImage
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@AndroidEntryPoint
class AdventureGuideActivity : BaseActivity() {
private lateinit var binding: ActivityAdventureGuideBinding
@@ -38,10 +39,6 @@ class AdventureGuideActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
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 11711fb39..57706b907 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
@@ -11,7 +11,6 @@ import android.widget.RelativeLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.ActivityArmoireBinding
import com.habitrpg.android.habitica.helpers.AdHandler
@@ -26,11 +25,13 @@ import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.plattysoft.leonids.ParticleSystem
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.util.Locale
import javax.inject.Inject
+@AndroidEntryPoint
class ArmoireActivity : BaseActivity() {
private var equipmentKey: String? = null
@@ -47,10 +48,6 @@ class ArmoireActivity : BaseActivity() {
override fun getLayoutResId(): Int = R.layout.activity_armoire
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun getContentView(layoutResId: Int?): View {
binding = ActivityArmoireBinding.inflate(layoutInflater)
return binding.root
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 9d2597f25..3955d5f94 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
@@ -20,9 +20,7 @@ import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import com.habitrpg.android.habitica.HabiticaApplication
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.extensions.forceLocale
import com.habitrpg.android.habitica.extensions.updateStatusBarColor
@@ -87,7 +85,6 @@ abstract class BaseActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
habiticaApplication
- injectActivity(HabiticaBaseApplication.userComponent)
getLayoutResId()?.let {
setContentView(getContentView(it))
}
@@ -178,8 +175,6 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
- protected abstract fun injectActivity(component: UserComponent?)
-
protected fun setupToolbar(toolbar: Toolbar?) {
this.toolbar = toolbar
if (toolbar != null) {
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 77d720601..825104961 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
@@ -74,6 +74,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.map
@@ -82,6 +83,7 @@ import java.text.SimpleDateFormat
import java.util.Date
import javax.inject.Inject
+@AndroidEntryPoint
class BirthdayActivity : BaseActivity() {
@Inject
lateinit var userViewModel: MainUserViewModel
@@ -189,10 +191,6 @@ class BirthdayActivity : BaseActivity() {
userRepository.retrieveUser(false, true)
isPurchasing.value = false
}
-
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
}
@Composable
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 f9c2ccf27..92271c630 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
@@ -18,7 +18,6 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.AppCompatCheckedTextView
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityCreateChallengeBinding
@@ -39,6 +38,7 @@ import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.firstOrNull
@@ -46,6 +46,7 @@ import kotlinx.coroutines.launch
import java.util.UUID
import javax.inject.Inject
+@AndroidEntryPoint
class ChallengeFormActivity : BaseActivity() {
private lateinit var binding: ActivityCreateChallengeBinding
@@ -118,10 +119,6 @@ class ChallengeFormActivity : BaseActivity() {
return R.layout.activity_create_challenge
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu_create_challenge, menu)
@@ -224,11 +221,11 @@ class ChallengeFormActivity : BaseActivity() {
val intent = intent
val bundle = intent.extras
- ChallengeTasksRecyclerViewAdapter(
+ /*ChallengeTasksRecyclerViewAdapter(
TasksViewModel(), 0, this, "",
openTaskDisabled = false,
taskActionsDisabled = true
- ).also { challengeTasks = it }
+ ).also { challengeTasks = it }*/
challengeTasks.onTaskOpen = {
if (it.isValid) {
openNewTaskActivity(it.type, it)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
index ee6125cc5..b79cdc72d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
@@ -11,7 +11,6 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.navigation.navArgs
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.ActivityClassSelectionBinding
import com.habitrpg.android.habitica.models.user.Gear
import com.habitrpg.android.habitica.models.user.Items
@@ -23,9 +22,11 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class ClassSelectionActivity : BaseActivity() {
@Inject
@@ -152,10 +153,6 @@ class ClassSelectionActivity : BaseActivity() {
binding.warriorButton.setCompoundDrawablesWithIntrinsicBounds(warriorIcon, null, null, null)
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
private fun makeUser(preferences: Preferences, outfit: Outfit): User {
val user = User()
user.preferences = preferences
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 a089fff6b..e90749dc0 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
@@ -7,7 +7,6 @@ import android.view.View
import android.view.animation.AccelerateInterpolator
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.ActivityDeathBinding
import com.habitrpg.android.habitica.extensions.observeOnce
@@ -21,9 +20,11 @@ import com.habitrpg.common.habitica.extensions.fromHtml
import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.plattysoft.leonids.ParticleSystem
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class DeathActivity : BaseActivity() {
private lateinit var binding: ActivityDeathBinding
@@ -36,10 +37,6 @@ class DeathActivity : BaseActivity() {
override fun getLayoutResId(): Int = R.layout.activity_armoire
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun getContentView(layoutResId: Int?): View {
binding = ActivityDeathBinding.inflate(layoutInflater)
return binding.root
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 ac9f25d1b..f9ad1be2f 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
@@ -8,15 +8,16 @@ import android.view.View
import android.widget.EditText
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
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.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@AndroidEntryPoint
class FixCharacterValuesActivity : BaseActivity() {
private lateinit var binding: ActivityFixcharacterBinding
@@ -31,10 +32,6 @@ class FixCharacterValuesActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
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 50f8beca6..5166e040b 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
@@ -22,7 +22,6 @@ import androidx.core.view.MenuCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
@@ -48,6 +47,7 @@ import com.habitrpg.common.habitica.helpers.RecyclerViewState
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.common.habitica.views.PixelArtView
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
@@ -58,6 +58,7 @@ import javax.inject.Inject
import kotlin.math.floor
import kotlin.math.min
+@AndroidEntryPoint
class FullProfileActivity : BaseActivity() {
private var blocks: List = listOf()
private var isModerator = false
@@ -717,10 +718,6 @@ class FullProfileActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
companion object {
fun open(userId: String) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
index 76183fa63..1bad732a6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
@@ -4,19 +4,17 @@ import android.os.Bundle
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.ui.fragments.purchases.GemsPurchaseFragment
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GemPurchaseActivity : PurchaseActivity() {
override fun getLayoutResId(): Int {
return R.layout.activity_gem_purchase
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt
index 6ff7761e8..1d3864a18 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftGemsActivity.kt
@@ -8,7 +8,6 @@ import androidx.navigation.navArgs
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityGiftGemsBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -18,10 +17,12 @@ import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragm
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftPurchaseGemsFragment
import com.habitrpg.android.habitica.ui.views.CurrencyView
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class GiftGemsActivity : PurchaseActivity() {
private lateinit var binding: ActivityGiftGemsBinding
@@ -54,10 +55,6 @@ class GiftGemsActivity : PurchaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt
index 9d555b59f..069b0a1f1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftSubscriptionActivity.kt
@@ -7,7 +7,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.navArgs
import com.android.billingclient.api.ProductDetails
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityGiftSubscriptionBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -15,12 +14,14 @@ import com.habitrpg.android.habitica.helpers.PurchaseHandler
import com.habitrpg.android.habitica.helpers.PurchaseTypes
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
+@AndroidEntryPoint
class GiftSubscriptionActivity : PurchaseActivity() {
private lateinit var binding: ActivityGiftSubscriptionBinding
@@ -42,10 +43,6 @@ class GiftSubscriptionActivity : PurchaseActivity() {
return R.layout.activity_gift_subscription
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun getContentView(layoutResId: Int?): View {
binding = ActivityGiftSubscriptionBinding.inflate(layoutInflater)
return binding.root
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.kt
index 3ebc9adc9..544d3a6b1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupFormActivity.kt
@@ -5,12 +5,13 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.ActivityGroupFormBinding
import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.common.habitica.helpers.MarkdownParser
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GroupFormActivity : BaseActivity() {
private lateinit var binding: ActivityGroupFormBinding
@@ -65,10 +66,6 @@ class GroupFormActivity : BaseActivity() {
}
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
private fun fillForm() {
binding.groupNameEditText.setText(groupName)
binding.groupDescriptionEditText.setText(groupDescription)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
index aca79ac48..27c23e6b5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GroupInviteActivity.kt
@@ -10,19 +10,16 @@ import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityPartyInviteBinding
-import com.habitrpg.android.habitica.extensions.runDelayed
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
-import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
-import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import javax.inject.Named
-import kotlin.time.DurationUnit
+@AndroidEntryPoint
class GroupInviteActivity : BaseActivity() {
private lateinit var binding: ActivityPartyInviteBinding
@@ -53,10 +50,6 @@ class GroupInviteActivity : BaseActivity() {
setViewPagerAdapter()
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_party_invite, menu)
return super.onCreateOptionsMenu(menu)
@@ -68,12 +61,6 @@ class GroupInviteActivity : BaseActivity() {
R.id.action_send_invites -> {
setResult(Activity.RESULT_OK, createResultIntent())
dismissKeyboard()
- if (fragments.size > binding.viewPager.currentItem && fragments[binding.viewPager.currentItem].values.isNotEmpty()) {
- showSnackbar(binding.snackbarView, "Invite Sent!", HabiticaSnackbar.SnackbarDisplayType.SUCCESS)
- runDelayed(1, DurationUnit.SECONDS, this::finish)
- } else {
- finish()
- }
true
}
android.R.id.home -> {
@@ -87,13 +74,6 @@ class GroupInviteActivity : BaseActivity() {
private fun createResultIntent(): Intent {
val intent = Intent()
if (fragments.size == 0) return intent
- for (fragment in fragments) {
- if (fragment.isEmailInvite) {
- intent.putExtra(EMAILS_KEY, fragment.values)
- } else {
- intent.putExtra(USER_IDS_KEY, fragment.values)
- }
- }
return intent
}
@@ -103,7 +83,6 @@ class GroupInviteActivity : BaseActivity() {
val statePagerAdapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
override fun createFragment(position: Int): Fragment {
val fragment = PartyInviteFragment()
- fragment.isEmailInvite = position == 1
fragments.add(fragment)
return fragment
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
index c0cb54434..0d001b1a6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GuidelinesActivity.kt
@@ -4,9 +4,9 @@ import android.os.Bundle
import android.view.MenuItem
import android.widget.TextView
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.setMarkdown
+import dagger.hilt.android.AndroidEntryPoint
import okhttp3.Call
import okhttp3.Callback
import okhttp3.OkHttpClient
@@ -16,13 +16,10 @@ import java.io.BufferedReader
import java.io.IOException
import java.io.InputStreamReader
+@AndroidEntryPoint
class GuidelinesActivity : BaseActivity() {
override fun getLayoutResId(): Int = R.layout.activity_guidelines
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupToolbar(findViewById(R.id.toolbar))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.kt
index bb2094924..fc406de64 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/HabitButtonWidgetActivity.kt
@@ -9,7 +9,6 @@ import androidx.core.content.edit
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.databinding.WidgetConfigureHabitButtonBinding
import com.habitrpg.android.habitica.modules.AppModule
@@ -17,6 +16,7 @@ import com.habitrpg.android.habitica.ui.adapter.SkillTasksRecyclerViewAdapter
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
@@ -25,6 +25,7 @@ import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+@AndroidEntryPoint
class HabitButtonWidgetActivity : BaseActivity() {
private val job = SupervisorJob()
@@ -47,10 +48,6 @@ class HabitButtonWidgetActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
index b528f5fe0..be429304f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.kt
@@ -13,15 +13,16 @@ import androidx.fragment.app.FragmentStatePagerAdapter
import androidx.lifecycle.lifecycleScope
import androidx.viewpager.widget.ViewPager
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.viewpagerindicator.IconPagerAdapter
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
private lateinit var binding: ActivityIntroBinding
@@ -54,10 +55,6 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
private fun setupIntro() {
binding.viewPager.adapter = PagerAdapter(supportFragmentManager)
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 79b1edc56..eb2f2816b 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
@@ -32,7 +32,6 @@ import com.google.android.gms.wearable.MessageClient
import com.google.android.gms.wearable.Wearable
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.databinding.ActivityLoginBinding
import com.habitrpg.android.habitica.extensions.addCancelButton
@@ -46,13 +45,14 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.models.auth.UserAuthResponse
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class LoginActivity : BaseActivity() {
- private lateinit var viewModel: AuthenticationViewModel
private lateinit var binding: ActivityLoginBinding
@Inject
@@ -61,6 +61,8 @@ class LoginActivity : BaseActivity() {
lateinit var sharedPrefs: SharedPreferences
@Inject
lateinit var configManager: AppConfigManager
+ @Inject
+ lateinit var viewModel : AuthenticationViewModel
private var isRegistering: Boolean = false
private var isShowingForm: Boolean = false
@@ -141,7 +143,6 @@ class LoginActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
window.requestFeature(Window.FEATURE_ACTION_BAR)
super.onCreate(savedInstanceState)
- viewModel = AuthenticationViewModel()
supportActionBar?.hide()
// Set default values to avoid null-responses when requesting unedited settings
PreferenceManager.setDefaultValues(this, R.xml.preferences_fragment, false)
@@ -189,10 +190,6 @@ class LoginActivity : BaseActivity() {
}
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
private fun resetLayout() {
if (this.isRegistering) {
if (binding.email.visibility == View.GONE) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
index 9f4c7e58d..f05351cdd 100755
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
@@ -30,7 +30,6 @@ import com.google.android.gms.wearable.Wearable
import com.google.firebase.perf.FirebasePerformance
import com.habitrpg.android.habitica.BuildConfig
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.TaskRepository
@@ -72,6 +71,7 @@ import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.views.AvatarView
import com.habitrpg.shared.habitica.models.responses.MaintenanceResponse
import com.habitrpg.shared.habitica.models.responses.TaskScoringResult
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
@@ -84,6 +84,7 @@ import kotlin.time.toDuration
var mainActivityCreatedAt: Date? = null
+@AndroidEntryPoint
open class MainActivity : BaseActivity(), SnackbarActivity {
private var launchScreen: String? = null
@@ -350,10 +351,6 @@ open class MainActivity : BaseActivity(), SnackbarActivity {
} else super.onOptionsItemSelected(item)
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onResume() {
super.onResume()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.kt
index d5fd83378..26941cbee 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.kt
@@ -8,13 +8,14 @@ import androidx.core.net.toUri
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.api.MaintenanceApiService
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.databinding.ActivityMaintenanceBinding
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.helpers.setMarkdown
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@AndroidEntryPoint
class MaintenanceActivity : BaseActivity() {
private lateinit var binding: ActivityMaintenanceBinding
@@ -58,10 +59,6 @@ class MaintenanceActivity : BaseActivity() {
binding.playStoreButton.setOnClickListener { openInPlayStore() }
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onResume() {
super.onResume()
if (!isDeprecationNotice) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
index 3ff11c630..06069a04b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/NotificationsActivity.kt
@@ -15,7 +15,6 @@ import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityNotificationsBinding
@@ -37,10 +36,12 @@ import com.habitrpg.common.habitica.models.notifications.PartyInvitationData
import com.habitrpg.common.habitica.models.notifications.QuestInvitationData
import com.habitrpg.common.habitica.models.notifications.UnallocatedPointsData
import com.habitrpg.common.habitica.views.PixelArtView
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
private lateinit var binding: ActivityNotificationsBinding
@@ -79,10 +80,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
binding.notificationsRefreshLayout.setOnRefreshListener(this)
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onSupportNavigateUp(): Boolean {
if (supportFragmentManager.backStackEntryCount > 0) {
onBackPressed()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
index 6a4f312c5..51b307b62 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/PrefsActivity.kt
@@ -5,13 +5,14 @@ import android.view.ViewGroup
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.ui.fragments.preferences.AccountPreferenceFragment
import com.habitrpg.android.habitica.ui.fragments.preferences.EmailNotificationsPreferencesFragment
import com.habitrpg.android.habitica.ui.fragments.preferences.PreferencesFragment
import com.habitrpg.android.habitica.ui.fragments.preferences.PushNotificationsPreferencesFragment
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback, SnackbarActivity {
override fun getLayoutResId(): Int = R.layout.activity_prefs
@@ -26,10 +27,6 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
.commit()
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onSupportNavigateUp(): Boolean {
if (supportFragmentManager.backStackEntryCount > 0) {
onBackPressed()
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 0eaf36795..78a060920 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
@@ -12,16 +12,17 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.navArgs
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivityReportMessageBinding
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.setMarkdown
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class ReportMessageActivity : BaseActivity() {
private lateinit var binding: ActivityReportMessageBinding
@@ -39,10 +40,6 @@ class ReportMessageActivity : BaseActivity() {
return R.layout.activity_report_message
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun getContentView(layoutResId: Int?): View {
binding = ActivityReportMessageBinding.inflate(layoutInflater)
return binding.root
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 ffbfac8cc..01f34d28f 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
@@ -18,7 +18,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import androidx.viewpager.widget.ViewPager
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.TaskRepository
@@ -31,6 +30,7 @@ import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.viewpagerindicator.IconPagerAdapter
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.launch
@@ -39,6 +39,7 @@ import java.util.Locale
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
+@AndroidEntryPoint
class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
private lateinit var binding: ActivitySetupBinding
@@ -108,10 +109,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
binding.nextButton.setOnClickListener { nextClicked() }
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onDestroy() {
userRepository.close()
super.onDestroy()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
index 2a21886aa..f2c720a27 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SkillMemberActivity.kt
@@ -7,19 +7,20 @@ import android.view.View
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.ActivitySkillMembersBinding
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class SkillMemberActivity : BaseActivity() {
private lateinit var binding: ActivitySkillMembersBinding
private var viewAdapter: PartyMemberRecyclerViewAdapter? = null
@@ -33,10 +34,6 @@ class SkillMemberActivity : BaseActivity() {
return R.layout.activity_skill_members
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun getContentView(layoutResId: Int?): View {
binding = ActivitySkillMembersBinding.inflate(layoutInflater)
return binding.root
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 59e2a03ab..fbd500c0c 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
@@ -10,16 +10,17 @@ import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.databinding.ActivitySkillTasksBinding
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import javax.inject.Named
+@AndroidEntryPoint
class SkillTasksActivity : BaseActivity() {
private lateinit var binding: ActivitySkillTasksBinding
@@ -45,10 +46,6 @@ class SkillTasksActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
private fun loadTaskLists() {
val statePagerAdapter = object : FragmentStateAdapter(supportFragmentManager, lifecycle) {
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 19717e335..90b923dc1 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
@@ -69,6 +69,7 @@ import com.habitrpg.shared.habitica.models.tasks.Frequency
import com.habitrpg.shared.habitica.models.tasks.HabitResetOption
import com.habitrpg.shared.habitica.models.tasks.TaskDifficulty
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import io.realm.RealmList
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.firstOrNull
@@ -77,6 +78,7 @@ import kotlinx.coroutines.launch
import java.util.Date
import javax.inject.Inject
+@AndroidEntryPoint
class TaskFormActivity : BaseActivity() {
private val viewModel: TaskFormViewModel by viewModels()
@@ -172,10 +174,6 @@ class TaskFormActivity : BaseActivity() {
return binding.root
}
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
overrideModernHeader = false
val bundle = intent.extras ?: return
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 e2cae4535..34b49f837 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
@@ -38,68 +38,51 @@ import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withStyle
-import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.asLiveData
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.TaskDescriptionBuilder
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
+import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.CompletedAt
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.UserRow
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.Flow
import java.text.DateFormat
import java.util.Date
-import javax.inject.Inject
-class TaskSummaryViewModel(val taskId: String) : BaseViewModel() {
- @Inject
- lateinit var taskRespository: TaskRepository
+class TaskSummaryViewModel(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val taskRepository : TaskRepository,
+ val socialRepository : SocialRepository
+) : BaseViewModel(userRepository, userViewModel) {
+ val taskID : String = ""
- @Inject
- lateinit var socialRepository: SocialRepository
+ val task = taskRepository.getTask(taskID).asLiveData()
- val task = taskRespository.getTask(taskId).asLiveData()
-
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
- fun getMember(userID: String?): Flow {
+ fun getMember(userID : String?) : Flow {
return socialRepository.getMember(userID)
}
-
- @Suppress("UNCHECKED_CAST")
- class Factory(private val taskID: String) : ViewModelProvider.Factory {
- override fun create(modelClass: Class): T {
- return TaskSummaryViewModel(taskID) as T
- }
- }
}
+@AndroidEntryPoint
class TaskSummaryActivity : BaseActivity() {
- override fun getLayoutResId(): Int? = null
+ override fun getLayoutResId() : Int? = null
- private val viewModel: TaskSummaryViewModel by viewModels {
- TaskSummaryViewModel.Factory(
- intent.extras?.getString(
- TaskFormActivity.TASK_ID_KEY
- ) ?: ""
- )
- }
+ private val viewModel : TaskSummaryViewModel by viewModels()
- override fun onCreate(savedInstanceState: Bundle?) {
+ override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HabiticaTheme {
@@ -107,14 +90,10 @@ class TaskSummaryActivity : BaseActivity() {
}
}
}
-
- override fun injectActivity(component: UserComponent?) {
- component?.inject(this)
- }
}
@Composable
-fun TaskSummaryView(viewModel: TaskSummaryViewModel) {
+fun TaskSummaryView(viewModel : TaskSummaryViewModel) {
val taskDescriptionBuilder = TaskDescriptionBuilder(LocalContext.current)
val task by viewModel.task.observeAsState()
val titleModifier = Modifier.padding(top = 30.dp)
@@ -327,7 +306,7 @@ fun TaskSummaryView(viewModel: TaskSummaryViewModel) {
}
}
-private fun String.makeBoldComposable(): AnnotatedString {
+private fun String.makeBoldComposable() : AnnotatedString {
return buildAnnotatedString {
var isBold = false
for (segment in split("**")) {
@@ -338,9 +317,3 @@ private fun String.makeBoldComposable(): AnnotatedString {
}
}
}
-
-@Preview
-@Composable
-private fun TaskSummaryViewPreview() {
- TaskSummaryView(TaskSummaryViewModel(""))
-}
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 46226afa5..8817c2332 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
@@ -5,7 +5,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.CustomizationGridItemBinding
import com.habitrpg.android.habitica.databinding.CustomizationSectionFooterBinding
@@ -15,7 +14,6 @@ import com.habitrpg.android.habitica.models.inventory.Customization
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
-import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.AvatarView
@@ -44,6 +42,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
private var pinnedItemKeys: List = ArrayList()
var onCustomizationSelected: ((Customization) -> Unit)? = null
+ var onShowPurchaseDialog: ((ShopItem) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder {
return when (viewType) {
@@ -212,9 +211,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
dialog.show()
} else {
customization?.let {
- val dialog = PurchaseDialog(itemView.context, HabiticaBaseApplication.userComponent, ShopItem.fromCustomization(it, userSize, hairColor))
- if (it.type == "background") dialog.isPinned = pinnedItemKeys.contains(ShopItem.fromCustomization(it, userSize, hairColor).key)
- dialog.show()
+ onShowPurchaseDialog?.invoke(ShopItem.fromCustomization(it, userSize, hairColor))
}
}
return
@@ -293,8 +290,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
override fun onClick(v: View) {
set?.let {
- val dialog = PurchaseDialog(itemView.context, HabiticaBaseApplication.userComponent, ShopItem.fromCustomizationSet(it, additionalSetItems, userSize, hairColor))
- dialog.show()
+ onShowPurchaseDialog?.invoke(ShopItem.fromCustomizationSet(it, additionalSetItems, userSize, hairColor))
}
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
index 1cba9f788..c2fd65054 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
@@ -22,6 +22,7 @@ import com.habitrpg.common.habitica.extensions.fromHtml
class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter() {
var onNeedsRefresh: (() -> Unit)? = null
+ var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null
private val items: MutableList = ArrayList()
private var shopIdentifier: String? = null
@@ -96,6 +97,7 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter
val formattedNumber = NumberAbbreviator.abbreviate(itemView.context, guild.memberCount.toDouble(), number)
binding.guildBadgeView.setImageBitmap(
HabiticaIconsHelper.imageOfGuildCrest(
- itemView.context,
false,
false,
guild.memberCount.toFloat(),
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt
index d700317cb..2576ea062 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt
@@ -6,7 +6,6 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
@@ -33,10 +32,6 @@ class ChallengeTasksRecyclerViewAdapter(
var onAddItem: ((Task) -> Unit)? = null
var onTaskOpen: ((Task) -> Unit)? = null
- override fun injectThis(component: UserComponent) {
- component.inject(this)
- }
-
override fun getItemViewType(position: Int): Int {
val task = this.filteredContent?.get(position)
@@ -86,13 +81,13 @@ class ChallengeTasksRecyclerViewAdapter(
*/
fun replaceTask(task: Task): Boolean {
var i = 0
- while (i < this.content?.size ?: 0) {
+ while (i < (this.content?.size ?: 0)) {
if (content?.get(i)?.id == task.id) {
break
}
++i
}
- if (i < content?.size ?: 0) {
+ if (i < (content?.size ?: 0)) {
content?.set(i, task)
filter()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.kt
index 6e203ff18..3f34942f1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.kt
@@ -4,16 +4,11 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.habitrpg.android.habitica.HabiticaBaseApplication
-import com.habitrpg.android.habitica.components.UserComponent
-import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
-import com.habitrpg.common.habitica.helpers.AnalyticsManager
import com.habitrpg.shared.habitica.models.tasks.TaskType
-import javax.inject.Inject
abstract class BaseTasksRecyclerViewAdapter>(
var taskType: TaskType,
@@ -22,21 +17,14 @@ abstract class BaseTasksRecyclerViewAdapter>(
newContext: Context,
private val userID: String?
) : BaseRecyclerViewAdapter() {
- @Inject
- lateinit var analyticsManager: AnalyticsManager
- @Inject
- lateinit var taskRepository: TaskRepository
protected var content: MutableList? = null
protected var filteredContent: MutableList? = null
internal var context: Context = newContext.applicationContext
init {
this.filteredContent = ArrayList()
- HabiticaBaseApplication.userComponent?.let { injectThis(it) }
}
- protected abstract fun injectThis(component: UserComponent)
-
override fun onBindViewHolder(holder: VH, position: Int) {
val item = filteredContent?.get(position)
if (item != null) {
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 2e61c7f8a..138f706d8 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
@@ -38,6 +38,7 @@ class RewardsRecyclerViewAdapter(
override var brokenTaskEvents: ((Task) -> Unit)? = null
override var adventureGuideOpenEvents: ((Boolean) -> Unit)? = null
var purchaseCardEvents: ((ShopItem) -> Unit)? = null
+ var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null
override var taskDisplayMode: String = "standard"
set(value) {
@@ -80,6 +81,7 @@ class RewardsRecyclerViewAdapter(
} else {
val viewHolder = ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false))
viewHolder.purchaseCardAction = { purchaseCardEvents?.invoke(it) }
+ viewHolder.onShowPurchaseDialog = onShowPurchaseDialog
viewHolder
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
index 52c7dd2d1..d2d09814a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
@@ -12,7 +12,6 @@ import android.widget.Toast
import androidx.core.net.toUri
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentAboutBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.MainNavigationController
@@ -21,7 +20,9 @@ import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.plattysoft.leonids.ParticleSystem
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AboutFragment : BaseMainFragment() {
@field:[Inject Named(AppModule.NAMED_USER_ID)]
@@ -30,9 +31,6 @@ class AboutFragment : BaseMainFragment() {
@Inject
lateinit var appConfigManager: AppConfigManager
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private val privacyPolicyLink = "https://habitica.com/static/privacy"
private val termsLink = "https://habitica.com/static/terms"
@@ -85,7 +83,7 @@ class AboutFragment : BaseMainFragment() {
private val versionName: String by lazy {
try {
@Suppress("DEPRECATION")
- activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName ?: ""
+ mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionName ?: ""
} catch (e: PackageManager.NameNotFoundException) {
""
}
@@ -94,7 +92,7 @@ class AboutFragment : BaseMainFragment() {
private val versionCode: Int by lazy {
try {
@Suppress("DEPRECATION")
- activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode ?: 0
+ mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionCode ?: 0
} catch (e: PackageManager.NameNotFoundException) {
0
}
@@ -132,8 +130,8 @@ class AboutFragment : BaseMainFragment() {
val context = context ?: return
FirebaseAnalytics.getInstance(context).logEvent("found_easter_egg", null)
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Base") { bitmap ->
- activity?.runOnUiThread {
- activity?.let {
+ mainActivity?.runOnUiThread {
+ mainActivity?.let {
ParticleSystem(it, 50, bitmap, 3000)
.setAcceleration(0.00013f, 90)
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
@@ -144,8 +142,8 @@ class AboutFragment : BaseMainFragment() {
}
}
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Golden") { bitmap ->
- activity?.runOnUiThread {
- activity?.let {
+ mainActivity?.runOnUiThread {
+ mainActivity?.let {
ParticleSystem(it, 50, bitmap, 3000)
.setAcceleration(0.00013f, 90)
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
@@ -156,8 +154,8 @@ class AboutFragment : BaseMainFragment() {
}
}
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Red") { bitmap ->
- activity?.runOnUiThread {
- activity?.let {
+ mainActivity?.runOnUiThread {
+ mainActivity?.let {
ParticleSystem(it, 50, bitmap, 3000)
.setAcceleration(0.00013f, 90)
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
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 2d724c16e..b683aaa9c 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
@@ -13,7 +13,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.ui.adapter.AchievementsAdapter
@@ -25,7 +24,9 @@ import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AchievementsFragment : BaseMainFragment(), SwipeRefreshLayout.OnRefreshListener {
@Inject
@@ -48,9 +49,6 @@ class AchievementsFragment : BaseMainFragment : BottomSheetDialogFragment(
open val displayedClassName: String?
get() = this.javaClass.simpleName
- override fun onCreate(savedInstanceState: Bundle?) {
- HabiticaBaseApplication.userComponent?.let {
- injectFragment(it)
- }
- super.onCreate(savedInstanceState)
- }
-
abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB
override fun onCreateView(
@@ -56,8 +47,6 @@ abstract class BaseDialogFragment : BottomSheetDialogFragment(
return binding?.root
}
- abstract fun injectFragment(component: UserComponent)
-
override fun onResume() {
super.onResume()
showTutorialIfNeeded()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt
index e52c5303a..5faab5b3a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseFragment.kt
@@ -7,8 +7,6 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding
-import com.habitrpg.android.habitica.HabiticaBaseApplication
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TutorialRepository
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.common.habitica.helpers.AnalyticsManager
@@ -38,17 +36,6 @@ abstract class BaseFragment : Fragment() {
open val displayedClassName: String?
get() = this.javaClass.simpleName
- fun initializeComponent() {
- if (!shouldInitializeComponent) return
- HabiticaBaseApplication.userComponent?.let {
- injectFragment(it)
- }
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- initializeComponent()
- super.onCreate(savedInstanceState)
- }
abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB
@@ -61,8 +48,6 @@ abstract class BaseFragment : Fragment() {
return binding?.root
}
- abstract fun injectFragment(component: UserComponent)
-
override fun onResume() {
super.onResume()
showTutorialIfNeeded()
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 6d34e4049..4b1139bb8 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
@@ -35,11 +35,11 @@ abstract class BaseMainFragment : BaseFragment() {
protected var showsBackButton: Boolean = false
- open val activity get() = getActivity() as? MainActivity
- val tabLayout get() = activity?.binding?.content?.detailTabs
- val collapsingToolbar get() = activity?.binding?.content?.toolbar
- val toolbarAccessoryContainer get() = activity?.binding?.content?.toolbarAccessoryContainer
- val bottomNavigation get() = activity?.binding?.content?.bottomNavigation
+ open val mainActivity get() = getActivity() as? MainActivity
+ val tabLayout get() = mainActivity?.binding?.content?.detailTabs
+ val collapsingToolbar get() = mainActivity?.binding?.content?.toolbar
+ val toolbarAccessoryContainer get() = mainActivity?.binding?.content?.toolbarAccessoryContainer
+ val bottomNavigation get() = mainActivity?.binding?.content?.bottomNavigation
var usesTabLayout: Boolean = false
var hidesToolbar: Boolean = false
var usesBottomNavigation = false
@@ -81,24 +81,24 @@ abstract class BaseMainFragment : BaseFragment() {
override fun onResume() {
super.onResume()
- activity?.showBackButton = showsBackButton
- activity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ mainActivity?.showBackButton = showsBackButton
+ mainActivity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
- activity?.toolbar?.let { ToolbarColorHelper.colorizeToolbar(it, activity) }
+ mainActivity?.toolbar?.let { ToolbarColorHelper.colorizeToolbar(it, mainActivity) }
updateToolbarInteractivity()
}
var isTitleInteractive = false
open fun updateToolbarInteractivity() {
- activity?.binding?.content?.toolbarTitle?.background?.alpha = if (isTitleInteractive) 255 else 0
+ mainActivity?.binding?.content?.toolbarTitle?.background?.alpha = if (isTitleInteractive) 255 else 0
if (isTitleInteractive) {
- activity?.binding?.content?.toolbarTitle?.setScaledPadding(context, 16, 4, 16, 4)
+ mainActivity?.binding?.content?.toolbarTitle?.setScaledPadding(context, 16, 4, 16, 4)
} else {
- activity?.binding?.content?.toolbarTitle?.setPadding(0)
+ mainActivity?.binding?.content?.toolbarTitle?.setPadding(0)
}
}
@@ -118,11 +118,11 @@ abstract class BaseMainFragment : BaseFragment() {
}
private fun hideToolbar() {
- activity?.binding?.content?.headerView?.visibility = View.GONE
+ mainActivity?.binding?.content?.headerView?.visibility = View.GONE
}
private fun showToolbar() {
- activity?.binding?.content?.headerView?.visibility = View.VISIBLE
+ mainActivity?.binding?.content?.headerView?.visibility = View.VISIBLE
}
private fun 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 94896c87d..a780f1c12 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
@@ -19,7 +19,6 @@ import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.data.InventoryRepository
@@ -59,7 +58,9 @@ import kotlin.time.Duration
import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
import kotlin.time.toDuration
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class NavigationDrawerFragment : DialogFragment() {
private var binding: DrawerMainBinding? = null
@@ -110,7 +111,6 @@ class NavigationDrawerFragment : DialogFragment() {
} else {
NavigationDrawerAdapter(0, 0)
}
- HabiticaBaseApplication.userComponent?.inject(this)
super.onCreate(savedInstanceState)
if (savedInstanceState != null) {
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 b3ed6e4b3..ddfba9898 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
@@ -11,12 +11,13 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentNewsBinding
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
+@AndroidEntryPoint
class NewsFragment : BaseMainFragment() {
override var binding: FragmentNewsBinding? = null
@@ -71,9 +72,6 @@ class NewsFragment : BaseMainFragment() {
binding?.newsWebview?.loadUrl("$address/static/new-stuff")
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onResume() {
super.onResume()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt
index 24db882a4..f69e0c164 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoInfoFragment.kt
@@ -4,11 +4,12 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentPromoInfoBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PromoInfoFragment : BaseMainFragment() {
override var binding: FragmentPromoInfoBinding? = null
@@ -20,9 +21,6 @@ class PromoInfoFragment : BaseMainFragment() {
@Inject
lateinit var configManager: AppConfigManager
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateView(
inflater: LayoutInflater,
@@ -41,6 +39,6 @@ class PromoInfoFragment : BaseMainFragment() {
override fun onResume() {
super.onResume()
- activity?.title = ""
+ mainActivity?.title = ""
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt
index 9016edcec..618a07752 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/PromoWebFragment.kt
@@ -11,7 +11,9 @@ import com.habitrpg.android.habitica.databinding.FragmentNewsBinding
import com.habitrpg.android.habitica.modules.AppModule
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PromoWebFragment : BaseMainFragment() {
@field:[Inject Named(AppModule.NAMED_USER_ID)]
lateinit var userID: String
@@ -47,7 +49,4 @@ class PromoWebFragment : BaseMainFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
index bec1d020e..f51c3a867 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
@@ -6,9 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
import com.habitrpg.android.habitica.extensions.addOkButton
@@ -23,10 +21,12 @@ import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.Attribute
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import javax.inject.Inject
import kotlin.math.min
+@AndroidEntryPoint
class StatsFragment : BaseMainFragment() {
override var binding: FragmentStatsBinding? = null
@@ -156,7 +156,7 @@ class StatsFragment : BaseMainFragment() {
private fun showBulkAllocateDialog() {
context?.let { context ->
- val dialog = BulkAllocateStatsDialog(context, HabiticaBaseApplication.userComponent)
+ val dialog = BulkAllocateStatsDialog(context, userRepository)
dialog.show()
}
}
@@ -245,9 +245,6 @@ class StatsFragment : BaseMainFragment() {
binding?.numberOfPointsTextView?.setScaledPadding(context, 18, 4, 18, 4)
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun updateStats(user: User) {
val outfit = user.items?.gear?.equipped
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 b8741a2ab..b15b5f55a 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
@@ -20,7 +20,6 @@ import com.google.android.flexbox.FlexDirection.ROW
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.CustomizationRepository
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.BottomSheetBackgroundsFilterBinding
@@ -28,6 +27,7 @@ import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBind
import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.models.CustomizationFilter
import com.habitrpg.android.habitica.models.inventory.Customization
+import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.OwnedCustomization
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.CustomizationRecyclerViewAdapter
@@ -36,16 +36,19 @@ import com.habitrpg.android.habitica.ui.helpers.MarginDecoration
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
+import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class AvatarCustomizationFragment :
BaseMainFragment(),
SwipeRefreshLayout.OnRefreshListener {
@@ -69,7 +72,7 @@ class AvatarCustomizationFragment :
private var activeCustomization: String? = null
internal var adapter: CustomizationRecyclerViewAdapter = CustomizationRecyclerViewAdapter()
- internal var layoutManager: FlexboxLayoutManager = FlexboxLayoutManager(activity, ROW)
+ internal var layoutManager: FlexboxLayoutManager = FlexboxLayoutManager(mainActivity, ROW)
private val currentFilter = MutableStateFlow(CustomizationFilter(false, true))
private val ownedCustomizations = MutableStateFlow>(emptyList())
@@ -96,6 +99,10 @@ class AvatarCustomizationFragment :
}
}
}
+ adapter.onShowPurchaseDialog = { item ->
+ val dialog = PurchaseDialog(requireContext(), userRepository, inventoryRepository, item)
+ dialog.show()
+ }
lifecycleScope.launchCatching {
inventoryRepository.getInAppRewards()
@@ -118,7 +125,7 @@ class AvatarCustomizationFragment :
}
adapter.customizationType = type
binding?.refreshLayout?.setOnRefreshListener(this)
- layoutManager = FlexboxLayoutManager(activity, ROW)
+ layoutManager = FlexboxLayoutManager(mainActivity, ROW)
layoutManager.justifyContent = JustifyContent.CENTER
layoutManager.alignItems = AlignItems.FLEX_START
binding?.recyclerView?.layoutManager = layoutManager
@@ -184,9 +191,6 @@ class AvatarCustomizationFragment :
return super.onOptionsItemSelected(item)
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun loadCustomizations() {
val type = this.type ?: return
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 95b619d1f..937acf8f0 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
@@ -8,7 +8,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.models.user.User
@@ -21,7 +20,9 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AvatarEquipmentFragment :
BaseMainFragment(),
SwipeRefreshLayout.OnRefreshListener {
@@ -42,7 +43,7 @@ class AvatarEquipmentFragment :
private var activeEquipment: String? = null
internal var adapter: CustomizationEquipmentRecyclerViewAdapter = CustomizationEquipmentRecyclerViewAdapter()
- internal var layoutManager: GridLayoutManager = GridLayoutManager(activity, 2)
+ internal var layoutManager: GridLayoutManager = GridLayoutManager(mainActivity, 2)
override fun onCreateView(
inflater: LayoutInflater,
@@ -77,7 +78,7 @@ class AvatarEquipmentFragment :
}
binding?.refreshLayout?.setOnRefreshListener(this)
setGridSpanCount(view.width)
- val layoutManager = GridLayoutManager(activity, 4)
+ val layoutManager = GridLayoutManager(mainActivity, 4)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (adapter.getItemViewType(position) == 0) {
@@ -97,9 +98,6 @@ class AvatarEquipmentFragment :
userViewModel.user.observe(viewLifecycleOwner) { updateUser(it) }
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun loadEquipment() {
val type = this.type ?: return
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 6b6b5700f..cc491d095 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
@@ -106,9 +106,6 @@ open class AvatarOverviewFragment :
return view
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun displayCustomizationFragment(type: String, category: String?) {
MainNavigationController.navigate(
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 ea96ed9df..29bc88584 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
@@ -1,7 +1,9 @@
package com.habitrpg.android.habitica.ui.fragments.inventory.customization
import android.os.Bundle
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class EquipmentOverviewFragment : AvatarOverviewFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
showCustomization = false
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt
index 8f23736ef..b13d825ee 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt
@@ -9,7 +9,6 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.helpers.MainNavigationController
@@ -21,7 +20,9 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class EquipmentDetailFragment :
BaseMainFragment(),
SwipeRefreshLayout.OnRefreshListener {
@@ -80,7 +81,7 @@ class EquipmentDetailFragment :
this.adapter.type = this.type
binding?.recyclerView?.adapter = this.adapter
- binding?.recyclerView?.layoutManager = LinearLayoutManager(activity)
+ binding?.recyclerView?.layoutManager = LinearLayoutManager(mainActivity)
binding?.recyclerView?.addItemDecoration(DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL))
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
@@ -96,9 +97,6 @@ class EquipmentDetailFragment :
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onRefresh() {
lifecycleScope.launch(ExceptionHandler.coroutine()) {
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 88e690dbb..e265894a9 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
@@ -41,7 +41,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ItemDialogFragment : BaseDialogFragment() {
@Inject
@@ -78,9 +80,6 @@ class ItemDialogFragment : BaseDialogFragment() {
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateView(
inflater: LayoutInflater,
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 f64675aca..559079e30 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
@@ -48,7 +48,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ItemRecyclerFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
@Inject
@@ -81,9 +83,6 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt
index 374f1efa3..66c506e79 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.kt
@@ -8,10 +8,11 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ItemsFragment : BaseMainFragment() {
override var binding: FragmentViewpagerBinding? = null
@@ -48,9 +49,6 @@ class ItemsFragment : BaseMainFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun setViewPagerAdapter() {
val fragmentManager = childFragmentManager
@@ -91,11 +89,11 @@ class ItemsFragment : BaseMainFragment() {
private fun getPageTitle(position: Int): String {
return when (position) {
- 0 -> activity?.getString(R.string.eggs)
- 1 -> activity?.getString(R.string.hatching_potions)
- 2 -> activity?.getString(R.string.food)
- 3 -> activity?.getString(R.string.quests)
- 4 -> activity?.getString(R.string.special)
+ 0 -> mainActivity?.getString(R.string.eggs)
+ 1 -> mainActivity?.getString(R.string.hatching_potions)
+ 2 -> mainActivity?.getString(R.string.food)
+ 3 -> mainActivity?.getString(R.string.quests)
+ 4 -> mainActivity?.getString(R.string.special)
else -> ""
} ?: ""
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/MarketFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/MarketFragment.kt
index 184184230..0ea664dea 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/MarketFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/MarketFragment.kt
@@ -5,7 +5,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.habitrpg.android.habitica.models.shops.Shop
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class MarketFragment : ShopFragment() {
override fun onCreateView(
inflater: LayoutInflater,
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/QuestShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/QuestShopFragment.kt
index 6d5bae138..40bcc734c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/QuestShopFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/QuestShopFragment.kt
@@ -5,7 +5,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.habitrpg.android.habitica.models.shops.Shop
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class QuestShopFragment : ShopFragment() {
override fun onCreateView(
inflater: LayoutInflater,
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/SeasonalShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/SeasonalShopFragment.kt
index a895fb4fa..455efd057 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/SeasonalShopFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/SeasonalShopFragment.kt
@@ -5,7 +5,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.habitrpg.android.habitica.models.shops.Shop
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class SeasonalShopFragment : ShopFragment() {
override fun onCreateView(
inflater: LayoutInflater,
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 8c1f71176..cee875454 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
@@ -13,7 +13,6 @@ import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
@@ -28,6 +27,7 @@ import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.CurrencyText
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
+import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.RecyclerViewState
import com.habitrpg.common.habitica.helpers.launchCatching
@@ -103,6 +103,18 @@ open class ShopFragment : BaseMainFragment()
loadMarketGear()
}
}
+ adapter?.onShowPurchaseDialog = { item, isPinned ->
+ val dialog = PurchaseDialog(requireContext(), userRepository, inventoryRepository, item)
+ dialog.shopIdentifier = shopIdentifier
+ dialog.isPinned = isPinned
+ dialog.onGearPurchased = {
+ loadShopInventory()
+ if (Shop.MARKET == shopIdentifier) {
+ loadMarketGear()
+ }
+ }
+ dialog.show()
+ }
adapter?.context = context
binding?.recyclerView?.adapter = adapter
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
@@ -291,9 +303,6 @@ open class ShopFragment : BaseMainFragment()
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt
index 07e32cad7..77217c3b9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt
@@ -6,7 +6,9 @@ import android.view.View
import android.view.ViewGroup
import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.ui.views.CurrencyText
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class TimeTravelersShopFragment : ShopFragment() {
override fun onCreateView(
inflater: LayoutInflater,
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 7e8e41817..79620221a 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
@@ -7,7 +7,6 @@ import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.extensions.getTranslatedType
@@ -25,7 +24,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class MountDetailRecyclerFragment :
BaseMainFragment(),
SwipeRefreshLayout.OnRefreshListener {
@@ -61,9 +62,6 @@ class MountDetailRecyclerFragment :
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
showsBackButton = true
@@ -79,7 +77,7 @@ class MountDetailRecyclerFragment :
}
binding?.refreshLayout?.setOnRefreshListener(this)
- layoutManager = androidx.recyclerview.widget.GridLayoutManager(activity, 4)
+ layoutManager = androidx.recyclerview.widget.GridLayoutManager(mainActivity, 4)
layoutManager?.spanSizeLookup = object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (adapter?.getItemViewType(position) == 0 || adapter?.getItemViewType(position) == 1) {
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 ccc243c88..864f0f37d 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
@@ -7,7 +7,6 @@ import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
import com.habitrpg.android.habitica.extensions.getTranslatedType
@@ -31,7 +30,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PetDetailRecyclerFragment :
BaseMainFragment(),
SwipeRefreshLayout.OnRefreshListener {
@@ -77,9 +78,6 @@ class PetDetailRecyclerFragment :
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
showsBackButton = true
@@ -143,7 +141,7 @@ class PetDetailRecyclerFragment :
override fun onResume() {
super.onResume()
- activity?.title = animalType
+ mainActivity?.title = animalType
}
override fun onSaveInstanceState(outState: Bundle) {
@@ -224,7 +222,7 @@ class PetDetailRecyclerFragment :
private fun showFeedingDialog(pet: Pet, food: Food?) {
if (food != null) {
- val context = activity ?: context ?: return
+ val context = mainActivity ?: context ?: return
lifecycleScope.launchCatching {
feedPetUseCase.callInteractor(
FeedPetUseCase.RequestValues(
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt
index f90a0b7c1..2091f7ee4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.kt
@@ -8,11 +8,12 @@ import androidx.fragment.app.viewModels
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class StableFragment : BaseMainFragment() {
override var binding: FragmentViewpagerBinding? = null
@@ -40,9 +41,6 @@ class StableFragment : BaseMainFragment() {
setViewPagerAdapter()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun setViewPagerAdapter() {
val fragmentManager = childFragmentManager
@@ -80,8 +78,8 @@ class StableFragment : BaseMainFragment() {
private fun getPageTitle(position: Int): String {
return when (position) {
- 0 -> activity?.getString(R.string.pets)
- 1 -> activity?.getString(R.string.mounts)
+ 0 -> mainActivity?.getString(R.string.pets)
+ 1 -> mainActivity?.getString(R.string.mounts)
else -> ""
} ?: ""
}
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 52fd8ed60..4f7dcd4f1 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
@@ -1,6 +1,5 @@
package com.habitrpg.android.habitica.ui.fragments.inventory.stable
-import android.app.Application
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -9,7 +8,6 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
@@ -22,21 +20,20 @@ import com.habitrpg.android.habitica.ui.helpers.MarginDecoration
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel
-import com.habitrpg.android.habitica.ui.viewmodels.StableViewModelFactory
import com.habitrpg.common.habitica.helpers.EmptyItem
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class StableRecyclerFragment :
BaseFragment(),
SwipeRefreshLayout.OnRefreshListener {
- private val viewModel: StableViewModel by viewModels(factoryProducer = {
- StableViewModelFactory(context?.applicationContext as? Application, itemType)
- })
+ private val viewModel: StableViewModel by viewModels()
@Inject
lateinit var inventoryRepository: InventoryRepository
@@ -75,9 +72,6 @@ class StableRecyclerFragment :
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
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 126caea9b..3fbeeb6e6 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
@@ -44,7 +44,9 @@ import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.launch
import retrofit2.HttpException
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AccountPreferenceFragment :
BasePreferencesFragment(),
SharedPreferences.OnSharedPreferenceChangeListener,
@@ -53,8 +55,8 @@ class AccountPreferenceFragment :
lateinit var hostConfig: HostConfig
@Inject
lateinit var apiClient: ApiClient
-
- private lateinit var viewModel: AuthenticationViewModel
+ @Inject
+ lateinit var viewModel: AuthenticationViewModel
private lateinit var accountDialog: HabiticaAccountDialog
override var user: User? = null
@@ -64,9 +66,7 @@ class AccountPreferenceFragment :
}
override fun onCreate(savedInstanceState: Bundle?) {
- HabiticaBaseApplication.userComponent?.inject(this)
super.onCreate(savedInstanceState)
- viewModel = AuthenticationViewModel()
findPreference("confirm_username")?.isVisible = user?.flags?.verifiedUsername == false
}
@@ -277,7 +277,7 @@ class AccountPreferenceFragment :
context?.let { context ->
val dialog = HabiticaAlertDialog(context)
dialog.setTitle(R.string.change_password)
- dialog.addButton(R.string.change, true, false, false) { dialog, _ ->
+ dialog.addButton(R.string.change, true, false, false) { d, _ ->
KeyboardUtil.dismissKeyboard(activity)
passwordEditText?.showErrorIfNecessary()
passwordRepeatEditText?.showErrorIfNecessary()
@@ -293,7 +293,7 @@ class AccountPreferenceFragment :
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
)
}
- dialog.dismiss()
+ d.dismiss()
}
dialog.addCancelButton()
dialog.setAdditionalContentView(view)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt
index 0c6d24027..29c725c5c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/EmailNotificationsPreferencesFragment.kt
@@ -1,22 +1,18 @@
package com.habitrpg.android.habitica.ui.fragments.preferences
import android.content.SharedPreferences
-import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.CheckBoxPreference
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class EmailNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
private var isInitialSet: Boolean = true
private var isSettingUser: Boolean = false
- override fun onCreate(savedInstanceState: Bundle?) {
- HabiticaBaseApplication.userComponent?.inject(this)
- super.onCreate(savedInstanceState)
- }
override fun onResume() {
super.onResume()
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 a187020fd..df81e264e 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
@@ -14,7 +14,9 @@ import androidx.fragment.app.DialogFragment
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding
import com.habitrpg.android.habitica.models.user.User
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R.layout.dialog_habitica_account) {
private var _binding: DialogHabiticaAccountBinding? = null
private val binding get() = _binding!!
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 8ef4e3ca9..12f22328b 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
@@ -54,11 +54,13 @@ import com.habitrpg.common.habitica.helpers.AppTestingLevel
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.LanguageHelper
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import java.util.Locale
import javax.inject.Inject
+@AndroidEntryPoint
class PreferencesFragment : BasePreferencesFragment(),
SharedPreferences.OnSharedPreferenceChangeListener {
@@ -84,11 +86,6 @@ class PreferencesFragment : BasePreferencesFragment(),
private var serverUrlPreference : ListPreference? = null
private var taskListPreference : ListPreference? = null
- override fun onCreate(savedInstanceState : Bundle?) {
- HabiticaBaseApplication.userComponent?.inject(this)
- super.onCreate(savedInstanceState)
- }
-
override fun onViewCreated(view : View, savedInstanceState : Bundle?) {
super.onViewCreated(view, savedInstanceState)
listView.itemAnimator = null
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.kt
index ed5b555d6..8ab9c66b4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PushNotificationsPreferencesFragment.kt
@@ -1,23 +1,18 @@
package com.habitrpg.android.habitica.ui.fragments.preferences
import android.content.SharedPreferences
-import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.CheckBoxPreference
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PushNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
private var isInitialSet: Boolean = true
private var isSettingUser: Boolean = false
- override fun onCreate(savedInstanceState: Bundle?) {
- HabiticaBaseApplication.userComponent?.inject(this)
- super.onCreate(savedInstanceState)
- }
-
override fun onResume() {
super.onResume()
preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt
index ac80e8b41..b222d1ec9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/TimePreferenceDialogFragment.kt
@@ -9,7 +9,9 @@ import androidx.preference.PreferenceDialogFragmentCompat
import androidx.preference.PreferenceFragmentCompat
import com.habitrpg.android.habitica.prefs.TimePreference
import java.util.Locale
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class TimePreferenceDialogFragment : PreferenceDialogFragmentCompat() {
lateinit var picker: TimePicker
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 1a0963cae..6d5676be9 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
@@ -40,7 +40,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GemsPurchaseFragment : BaseFragment() {
override var binding: FragmentGemPurchaseBinding? = null
@@ -56,9 +58,6 @@ class GemsPurchaseFragment : BaseFragment() {
@Inject
lateinit var purchaseHandler: PurchaseHandler
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private var isGemSaleHappening = false
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt
index 9db037647..858cafed3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftBalanceGemsFragment.kt
@@ -18,7 +18,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.launchCatching
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GiftBalanceGemsFragment : BaseFragment() {
@Inject
@@ -60,9 +62,6 @@ class GiftBalanceGemsFragment : BaseFragment() {
binding?.usernameTextview?.text = it.formattedUsername
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt
index 38539c7c5..a8a11c62f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt
@@ -20,7 +20,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GiftPurchaseGemsFragment : BaseFragment() {
@Inject
@@ -46,9 +48,6 @@ class GiftPurchaseGemsFragment : BaseFragment()
private var purchaseHandler: PurchaseHandler? = null
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
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 d6f12a9c0..c23938c86 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
@@ -43,7 +43,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class SubscriptionFragment : BaseFragment() {
override var binding: FragmentSubscriptionBinding? = null
@@ -149,9 +151,6 @@ class SubscriptionFragment : BaseFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun loadInventory() {
CoroutineScope(Dispatchers.IO).launchCatching {
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 bca11824c..f3c9199fb 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
@@ -24,7 +24,9 @@ import com.habitrpg.android.habitica.ui.views.setup.AvatarCategoryView
import com.habitrpg.common.habitica.helpers.launchCatching
import java.util.Random
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AvatarSetupFragment : BaseFragment() {
@Inject
@@ -113,9 +115,6 @@ class AvatarSetupFragment : BaseFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun loadCustomizations() {
val user = this.user ?: return
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt
index 49443d97b..449e811b2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/IntroFragment.kt
@@ -8,7 +8,9 @@ import android.view.ViewGroup
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentIntroBinding
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class IntroFragment : BaseFragment() {
override var binding: FragmentIntroBinding? = null
@@ -52,9 +54,6 @@ class IntroFragment : BaseFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
fun setImage(image: Drawable?) {
this.image = image
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 6496ed559..2b7995660 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
@@ -19,7 +19,9 @@ 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
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class TaskSetupFragment : BaseFragment() {
var activity: SetupActivity? = null
@@ -73,9 +75,6 @@ class TaskSetupFragment : BaseFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun setTasks() {
this.taskGroups = listOf(listOf(getString(R.string.setup_group_work), TYPE_WORK), listOf(getString(R.string.setup_group_exercise), TYPE_EXERCISE), listOf(getString(R.string.setup_group_health), TYPE_HEALTH), listOf(getString(R.string.setup_group_school), TYPE_SCHOOL), listOf(getString(R.string.setup_group_teams), TYPE_TEAMS), listOf(getString(R.string.setup_group_chores), TYPE_CHORES), listOf(getString(R.string.setup_group_creativity), TYPE_CREATIVITY), listOf(getString(R.string.setuP_group_other), TYPE_OTHER))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt
index 7084d6f9a..221c4e7b3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/WelcomeFragment.kt
@@ -25,7 +25,9 @@ import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class WelcomeFragment : BaseFragment() {
var onNameValid: ((Boolean?) -> Unit)? = null
@@ -144,7 +146,4 @@ class WelcomeFragment : BaseFragment() {
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt
index 116dd322c..bdf166574 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillTasksRecyclerViewFragment.kt
@@ -16,7 +16,9 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.shared.habitica.models.tasks.TaskType
import kotlinx.coroutines.flow.map
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class SkillTasksRecyclerViewFragment : BaseFragment() {
@Inject
lateinit var taskRepository: TaskRepository
@@ -35,9 +37,6 @@ class SkillTasksRecyclerViewFragment : BaseFragment
var onTaskSelection: ((Task) -> Unit)? = null
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
index c1fbc77fe..4ad48afa4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
@@ -11,7 +11,6 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentRecyclerviewBinding
import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.responses.SkillResponse
@@ -31,7 +30,9 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class SkillsFragment : BaseMainFragment() {
internal var adapter: SkillsRecyclerViewAdapter? = null
private var selectedSkill: Skill? = null
@@ -58,16 +59,13 @@ class SkillsFragment : BaseMainFragment() {
return super.onCreateView(inflater, container, savedInstanceState)
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
userViewModel.user.observe(viewLifecycleOwner) { user ->
user?.let { checkUserLoadSkills(it) }
}
- binding?.recyclerView?.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(activity)
+ binding?.recyclerView?.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(mainActivity)
binding?.recyclerView?.adapter = adapter
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
}
@@ -98,12 +96,12 @@ class SkillsFragment : BaseMainFragment() {
when {
"special" == skill.habitClass -> {
selectedSkill = skill
- val intent = Intent(activity, SkillMemberActivity::class.java)
+ val intent = Intent(mainActivity, SkillMemberActivity::class.java)
memberSelectionResult.launch(intent)
}
skill.target == "task" -> {
selectedSkill = skill
- val intent = Intent(activity, SkillTasksActivity::class.java)
+ val intent = Intent(mainActivity, SkillTasksActivity::class.java)
taskSelectionResult.launch(intent)
}
else -> useSkill(skill)
@@ -113,7 +111,7 @@ class SkillsFragment : BaseMainFragment() {
private fun displaySkillResult(usedSkill: Skill?, response: SkillResponse) {
if (!isAdded) return
adapter?.mana = response.user?.stats?.mp ?: 0.0
- val activity = activity ?: return
+ val activity = mainActivity ?: return
if ("special" == usedSkill?.habitClass) {
showSnackbar(activity.snackbarContainer, context?.getString(R.string.used_skill_without_mana, usedSkill.text), HabiticaSnackbar.SnackbarDisplayType.BLUE)
} else {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
index b81ddd77f..15e3329ae 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
@@ -12,7 +12,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.habitrpg.android.habitica.MainNavDirections
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
+import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentChatBinding
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -22,40 +22,44 @@ import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.adapter.social.ChatRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
+import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import javax.inject.Inject
import kotlin.time.DurationUnit
import kotlin.time.toDuration
+@AndroidEntryPoint
class ChatFragment : BaseFragment() {
- override var binding: FragmentChatBinding? = null
+ override var binding : FragmentChatBinding? = null
- override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentChatBinding {
+ override fun createBinding(
+ inflater : LayoutInflater,
+ container : ViewGroup?
+ ) : FragmentChatBinding {
return FragmentChatBinding.inflate(inflater, container, false)
}
- lateinit var viewModel: GroupViewModel
+ lateinit var viewModel : GroupViewModel
@Inject
- lateinit var configManager: AppConfigManager
+ lateinit var configManager : AppConfigManager
+ @Inject
+ lateinit var socialRepository: SocialRepository
- private var chatAdapter: ChatRecyclerViewAdapter? = null
+ private var chatAdapter : ChatRecyclerViewAdapter? = null
private var navigatedOnceToFragment = false
private var isScrolledToBottom = true
private var isFirstRefresh = true
- var autocompleteContext: String = ""
+ var autocompleteContext : String = ""
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ override fun onViewCreated(view : View, savedInstanceState : Bundle?) {
super.onViewCreated(view, savedInstanceState)
val layoutManager = LinearLayoutManager(context)
@@ -77,22 +81,31 @@ class ChatFragment : BaseFragment() {
binding?.chatBarView?.maxChatLength = configManager.maxChatLength()
binding?.chatBarView?.autocompleteContext = "party"
binding?.chatBarView?.groupID = viewModel.getGroupData().value?.id
+ binding?.chatBarView?.autocompleteAdapter = AutocompleteAdapter(
+ requireContext(),
+ socialRepository,
+ autocompleteContext,
+ viewModel.groupID,
+ configManager.enableUsernameAutocomplete()
+ )
+
binding?.recyclerView?.adapter = chatAdapter
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
- binding?.recyclerView?.addOnScrollListener(object : androidx.recyclerview.widget.RecyclerView.OnScrollListener() {
+ binding?.recyclerView?.addOnScrollListener(object :
+ androidx.recyclerview.widget.RecyclerView.OnScrollListener() {
override fun onScrolled(
- recyclerView: androidx.recyclerview.widget.RecyclerView,
- dx: Int,
- dy: Int
+ recyclerView : androidx.recyclerview.widget.RecyclerView,
+ dx : Int,
+ dy : Int
) {
super.onScrolled(recyclerView, dx, dy)
isScrolledToBottom = layoutManager.findFirstVisibleItemPosition() == 0
}
})
- viewModel.chatmessages.observe(viewLifecycleOwner, { setChatMessages(it) })
+ viewModel.chatmessages.observe(viewLifecycleOwner) { setChatMessages(it) }
binding?.chatBarView?.onCommunityGuidelinesAccepted = {
viewModel.updateUser("flags.communityGuidelinesAccepted", true)
@@ -113,7 +126,7 @@ class ChatFragment : BaseFragment() {
}
}
- private fun setReplyTo(username: String?) {
+ private fun setReplyTo(username : String?) {
val previousMessage = binding?.chatBarView?.message ?: ""
if (previousMessage.contains("@$username")) {
return
@@ -141,22 +154,31 @@ class ChatFragment : BaseFragment() {
}
}
- private fun copyMessageToClipboard(chatMessage: ChatMessage) {
+ private fun copyMessageToClipboard(chatMessage : ChatMessage) {
val clipMan = activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
val messageText = ClipData.newPlainText("Chat message", chatMessage.text)
clipMan?.setPrimaryClip(messageText)
val activity = activity as? MainActivity
if (activity != null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
- showSnackbar(activity.snackbarContainer, getString(R.string.chat_message_copied), SnackbarDisplayType.NORMAL)
+ showSnackbar(
+ activity.snackbarContainer,
+ getString(R.string.chat_message_copied),
+ SnackbarDisplayType.NORMAL
+ )
}
}
- private fun showFlagConfirmationDialog(chatMessage: ChatMessage) {
- val directions = MainNavDirections.actionGlobalReportMessageActivity(chatMessage.text ?: "", chatMessage.user ?: "", chatMessage.id, chatMessage.groupId)
+ private fun showFlagConfirmationDialog(chatMessage : ChatMessage) {
+ val directions = MainNavDirections.actionGlobalReportMessageActivity(
+ chatMessage.text ?: "",
+ chatMessage.user ?: "",
+ chatMessage.id,
+ chatMessage.groupId
+ )
MainNavigationController.navigate(directions)
}
- private fun showDeleteConfirmationDialog(chatMessage: ChatMessage) {
+ private fun showDeleteConfirmationDialog(chatMessage : ChatMessage) {
val context = context
if (context != null) {
val dialog = HabiticaAlertDialog(context)
@@ -169,7 +191,7 @@ class ChatFragment : BaseFragment() {
}
}
- private fun setChatMessages(chatMessages: List) {
+ private fun setChatMessages(chatMessages : List) {
chatAdapter?.data = chatMessages
binding?.chatBarView?.chatMessages = chatMessages
@@ -178,7 +200,7 @@ class ChatFragment : BaseFragment() {
markMessagesAsSeen()
}
- private fun sendChatMessage(chatText: String) {
+ private fun sendChatMessage(chatText : String) {
viewModel.postGroupChat(
chatText,
{ binding?.recyclerView?.scrollToPosition(0) }
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 99d0bab2d..f805da4ab 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
@@ -16,7 +16,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.MainNavDirections
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentInboxMessageListBinding
import com.habitrpg.android.habitica.extensions.addOkButton
@@ -29,18 +28,19 @@ import com.habitrpg.android.habitica.ui.adapter.social.InboxAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.InboxViewModel
-import com.habitrpg.android.habitica.ui.viewmodels.InboxViewModelFactory
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.time.DurationUnit
import kotlin.time.toDuration
+@AndroidEntryPoint
class InboxMessageListFragment : BaseMainFragment() {
override var binding: FragmentInboxMessageListBinding? = null
@@ -58,9 +58,7 @@ class InboxMessageListFragment : BaseMainFragment) {
socialRepository.markSomePrivateMessagesAsRead(viewModel.user.value, messages)
@@ -205,7 +200,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener, View.OnClickListener {
@Inject
@@ -85,7 +86,7 @@ class InboxOverviewFragment : BaseMainFragment(), androidx
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
- this.activity?.menuInflater?.inflate(R.menu.inbox, menu)
+ this.mainActivity?.menuInflater?.inflate(R.menu.inbox, menu)
val item = menu.findItem(R.id.send_message)
tintMenuIcon(item)
super.onCreateOptionsMenu(menu, inflater)
@@ -102,11 +103,11 @@ class InboxOverviewFragment : BaseMainFragment(), androidx
}
private fun openNewMessageDialog() {
- if (BuildConfig.DEBUG && this.activity == null) {
+ if (BuildConfig.DEBUG && this.mainActivity == null) {
error("Assertion failed")
}
val binding = DialogChooseMessageRecipientBinding.inflate(layoutInflater)
- this.activity?.let { thisActivity ->
+ this.mainActivity?.let { thisActivity ->
val alert = HabiticaAlertDialog(thisActivity)
alert.setTitle(getString(R.string.choose_recipient_title))
alert.addButton(
@@ -139,9 +140,6 @@ class InboxOverviewFragment : BaseMainFragment(), androidx
}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun retrieveMessages() {
lifecycleScope.launchCatching {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt
index e484a296d..9ff3b84fd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.kt
@@ -38,7 +38,9 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class QuestDetailFragment : BaseMainFragment() {
@Inject
@@ -307,7 +309,4 @@ class QuestDetailFragment : BaseMainFragment() {
builder.show()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
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 5330f5520..d367293a5 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
@@ -36,7 +36,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class TavernDetailFragment : BaseFragment() {
@Inject
@@ -171,9 +173,6 @@ class TavernDetailFragment : BaseFragment() {
(binding?.playerTiersView?.parent as? ViewGroup)?.invalidate()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
companion object {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
index 676bf589c..ff9ef6571 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
@@ -20,7 +20,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewType
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class TavernFragment : BaseMainFragment() {
@Inject
@@ -60,9 +62,6 @@ class TavernFragment : BaseMainFragment() {
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_tavern, menu)
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 2c2264c56..fe6b5b7bf 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
@@ -13,7 +13,6 @@ import android.view.ViewGroup
import androidx.core.net.toUri
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.DialogChallengeDetailTaskGroupBinding
@@ -43,7 +42,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import retrofit2.HttpException
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ChallengeDetailFragment : BaseMainFragment() {
@Inject
@@ -63,9 +64,6 @@ class ChallengeDetailFragment : BaseMainFragment
var challenge: Challenge? = null
private var isCreator = false
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateView(
inflater: LayoutInflater,
@@ -248,7 +246,7 @@ class ChallengeDetailFragment : BaseMainFragment
binding?.creatorLabel?.tier = creator.contributor?.level ?: 0
binding?.creatorLabel?.username = creator.displayName
isCreator = creator.id == userViewModel.userID
- this.activity?.invalidateOptionsMenu()
+ this.mainActivity?.invalidateOptionsMenu()
}
private fun setJoined(joined: Boolean) {
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 c73d077ef..4675d3c38 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
@@ -26,7 +26,9 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ChallengeListFragment :
BaseFragment(),
androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
@@ -127,9 +129,6 @@ class ChallengeListFragment :
)
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onRefresh() {
nextPageToLoad = 0
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt
index c501142f5..9c5d35a35 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.kt
@@ -21,7 +21,9 @@ import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.ui.activities.ChallengeFormActivity
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class ChallengesOverviewFragment : BaseMainFragment() {
@Inject
@@ -66,9 +68,6 @@ class ChallengesOverviewFragment : BaseMainFragment()
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt
index 8a7a77dd9..510a4881a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildDetailFragment.kt
@@ -12,7 +12,6 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.MainNavDirections
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentGuildDetailBinding
@@ -25,18 +24,19 @@ import com.habitrpg.android.habitica.ui.activities.GroupInviteActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
-import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.helpers.setMarkdown
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class GuildDetailFragment : BaseFragment() {
@Inject
@@ -187,13 +187,10 @@ class GuildDetailFragment : BaseFragment() {
(this.activity as? MainActivity)?.showSnackbar(title = getString(R.string.left_guild))
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun updateGuild(guild: Group?) {
binding?.titleView?.text = guild?.name
- binding?.guildMembersIcon?.setImageBitmap(HabiticaIcons.imageOfGuildCrestMedium((guild?.memberCount ?: 0).toFloat()))
+ binding?.guildMembersIcon?.setImageBitmap(HabiticaIconsHelper.imageOfGuildCrestMedium((guild?.memberCount ?: 0).toFloat()))
binding?.guildMembersText?.text = guild?.memberCount.toString()
binding?.guildBankText?.text = guild?.gemCount.toString()
binding?.guildSummary?.setMarkdown(guild?.summary)
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 e7a689072..008eb7932 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
@@ -17,7 +17,6 @@ import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity
@@ -25,7 +24,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewType
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GuildFragment : BaseMainFragment() {
internal val viewModel: GroupViewModel by viewModels()
@@ -48,9 +49,6 @@ class GuildFragment : BaseMainFragment() {
return super.onCreateView(inflater, container, savedInstanceState)
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
showsBackButton = true
@@ -58,7 +56,7 @@ class GuildFragment : BaseMainFragment() {
viewModel.groupViewType = GroupViewType.GUILD
viewModel.getGroupData().observe(viewLifecycleOwner) { setGroup(it) }
- viewModel.getIsMemberData().observe(viewLifecycleOwner) { activity?.invalidateOptionsMenu() }
+ viewModel.getIsMemberData().observe(viewLifecycleOwner) { mainActivity?.invalidateOptionsMenu() }
arguments?.let {
val args = GuildFragmentArgs.fromBundle(it)
@@ -98,15 +96,15 @@ class GuildFragment : BaseMainFragment() {
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
- if (this.activity != null) {
+ if (this.mainActivity != null) {
if (viewModel.isMember) {
if (viewModel.isLeader) {
- this.activity?.menuInflater?.inflate(R.menu.guild_admin, menu)
+ this.mainActivity?.menuInflater?.inflate(R.menu.guild_admin, menu)
} else {
- this.activity?.menuInflater?.inflate(R.menu.guild_member, menu)
+ this.mainActivity?.menuInflater?.inflate(R.menu.guild_member, menu)
}
} else {
- this.activity?.menuInflater?.inflate(R.menu.guild_nonmember, menu)
+ this.mainActivity?.menuInflater?.inflate(R.menu.guild_nonmember, menu)
}
}
super.onCreateOptionsMenu(menu, inflater)
@@ -206,7 +204,7 @@ class GuildFragment : BaseMainFragment() {
bundle.putString("leader", guild?.leaderID)
bundle.putBoolean("leaderOnlyChallenges", guild?.leaderOnlyChallenges ?: true)
- val intent = Intent(activity, GroupFormActivity::class.java)
+ val intent = Intent(mainActivity, GroupFormActivity::class.java)
intent.putExtras(bundle)
intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
groupFormResult.launch(intent)
@@ -220,7 +218,7 @@ class GuildFragment : BaseMainFragment() {
}
private fun setGroup(group: Group?) {
- this.activity?.invalidateOptionsMenu()
+ this.mainActivity?.invalidateOptionsMenu()
if (viewModel.isPublicGuild) {
chatFragment?.autocompleteContext = "publicGuild"
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 1e05ecb27..8aab2ff17 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
@@ -20,7 +20,9 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.launch
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GuildListFragment :
BaseFragment(),
SearchView.OnQueryTextListener,
@@ -42,9 +44,6 @@ class GuildListFragment :
private var viewAdapter = GuildListAdapter()
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
index 9c4c93838..e339993cf 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
@@ -23,7 +23,9 @@ import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class GuildOverviewFragment : BaseMainFragment(), SearchView.OnQueryTextListener {
@Inject
@@ -54,9 +56,6 @@ class GuildOverviewFragment : BaseMainFragment(), Sear
setViewPagerAdapter()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
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 e4d4dbf16..2509f8a5e 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
@@ -20,7 +20,6 @@ import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.android.habitica.databinding.FragmentNoPartyBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -37,7 +36,9 @@ import com.habitrpg.common.habitica.views.AvatarView
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.math.roundToInt
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class NoPartyFragmentFragment : BaseMainFragment() {
@Inject
@@ -104,7 +105,7 @@ class NoPartyFragmentFragment : BaseMainFragment() {
val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
val clip = ClipData.newPlainText(context?.getString(R.string.username), userViewModel.username)
clipboard?.setPrimaryClip(clip)
- val activity = activity
+ val activity = mainActivity
if (activity != null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
HabiticaSnackbar.showSnackbar(activity.snackbarContainer, getString(R.string.username_copied), HabiticaSnackbar.SnackbarDisplayType.NORMAL)
}
@@ -114,7 +115,7 @@ class NoPartyFragmentFragment : BaseMainFragment() {
val bundle = Bundle()
bundle.putString("groupType", "party")
bundle.putString("leader", userViewModel.userID)
- val intent = Intent(activity, GroupFormActivity::class.java)
+ val intent = Intent(mainActivity, GroupFormActivity::class.java)
intent.putExtras(bundle)
intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
groupFormResult.launch(intent)
@@ -197,9 +198,6 @@ class NoPartyFragmentFragment : BaseMainFragment() {
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
companion object {
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 852a2b255..4846cbdca 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
@@ -49,7 +49,9 @@ import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PartyDetailFragment : BaseFragment() {
var viewModel: PartyViewModel? = null
@@ -75,9 +77,6 @@ class PartyDetailFragment : BaseFragment() {
@field:[Inject Named(AppModule.NAMED_USER_ID)]
lateinit var userId: String
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onDestroyView() {
inventoryRepository.close()
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 a9e03f6ed..5058aa4cb 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
@@ -16,7 +16,6 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity
@@ -25,7 +24,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.fragments.social.ChatFragment
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewType
import com.habitrpg.android.habitica.ui.viewmodels.PartyViewModel
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PartyFragment : BaseMainFragment() {
private var detailFragment: PartyDetailFragment? = null
@@ -80,9 +81,6 @@ class PartyFragment : BaseMainFragment() {
viewModel.retrieveGroup {}
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun updateGroupUI(group: Group?) {
viewPagerAdapter?.notifyDataSetChanged()
@@ -94,7 +92,7 @@ class PartyFragment : BaseMainFragment() {
tabLayout?.visibility = View.VISIBLE
}
- this.activity?.invalidateOptionsMenu()
+ this.mainActivity?.invalidateOptionsMenu()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@@ -112,7 +110,7 @@ class PartyFragment : BaseMainFragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_invite_item -> {
- val intent = Intent(activity, GroupInviteActivity::class.java)
+ val intent = Intent(mainActivity, GroupInviteActivity::class.java)
intent.putExtra("groupType", "party")
sendInvitesResult.launch(intent)
return true
@@ -145,7 +143,7 @@ class PartyFragment : BaseMainFragment() {
bundle.putString("leader", group?.leaderID)
bundle.putBoolean("leaderCreateChallenge", group?.leaderOnlyChallenges ?: false)
- val intent = Intent(activity, GroupFormActivity::class.java)
+ val intent = Intent(mainActivity, GroupFormActivity::class.java)
intent.putExtras(bundle)
intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
groupFormResult.launch(intent)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt
index 84e91b437..f6dc2e692 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInviteFragment.kt
@@ -4,35 +4,41 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.habitrpg.android.habitica.components.UserComponent
+import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentComposeBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
+import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
+import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
-class PartyInviteViewModel: BaseViewModel() {
- override fun inject(component : UserComponent) {
-
- }
+@HiltViewModel
+class PartyInviteViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val socialRepository : SocialRepository
+) : BaseViewModel(userRepository, userViewModel) {
}
+@AndroidEntryPoint
class PartyInviteFragment : BaseFragment() {
@Inject
- lateinit var configManager: AppConfigManager
+ lateinit var configManager : AppConfigManager
- override var binding: FragmentComposeBinding? = null
+ override var binding : FragmentComposeBinding? = null
- override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentComposeBinding {
+ override fun createBinding(
+ inflater : LayoutInflater,
+ container : ViewGroup?
+ ) : FragmentComposeBinding {
return FragmentComposeBinding.inflate(inflater, container, false)
}
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ override fun onViewCreated(view : View, savedInstanceState : Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
-
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragmennt.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragmennt.kt
index 2a3c93950..9e2db96da 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragmennt.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyInvitePagerFragmennt.kt
@@ -8,10 +8,11 @@ import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class PartyInvitePagerFragment : BaseMainFragment() {
override var binding : FragmentViewpagerBinding? = null
@@ -40,10 +41,6 @@ class PartyInvitePagerFragment : BaseMainFragment() {
binding?.viewPager?.currentItem = 0
}
- override fun injectFragment(component : UserComponent) {
- component.inject(this)
- }
-
private fun setViewPagerAdapter() {
val fragmentManager = childFragmentManager
binding?.viewPager?.adapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt
index 7bdebd352..7d4dc2087 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartySeekingFragment.kt
@@ -25,28 +25,29 @@ import androidx.compose.ui.unit.sp
import androidx.fragment.app.viewModels
import androidx.lifecycle.viewModelScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.FragmentComposeBinding
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
+import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
-class PartySeekingViewModel: BaseViewModel() {
+@HiltViewModel
+class PartySeekingViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val socialRepository : SocialRepository
+): BaseViewModel(userRepository, userViewModel) {
val isRefreshing = mutableStateOf(false)
- @Inject
- lateinit var socialRepository: SocialRepository
-
val seekingUsers = mutableStateOf>(emptyList())
- override fun inject(component : UserComponent) {
- component.inject(this)
- }
-
init {
retrieveUsers()
}
@@ -60,6 +61,7 @@ class PartySeekingViewModel: BaseViewModel() {
}
}
+@AndroidEntryPoint
class PartySeekingFragment: BaseFragment() {
val viewModel: PartySeekingViewModel by viewModels()
@@ -71,10 +73,6 @@ class PartySeekingFragment: BaseFragment() {
return FragmentComposeBinding.inflate(inflater)
}
- override fun injectFragment(component : UserComponent) {
- component.inject(this)
- }
-
override fun onCreateView(
inflater : LayoutInflater,
container : ViewGroup?,
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
index fde635072..c126b0b22 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt
@@ -11,7 +11,6 @@ import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentSupportBugFixBinding
import com.habitrpg.android.habitica.databinding.KnownIssueBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -23,10 +22,12 @@ import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.helpers.AppTestingLevel
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.jaredrummler.android.device.DeviceName
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+@AndroidEntryPoint
class BugFixFragment : BaseMainFragment() {
private var deviceInfo: DeviceName.DeviceInfo? = null
override var binding: FragmentSupportBugFixBinding? = null
@@ -46,9 +47,6 @@ class BugFixFragment : BaseMainFragment() {
@Inject
lateinit var userViewModel: MainUserViewModel
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateView(
inflater: LayoutInflater,
@@ -88,7 +86,7 @@ class BugFixFragment : BaseMainFragment() {
private val versionName: String by lazy {
try {
- activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName
+ mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionName
?: ""
} catch (e: PackageManager.NameNotFoundException) {
""
@@ -98,7 +96,7 @@ class BugFixFragment : BaseMainFragment() {
private val versionCode: Int by lazy {
try {
@Suppress("DEPRECATION")
- activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode
+ mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionCode
?: 0
} catch (e: PackageManager.NameNotFoundException) {
0
@@ -145,7 +143,7 @@ class BugFixFragment : BaseMainFragment() {
bodyOfEmail += "%0D%0ADetails:%0D%0A%0D%0A"
- activity?.let {
+ mainActivity?.let {
val emailIntent = Intent(Intent.ACTION_SENDTO)
val mailto = "mailto:" + appConfigManager.supportEmail() +
"?subject=" + Uri.encode(subject) +
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt
index dc50ef882..c6fadb57a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/FAQDetailFragment.kt
@@ -13,7 +13,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.helpers.launchCatching
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class FAQDetailFragment : BaseMainFragment() {
@Inject
lateinit var faqRepository: FAQRepository
@@ -55,7 +57,4 @@ class FAQDetailFragment : BaseMainFragment() {
binding?.answerTextView?.movementMethod = LinkMovementMethod.getInstance()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
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 a0e3bedc4..cd044ffe2 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
@@ -20,7 +20,9 @@ import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.helpers.setMarkdown
import javax.inject.Inject
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class FAQOverviewFragment : BaseMainFragment() {
override var binding: FragmentFaqOverviewBinding? = null
@@ -79,9 +81,6 @@ class FAQOverviewFragment : BaseMainFragment() {
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
private fun loadArticles() {
lifecycleScope.launchCatching {
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 ee37c9337..5f6c28610 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
@@ -8,7 +8,6 @@ import android.view.ViewGroup
import androidx.core.net.toUri
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.FAQRepository
import com.habitrpg.android.habitica.databinding.FragmentSupportMainBinding
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -20,7 +19,9 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Named
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class SupportMainFragment : BaseMainFragment() {
override var binding: FragmentSupportMainBinding? = null
@@ -63,7 +64,7 @@ class SupportMainFragment : BaseMainFragment() {
binding?.resetTutorialButton?.setOnClickListener {
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.resetTutorial()
- activity?.showSnackbar(null, null, getString(R.string.tutorial_reset_confirmation), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS)
+ mainActivity?.showSnackbar(null, null, getString(R.string.tutorial_reset_confirmation), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS)
}
}
}
@@ -73,7 +74,4 @@ class SupportMainFragment : BaseMainFragment() {
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
}
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 2b95a87ca..b10fae01b 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
@@ -13,17 +13,21 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.activities.SkillMemberActivity
import com.habitrpg.android.habitica.ui.adapter.tasks.RewardsRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
+import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
+@AndroidEntryPoint
class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() {
private var showCustomRewards: Boolean = true
@@ -72,6 +76,14 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() {
val intent = Intent(activity, SkillMemberActivity::class.java)
cardSelectedResult.launch(intent)
}
+ (recyclerAdapter as? RewardsRecyclerViewAdapter)?.onShowPurchaseDialog = { item, isPinned ->
+ val dialog = PurchaseDialog(requireContext(), userRepository, inventoryRepository, item)
+ dialog.isPinned = isPinned
+ dialog.onGearPurchased = {
+ viewModel.refreshData { }
+ }
+ dialog.show()
+ }
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 1aaa38707..8118ac9bc 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
@@ -15,7 +15,6 @@ import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.NO_POSITION
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
@@ -50,6 +49,7 @@ import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.responses.TaskDirection
import com.habitrpg.shared.habitica.models.responses.TaskScoringResult
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -63,6 +63,7 @@ import kotlinx.coroutines.withContext
import java.util.Date
import javax.inject.Inject
+@AndroidEntryPoint
open class TaskRecyclerViewFragment :
BaseFragment(),
androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
@@ -142,7 +143,7 @@ open class TaskRecyclerViewFragment :
taskRepository.syncErroredTasks()
}
}
- recyclerAdapter?.taskOpenEvents = { task, view ->
+ recyclerAdapter?.taskOpenEvents = { task, _ ->
openTaskForm(task)
}
recyclerAdapter?.taskScoreEvents = { task, direction ->
@@ -230,9 +231,6 @@ open class TaskRecyclerViewFragment :
super.onDestroy()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
index 298ce46ff..7559c6ded 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
@@ -20,9 +20,8 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
+import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.helpers.AmplitudeManager
@@ -35,10 +34,16 @@ import com.habitrpg.android.habitica.ui.views.tasks.TaskFilterDialog
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
import java.util.Date
import java.util.WeakHashMap
+import javax.inject.Inject
+@AndroidEntryPoint
class TasksFragment : BaseMainFragment(), SearchView.OnQueryTextListener, HabiticaBottomNavigationViewListener {
+ @Inject
+ lateinit var tagRepository : TagRepository
+
internal val viewModel: TasksViewModel by viewModels()
override var binding: FragmentViewpagerBinding? = null
@@ -121,7 +126,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
bottomNavigation?.canAddTasks = viewModel.canAddTasks()
}
- activity?.binding?.content?.toolbarTitle?.setOnClickListener {
+ mainActivity?.binding?.content?.toolbarTitle?.setOnClickListener {
viewModel.cycleOwnerIDs()
}
}
@@ -133,9 +138,6 @@ class TasksFragment : BaseMainFragment(), SearchView.O
super.onPause()
}
- override fun injectFragment(component: UserComponent) {
- component.inject(this)
- }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
@@ -193,11 +195,11 @@ class TasksFragment : BaseMainFragment(), SearchView.O
private fun showFilterDialog() {
context?.let {
- val dialog = TaskFilterDialog(it, HabiticaBaseApplication.userComponent, viewModel.isPersonalBoard)
+ val dialog = TaskFilterDialog(it, tagRepository, viewModel.isPersonalBoard)
dialog.viewModel = viewModel
// There are some cases where these things might not be correctly set after the app resumes. This is just to catch that as best as possible
- val navigation = bottomNavigation ?: activity?.binding?.content?.bottomNavigation
+ val navigation = bottomNavigation ?: mainActivity?.binding?.content?.bottomNavigation
val taskType = navigation?.activeTaskType ?: activeFragment?.taskType
dialog.setOnDismissListener { updateFilterIcon() }
@@ -332,7 +334,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
}
bundle.putStringArrayList(TaskFormActivity.SELECTED_TAGS_KEY, ArrayList(viewModel.tags))
- val intent = Intent(activity, TaskFormActivity::class.java)
+ val intent = Intent(mainActivity, TaskFormActivity::class.java)
intent.putExtras(bundle)
intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
if (this.isAdded) {
@@ -420,7 +422,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
private fun updateBoardDisplay() {
if (viewModel.ownerTitle.isNotBlank()) {
- activity?.title = viewModel.ownerTitle
+ mainActivity?.title = viewModel.ownerTitle
MainNavigationController.updateLabel(R.id.tasksFragment, viewModel.ownerTitle.toString())
}
viewModel.userViewModel.currentTeamPlan.value = viewModel.teamPlans[viewModel.ownerID.value]
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
index 0812b69c6..ab433c767 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
@@ -37,7 +37,7 @@ class AutocompleteAdapter(
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val filterResults = FilterResults()
- if (constraint != null && constraint.isNotEmpty()) {
+ if (!constraint.isNullOrEmpty()) {
if (constraint[0] == '@' && constraint.length >= 3 && socialRepository != null && remoteAutocomplete) {
if (Date().time - lastAutocomplete > 2000) {
lastAutocomplete = Date().time
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt
index dbd7fc05a..c022b63ab 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ShopItemViewHolder.kt
@@ -5,11 +5,9 @@ import android.graphics.drawable.BitmapDrawable
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.databinding.RowShopitemBinding
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
-import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.extensions.loadImage
@@ -19,6 +17,7 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
var shopIdentifier: String? = null
private var item: ShopItem? = null
var onNeedsRefresh: (() -> Unit)? = null
+ var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null
private var context: Context = itemView.context
@@ -95,17 +94,7 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
override fun onClick(view: View) {
val item = item
if (item != null && item.isValid) {
-
- val dialog = PurchaseDialog(context, HabiticaBaseApplication.userComponent, item)
- dialog.shopIdentifier = shopIdentifier
- dialog.isPinned = isPinned
- dialog.purchaseCardAction = {
- purchaseCardAction?.invoke(it)
- }
- dialog.onGearPurchased = {
- onNeedsRefresh?.invoke()
- }
- dialog.show()
+ onShowPurchaseDialog?.invoke(item, isPinned)
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt
index 3d354305b..fc5bf97a4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt
@@ -239,7 +239,7 @@ abstract class BaseTaskViewHolder constructor(
val completedCount = data.group?.assignedUsersDetail?.filter { it.completed }?.size ?: 0
if (completedCount > 0) {
completedCountTextView.text =
- "$completedCount/${data?.group?.assignedUsersDetail?.size}"
+ "$completedCount/${data.group?.assignedUsersDetail?.size}"
completedCountTextView.visibility = View.VISIBLE
} else {
completedCountTextView.visibility = View.GONE
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt
index 3f341ec9e..12a1e2693 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt
@@ -18,7 +18,6 @@ import com.google.android.gms.common.GoogleApiAvailability
import com.google.android.gms.common.GooglePlayServicesUtil
import com.google.android.gms.common.Scopes
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.UserRepository
@@ -36,28 +35,17 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import javax.inject.Inject
-class AuthenticationViewModel() {
- @Inject
- internal lateinit var apiClient: ApiClient
- @Inject
- internal lateinit var userRepository: UserRepository
- @Inject
- internal lateinit var sharedPrefs: SharedPreferences
- @Inject
- internal lateinit var hostConfig: HostConfig
- @Inject
- internal lateinit var analyticsManager: AnalyticsManager
- @Inject
- @JvmField
- var keyHelper: KeyHelper? = null
+class AuthenticationViewModel @Inject constructor(
+ val apiClient : ApiClient,
+ val userRepository : UserRepository,
+ val sharedPrefs : SharedPreferences,
+ val hostConfig : HostConfig,
+ val analyticsManager : AnalyticsManager,
+ private val keyHelper : KeyHelper?
+) {
+ var googleEmail : String? = null
- var googleEmail: String? = null
-
- init {
- HabiticaBaseApplication.userComponent?.inject(this)
- }
-
- fun connectApple(fragmentManager: FragmentManager, onSuccess: (UserAuthResponse) -> Unit) {
+ fun connectApple(fragmentManager : FragmentManager, onSuccess : (UserAuthResponse) -> Unit) {
val configuration = SignInWithAppleConfiguration(
clientId = BuildConfig.APPLE_AUTH_CLIENT_ID,
redirectUri = "${hostConfig.address}/api/v4/user/auth/apple",
@@ -74,6 +62,7 @@ class AuthenticationViewModel() {
response.newUser = result.newUser
onSuccess(response)
}
+
else -> {
}
}
@@ -81,8 +70,8 @@ class AuthenticationViewModel() {
}
fun handleGoogleLogin(
- activity: Activity,
- pickAccountResult: ActivityResultLauncher
+ activity : Activity,
+ pickAccountResult : ActivityResultLauncher
) {
if (!checkPlayServices(activity)) {
return
@@ -94,7 +83,7 @@ class AuthenticationViewModel() {
)
try {
pickAccountResult.launch(intent)
- } catch (e: ActivityNotFoundException) {
+ } catch (e : ActivityNotFoundException) {
val alert = HabiticaAlertDialog(activity)
alert.setTitle(R.string.authentication_error_title)
alert.setMessage(R.string.google_services_missing)
@@ -104,9 +93,9 @@ class AuthenticationViewModel() {
}
fun handleGoogleLoginResult(
- activity: Activity,
- recoverFromPlayServicesErrorResult: ActivityResultLauncher?,
- onSuccess: (Boolean) -> Unit
+ activity : Activity,
+ recoverFromPlayServicesErrorResult : ActivityResultLauncher?,
+ onSuccess : (Boolean) -> Unit
) {
val scopesString = Scopes.PROFILE + " " + Scopes.EMAIL
val scopes = "oauth2:$scopesString"
@@ -122,7 +111,8 @@ class AuthenticationViewModel() {
}
}) {
val token = GoogleAuthUtil.getToken(activity, googleEmail ?: "", scopes)
- val response = apiClient.connectSocial("google", googleEmail ?: "", token) ?: return@launchCatching
+ val response =
+ apiClient.connectSocial("google", googleEmail ?: "", token) ?: return@launchCatching
newUser = response.newUser
handleAuthResponse(response)
onSuccess(newUser)
@@ -130,9 +120,9 @@ class AuthenticationViewModel() {
}
private fun handleGoogleAuthException(
- e: Exception,
- activity: Activity,
- recoverFromPlayServicesErrorResult: ActivityResultLauncher
+ e : Exception,
+ activity : Activity,
+ recoverFromPlayServicesErrorResult : ActivityResultLauncher
) {
if (e is GooglePlayServicesAvailabilityException) {
GoogleApiAvailability.getInstance()
@@ -154,7 +144,7 @@ class AuthenticationViewModel() {
}
}
- private fun checkPlayServices(activity: Activity): Boolean {
+ private fun checkPlayServices(activity : Activity) : Boolean {
val googleAPI = GoogleApiAvailability.getInstance()
val result = googleAPI.isGooglePlayServicesAvailable(activity)
if (result != ConnectionResult.SUCCESS) {
@@ -170,29 +160,28 @@ class AuthenticationViewModel() {
return true
}
- fun handleAuthResponse(userAuthResponse: UserAuthResponse) {
+ fun handleAuthResponse(userAuthResponse : UserAuthResponse) {
try {
saveTokens(userAuthResponse.apiToken, userAuthResponse.id)
- } catch (e: Exception) {
+ } catch (e : Exception) {
analyticsManager.logException(e)
}
-
- HabiticaBaseApplication.reloadUserComponent()
}
@Throws(Exception::class)
- private fun saveTokens(api: String, user: String) {
+ private fun saveTokens(api : String, user : String) {
this.apiClient.updateAuthenticationCredentials(user, api)
sharedPrefs.edit {
putString("UserID", user)
- val encryptedKey = if (keyHelper != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- try {
- keyHelper?.encrypt(api)
- } catch (e: Exception) {
- null
- }
- } else null
- if (encryptedKey?.length ?: 0 > 5) {
+ val encryptedKey =
+ if (keyHelper != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ try {
+ keyHelper.encrypt(api)
+ } catch (e : Exception) {
+ null
+ }
+ } else null
+ if ((encryptedKey?.length ?: 0) > 5) {
putString(user, encryptedKey)
} else {
// Something might have gone wrong with encryption, so fall back to this.
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt
index 6cfc6b75c..c2425b131 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/BaseViewModel.kt
@@ -3,33 +3,16 @@ package com.habitrpg.android.habitica.ui.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.habitrpg.android.habitica.HabiticaBaseApplication
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import kotlinx.coroutines.launch
-import javax.inject.Inject
-
-abstract class BaseViewModel(initializeComponent: Boolean = true) : ViewModel() {
-
- @Inject
- lateinit var userRepository: UserRepository
- @Inject
- lateinit var userViewModel: MainUserViewModel
+abstract class BaseViewModel (val userRepository : UserRepository, val userViewModel : MainUserViewModel) : ViewModel() {
val user: LiveData by lazy {
userViewModel.user
}
- init {
- if (initializeComponent) {
- HabiticaBaseApplication.userComponent?.let { inject(it) }
- }
- }
-
- abstract fun inject(component: UserComponent)
-
override fun onCleared() {
userRepository.close()
super.onCleared()
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 4ba3e8200..e6f3117d6 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
@@ -5,9 +5,9 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ChallengeRepository
import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.NotificationsManager
import com.habitrpg.android.habitica.models.members.Member
@@ -17,7 +17,9 @@ import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.models.notifications.NewChatMessageData
+import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.kotlin.toFlow
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filterNotNull
@@ -28,28 +30,26 @@ import kotlinx.coroutines.launch
import retrofit2.HttpException
import javax.inject.Inject
-enum class GroupViewType(internal val order: String) {
+enum class GroupViewType(internal val order : String) {
PARTY("party"),
GUILD("guild"),
TAVERN("tavern")
}
-open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initializeComponent) {
- constructor() : this(true)
-
- @Inject
- lateinit var challengeRepository: ChallengeRepository
-
- @Inject
- lateinit var socialRepository: SocialRepository
-
- @Inject
- lateinit var notificationsManager: NotificationsManager
+@OptIn(ExperimentalCoroutinesApi::class)
+@HiltViewModel
+open class GroupViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val challengeRepository : ChallengeRepository,
+ val socialRepository : SocialRepository,
+ val notificationsManager : NotificationsManager
+) : BaseViewModel(userRepository, userViewModel) {
protected val groupIDState = MutableStateFlow(null)
- val groupIDFlow: Flow = groupIDState
+ val groupIDFlow : Flow = groupIDState
- var groupViewType: GroupViewType? = null
+ var groupViewType : GroupViewType? = null
private val groupFlow = groupIDFlow
.filterNotNull()
@@ -67,25 +67,21 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
.map { it != null }
private val isMemberData = isMemberFlow.asLiveData()
- private val _chatMessages: MutableLiveData> by lazy {
+ private val _chatMessages : MutableLiveData> by lazy {
MutableLiveData>(listOf())
}
- val chatmessages: LiveData> by lazy {
+ val chatmessages : LiveData> by lazy {
_chatMessages
}
- var gotNewMessages: Boolean = false
-
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
+ var gotNewMessages : Boolean = false
override fun onCleared() {
socialRepository.close()
super.onCleared()
}
- fun setGroupID(groupID: String) {
+ fun setGroupID(groupID : String) {
if (groupID == groupIDState.value) return
groupIDState.value = groupID
@@ -99,22 +95,22 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- val groupID: String?
+ val groupID : String?
get() = groupIDState.value
- val isMember: Boolean
+ val isMember : Boolean
get() = isMemberData.value ?: false
- val leaderID: String?
+ val leaderID : String?
get() = group.value?.leaderID
- val isLeader: Boolean
+ val isLeader : Boolean
get() = user.value?.id == leaderID
- val isPublicGuild: Boolean
+ val isPublicGuild : Boolean
get() = group.value?.privacy == "public"
- fun getGroupData(): LiveData = group
- fun getLeaderData(): LiveData = leader
- fun getIsMemberData(): LiveData = isMemberData
+ fun getGroupData() : LiveData = group
+ fun getLeaderData() : LiveData = leader
+ fun getIsMemberData() : LiveData = isMemberData
- fun retrieveGroup(function: (() -> Unit)?) {
+ fun retrieveGroup(function : (() -> Unit)?) {
if (groupID?.isNotEmpty() == true) {
viewModelScope.launch(
ExceptionHandler.coroutine {
@@ -132,13 +128,13 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun inviteToGroup(inviteData: HashMap) {
+ fun inviteToGroup(inviteData : HashMap) {
viewModelScope.launchCatching {
socialRepository.inviteToGroup(group.value?.id ?: "", inviteData)
}
}
- fun updateOrCreateGroup(bundle: Bundle?) {
+ fun updateOrCreateGroup(bundle : Bundle?) {
viewModelScope.launch(ExceptionHandler.coroutine()) {
if (group.value == null) {
socialRepository.createGroup(
@@ -161,9 +157,9 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
fun leaveGroup(
- groupChallenges: List,
- keepChallenges: Boolean = true,
- function: (() -> Unit)? = null
+ groupChallenges : List,
+ keepChallenges : Boolean = true,
+ function : (() -> Unit)? = null
) {
if (!keepChallenges) {
viewModelScope.launchCatching {
@@ -179,14 +175,14 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun joinGroup(id: String? = null, function: (() -> Unit)? = null) {
+ fun joinGroup(id : String? = null, function : (() -> Unit)? = null) {
viewModelScope.launchCatching {
socialRepository.joinGroup(id ?: groupID)
function?.invoke()
}
}
- fun rejectGroupInvite(id: String? = null) {
+ fun rejectGroupInvite(id : String? = null) {
groupID?.let {
viewModelScope.launchCatching {
socialRepository.rejectGroupInvite(id ?: it)
@@ -204,7 +200,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun likeMessage(message: ChatMessage) {
+ fun likeMessage(message : ChatMessage) {
viewModelScope.launchCatching {
val message = socialRepository.likeMessage(message)
val index = _chatMessages.value?.indexOfFirst { it.id == message?.id }
@@ -220,7 +216,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun deleteMessage(chatMessage: ChatMessage) {
+ fun deleteMessage(chatMessage : ChatMessage) {
val oldIndex = _chatMessages.value?.indexOf(chatMessage) ?: return
val list = _chatMessages.value?.toMutableList()
list?.remove(chatMessage)
@@ -236,7 +232,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun postGroupChat(chatText: String, onComplete: () -> Unit, onError: () -> Unit) {
+ fun postGroupChat(chatText : String, onComplete : () -> Unit, onError : () -> Unit) {
groupID?.let { groupID ->
viewModelScope.launch(
ExceptionHandler.coroutine {
@@ -255,7 +251,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun retrieveGroupChat(onComplete: () -> Unit) {
+ fun retrieveGroupChat(onComplete : () -> Unit) {
var groupID = groupID
if (groupViewType == GroupViewType.PARTY) {
groupID = "party"
@@ -271,7 +267,7 @@ open class GroupViewModel(initializeComponent: Boolean) : BaseViewModel(initiali
}
}
- fun updateGroup(bundle: Bundle?) {
+ fun updateGroup(bundle : Bundle?) {
viewModelScope.launch(ExceptionHandler.coroutine()) {
socialRepository.updateGroup(
group.value,
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 2cfe61c05..1392ae68b 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
@@ -2,19 +2,18 @@ package com.habitrpg.android.habitica.ui.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.paging.DataSource
import androidx.paging.PagedList
import androidx.paging.PositionalDataSource
import androidx.paging.toLiveData
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.kotlin.toFlow
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
@@ -30,9 +29,13 @@ import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.math.ceil
-class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseViewModel() {
- @Inject
- lateinit var socialRepository: SocialRepository
+@HiltViewModel
+class InboxViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val socialRepository : SocialRepository) : BaseViewModel(userRepository, userViewModel) {
+ val recipientID: String? = null
+ val recipientUsername: String? = null
private var memberIDFlow = MutableStateFlow(null)
val memberIDState: StateFlow = memberIDFlow
@@ -58,10 +61,6 @@ class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseVie
val memberID: String?
get() = memberIDFlow.value
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
fun invalidateDataSource() {
dataSourceFactory.sourceLiveData.value?.invalidate()
}
@@ -153,13 +152,3 @@ class MessagesDataSourceFactory(
return latestSource
}
}
-
-class InboxViewModelFactory(
- private val recipientID: String?,
- private val recipientUsername: String?
-) : ViewModelProvider.Factory {
-
- override fun create(modelClass: Class): T {
- return InboxViewModel(recipientID, recipientUsername) as T
- }
-}
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 8f502e41b..e1d2cedf3 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
@@ -6,10 +6,10 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.api.MaintenanceApiService
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
@@ -21,41 +21,33 @@ import com.habitrpg.common.habitica.helpers.AnalyticsManager
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.responses.MaintenanceResponse
+import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.kotlin.isValid
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import java.util.Date
import javax.inject.Inject
-class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
- @Inject
- internal lateinit var hostConfig: HostConfig
- @Inject
- internal lateinit var pushNotificationManager: PushNotificationManager
- @Inject
- internal lateinit var sharedPreferences: SharedPreferences
- @Inject
- internal lateinit var contentRepository: ContentRepository
- @Inject
- internal lateinit var taskRepository: TaskRepository
- @Inject
- internal lateinit var inventoryRepository: InventoryRepository
- @Inject
- internal lateinit var taskAlarmManager: TaskAlarmManager
- @Inject
- internal lateinit var analyticsManager: AnalyticsManager
- @Inject
- internal lateinit var maintenanceService: MaintenanceApiService
+@HiltViewModel
+class MainActivityViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val hostConfig : HostConfig,
+ val pushNotificationManager : PushNotificationManager,
+ val sharedPreferences : SharedPreferences,
+ val contentRepository : ContentRepository,
+ val taskRepository : TaskRepository,
+ val inventoryRepository : InventoryRepository,
+ val taskAlarmManager : TaskAlarmManager,
+ val analyticsManager : AnalyticsManager,
+ val maintenanceService : MaintenanceApiService
+) : BaseViewModel(userRepository, userViewModel), TutorialView.OnTutorialReaction {
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
- val isAuthenticated: Boolean
+ val isAuthenticated : Boolean
get() = hostConfig.hasAuthentication()
- val launchScreen: String?
+ val launchScreen : String?
get() = sharedPreferences.getString("launch_screen", "")
- var preferenceLanguage: String?
+ var preferenceLanguage : String?
get() = sharedPreferences.getString("language", "en")
set(value) {
sharedPreferences.edit {
@@ -74,9 +66,14 @@ class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
fun onCreate() {
try {
viewModelScope.launch(ExceptionHandler.coroutine()) {
- taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
+ taskAlarmManager.scheduleAllSavedAlarms(
+ sharedPreferences.getBoolean(
+ "preventDailyReminder",
+ false
+ )
+ )
}
- } catch (e: Exception) {
+ } catch (e : Exception) {
analyticsManager.logException(e)
}
}
@@ -89,14 +86,23 @@ class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
}
}
- fun retrieveUser(forced: Boolean = false) {
+ fun retrieveUser(forced : Boolean = false) {
if (hostConfig.hasAuthentication()) {
viewModelScope.launch(ExceptionHandler.coroutine()) {
contentRepository.retrieveWorldState()
userRepository.retrieveUser(true, forced)?.let { user ->
- analyticsManager.setUserProperty("has_party", if (user.party?.id?.isNotEmpty() == true) "true" else "false")
- analyticsManager.setUserProperty("is_subscribed", if (user.isSubscribed) "true" else "false")
- analyticsManager.setUserProperty("checkin_count", user.loginIncentives.toString())
+ analyticsManager.setUserProperty(
+ "has_party",
+ if (user.party?.id?.isNotEmpty() == true) "true" else "false"
+ )
+ analyticsManager.setUserProperty(
+ "is_subscribed",
+ if (user.isSubscribed) "true" else "false"
+ )
+ analyticsManager.setUserProperty(
+ "checkin_count",
+ user.loginIncentives.toString()
+ )
analyticsManager.setUserProperty("level", user.stats?.lvl?.toString() ?: "")
pushNotificationManager.setUser(user)
if (!pushNotificationManager.notificationPermissionEnabled()) {
@@ -115,23 +121,23 @@ class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
}
}
- fun updateAllowPushNotifications(allowPushNotifications: Boolean) {
+ fun updateAllowPushNotifications(allowPushNotifications : Boolean) {
sharedPreferences.getBoolean("usePushNotifications", true)
sharedPreferences.edit {
putBoolean("usePushNotifications", allowPushNotifications)
}
}
- override fun onTutorialCompleted(step: TutorialStep) {
+ override fun onTutorialCompleted(step : TutorialStep) {
updateUser("flags.tutorial." + step.tutorialGroup + "." + step.identifier, true)
logTutorialStatus(step, true)
}
- override fun onTutorialDeferred(step: TutorialStep) {
+ override fun onTutorialDeferred(step : TutorialStep) {
taskRepository.modify(step) { it.displayedOn = Date() }
}
- fun logTutorialStatus(step: TutorialStep, complete: Boolean) {
+ fun logTutorialStatus(step : TutorialStep, complete : Boolean) {
val additionalData = HashMap()
additionalData["eventLabel"] = step.identifier + "-android"
additionalData["eventValue"] = step.identifier ?: ""
@@ -144,7 +150,7 @@ class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
)
}
- fun ifNeedsMaintenance(onResult: ((MaintenanceResponse) -> Unit)) {
+ fun ifNeedsMaintenance(onResult : ((MaintenanceResponse) -> Unit)) {
viewModelScope.launchCatching {
val maintenanceResponse = maintenanceService.getMaintenanceStatus()
if (maintenanceResponse?.activeMaintenance == null) {
@@ -155,10 +161,10 @@ class MainActivityViewModel : BaseViewModel(), TutorialView.OnTutorialReaction {
}
fun getToolbarTitle(
- id: Int,
- label: CharSequence?,
- eggType: String?,
- onSuccess: ((CharSequence?) -> Unit)
+ id : Int,
+ label : CharSequence?,
+ eggType : String?,
+ onSuccess : ((CharSequence?) -> Unit)
) {
if (id == R.id.petDetailRecyclerFragment || id == R.id.mountDetailRecyclerFragment) {
viewModelScope.launchCatching {
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 997384c40..ef8ad1bd7 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
@@ -16,8 +16,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.launch
+import javax.inject.Inject
-class MainUserViewModel(private val providedUserID: String, val userRepository: UserRepository, val socialRepository: SocialRepository) {
+class MainUserViewModel @Inject constructor(private val providedUserID: String, val userRepository: UserRepository, val socialRepository: SocialRepository) {
val formattedUsername: CharSequence?
get() = user.value?.formattedUsername
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt
index 8005f46af..78f8e61b6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/NotificationsViewModel.kt
@@ -4,8 +4,8 @@ import android.os.Bundle
import androidx.core.os.bundleOf
import androidx.lifecycle.viewModelScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.NotificationsManager
import com.habitrpg.android.habitica.models.social.UserParty
@@ -22,6 +22,7 @@ import com.habitrpg.common.habitica.models.notifications.NewStuffData
import com.habitrpg.common.habitica.models.notifications.PartyInvitationData
import com.habitrpg.common.habitica.models.notifications.PartyInvite
import com.habitrpg.common.habitica.models.notifications.QuestInvitationData
+import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
@@ -30,11 +31,13 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
-open class NotificationsViewModel : BaseViewModel() {
- @Inject
- lateinit var notificationsManager: NotificationsManager
- @Inject
- lateinit var socialRepository: SocialRepository
+@HiltViewModel
+open class NotificationsViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val notificationsManager : NotificationsManager,
+ val socialRepository : SocialRepository
+) : BaseViewModel(userRepository, userViewModel) {
private val supportedNotificationTypes = listOf(
Notification.Type.NEW_STUFF.type,
@@ -52,14 +55,10 @@ open class NotificationsViewModel : BaseViewModel() {
Notification.Type.QUEST_INVITATION.type
)
- private var party: UserParty? = null
+ private var party : UserParty? = null
private val customNotifications = MutableStateFlow>(emptyList())
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
init {
userViewModel.user.observeForever {
if (it == null) return@observeForever
@@ -77,9 +76,9 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- fun getNotifications(): Flow> {
- val serverNotifications = notificationsManager.getNotifications()
- .map { filterSupportedTypes(it) }
+ fun getNotifications() : Flow> {
+ val serverNotifications =
+ notificationsManager.getNotifications().map { filterSupportedTypes(it) }
return serverNotifications.combine(customNotifications) { serverNotificationsList, customNotificationsList ->
if (serverNotificationsList.firstOrNull { notification -> notification.type == Notification.Type.NEW_STUFF.type } != null) {
@@ -89,70 +88,61 @@ open class NotificationsViewModel : BaseViewModel() {
}.map { it.sortedBy { notification -> notification.priority } }
}
- fun getNotificationCount(): Flow {
- return getNotifications()
- .map { it.count() }
+ fun getNotificationCount() : Flow {
+ return getNotifications().map { it.count() }.distinctUntilChanged()
+ }
+
+ fun allNotificationsSeen() : Flow {
+ return getNotifications().map { it.all { notification -> notification.seen != false } }
.distinctUntilChanged()
}
- fun allNotificationsSeen(): Flow {
- return getNotifications()
- .map { it.all { notification -> notification.seen != false } }
- .distinctUntilChanged()
- }
-
- fun getHasPartyNotification(): Flow {
- return getNotifications()
- .map {
+ fun getHasPartyNotification() : Flow {
+ return getNotifications().map {
it.find { notification ->
val data = notification.data as? NewChatMessageData
isPartyMessage(data)
} != null
- }
- .distinctUntilChanged()
+ }.distinctUntilChanged()
}
- suspend fun refreshNotifications(): User? {
+ suspend fun refreshNotifications() : User? {
return userRepository.retrieveUser(withTasks = false, forced = true)
}
- private fun filterSupportedTypes(notifications: List): List {
+ private fun filterSupportedTypes(notifications : List) : List {
return notifications.filter { supportedNotificationTypes.contains(it.type) }
}
- private fun convertInvitationsToNotifications(user: User): MutableList {
+ private fun convertInvitationsToNotifications(user : User) : MutableList {
val notifications = mutableListOf()
- notifications.addAll(
- user.invitations?.parties?.map {
- val notification = Notification()
- notification.id = "custom-party-invitation-" + it.id
- notification.type = Notification.Type.PARTY_INVITATION.type
- val data = PartyInvitationData()
- data.invitation = PartyInvite()
- data.invitation?.id = it.id
- data.invitation?.name = it.name
- data.invitation?.inviter = it.inviter
- notification.data = data
- notification
- } ?: emptyList()
- )
+ notifications.addAll(user.invitations?.parties?.map {
+ val notification = Notification()
+ notification.id = "custom-party-invitation-" + it.id
+ notification.type = Notification.Type.PARTY_INVITATION.type
+ val data = PartyInvitationData()
+ data.invitation = PartyInvite()
+ data.invitation?.id = it.id
+ data.invitation?.name = it.name
+ data.invitation?.inviter = it.inviter
+ notification.data = data
+ notification
+ } ?: emptyList())
- notifications.addAll(
- user.invitations?.guilds?.map {
- val notification = Notification()
- notification.id = "custom-guild-invitation-" + it.id
- notification.type = Notification.Type.GUILD_INVITATION.type
- val data = GuildInvitationData()
- data.invitation = GuildInvite()
- data.invitation?.id = it.id
- data.invitation?.name = it.name
- data.invitation?.inviter = it.inviter
- data.invitation?.publicGuild = it.publicGuild
- notification.data = data
- notification
- } ?: emptyList()
- )
+ notifications.addAll(user.invitations?.guilds?.map {
+ val notification = Notification()
+ notification.id = "custom-guild-invitation-" + it.id
+ notification.type = Notification.Type.GUILD_INVITATION.type
+ val data = GuildInvitationData()
+ data.invitation = GuildInvite()
+ data.invitation?.id = it.id
+ data.invitation?.name = it.name
+ data.invitation?.inviter = it.inviter
+ data.invitation?.publicGuild = it.publicGuild
+ notification.data = data
+ notification
+ } ?: emptyList())
val quest = user.party?.quest
if (quest != null && quest.RSVPNeeded) {
@@ -169,7 +159,7 @@ open class NotificationsViewModel : BaseViewModel() {
return notifications
}
- fun isPartyMessage(data: NewChatMessageData?): Boolean {
+ fun isPartyMessage(data : NewChatMessageData?) : Boolean {
if (party?.isValid != true || data?.group?.id == null) {
return false
}
@@ -181,17 +171,18 @@ open class NotificationsViewModel : BaseViewModel() {
* Is the given notification an "artificial" custom notification (created by this class)
* instead of one of the ones coming from server.
*/
- private fun isCustomNotification(notification: Notification): Boolean {
+ private fun isCustomNotification(notification : Notification) : Boolean {
return notification.id.startsWith("custom-")
}
- private fun isCustomNewStuffNotification(notification: Notification) =
+ private fun isCustomNewStuffNotification(notification : Notification) =
notification.id == "custom-new-stuff-notification"
- fun dismissNotification(notification: Notification) {
+ fun dismissNotification(notification : Notification) {
if (isCustomNotification(notification)) {
if (isCustomNewStuffNotification(notification)) {
- customNotifications.value = customNotifications.value.filterNot { it.id == notification.id }
+ customNotifications.value =
+ customNotifications.value.filterNot { it.id == notification.id }
}
return
}
@@ -201,14 +192,12 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- fun dismissAllNotifications(notifications: List) {
- val dismissableIds = notifications
- .filter { !isCustomNotification(it) }
- .filter { !actionableNotificationTypes.contains(it.type) }
- .map { it.id }
+ fun dismissAllNotifications(notifications : List) {
+ val dismissableIds = notifications.filter { !isCustomNotification(it) }
+ .filter { !actionableNotificationTypes.contains(it.type) }.map { it.id }
- val customNewStuffNotification = notifications
- .firstOrNull { isCustomNewStuffNotification(it) }
+ val customNewStuffNotification =
+ notifications.firstOrNull { isCustomNewStuffNotification(it) }
if (customNewStuffNotification != null) {
dismissNotification(customNewStuffNotification)
@@ -226,11 +215,10 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- fun markNotificationsAsSeen(notifications: List) {
- val unseenIds = notifications
- .filter { !isCustomNotification(it) }
- .filter { it.seen == false }
- .map { it.id }
+ fun markNotificationsAsSeen(notifications : List) {
+ val unseenIds =
+ notifications.filter { !isCustomNotification(it) }.filter { it.seen == false }
+ .map { it.id }
if (unseenIds.isEmpty()) {
return
@@ -244,33 +232,47 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- private fun findNotification(id: String): Notification? {
- return notificationsManager.getNotification(id) ?: customNotifications.value?.find { it.id == id }
+ private fun findNotification(id : String) : Notification? {
+ return notificationsManager.getNotification(id)
+ ?: customNotifications.value.find { it.id == id }
}
- fun click(notificationId: String, navController: MainNavigationController) {
+ fun click(notificationId : String, navController : MainNavigationController) {
val notification = findNotification(notificationId) ?: return
dismissNotification(notification)
when (notification.type) {
Notification.Type.NEW_STUFF.type -> navController.navigate(R.id.newsFragment)
- Notification.Type.NEW_CHAT_MESSAGE.type -> clickNewChatMessage(notification, navController)
- Notification.Type.GUILD_INVITATION.type -> clickGroupInvitation(notification, navController)
- Notification.Type.PARTY_INVITATION.type -> clickGroupInvitation(notification, navController)
+ Notification.Type.NEW_CHAT_MESSAGE.type -> clickNewChatMessage(
+ notification, navController
+ )
+
+ Notification.Type.GUILD_INVITATION.type -> clickGroupInvitation(
+ notification, navController
+ )
+
+ Notification.Type.PARTY_INVITATION.type -> clickGroupInvitation(
+ notification, navController
+ )
+
Notification.Type.QUEST_INVITATION.type -> navController.navigate(R.id.partyFragment)
- Notification.Type.NEW_MYSTERY_ITEMS.type -> navController.navigate(R.id.itemsFragment, bundleOf(Pair("itemType", "special")))
+ Notification.Type.NEW_MYSTERY_ITEMS.type -> navController.navigate(
+ R.id.itemsFragment, bundleOf(Pair("itemType", "special"))
+ )
+
Notification.Type.UNALLOCATED_STATS_POINTS.type -> navController.navigate(R.id.statsFragment)
// Group tasks should go to Group tasks view if that is added to this app at some point
Notification.Type.GROUP_TASK_APPROVED.type -> navController.navigate(R.id.tasksFragment)
Notification.Type.GROUP_TASK_NEEDS_WORK.type -> navController.navigate(R.id.tasksFragment)
- Notification.Type.ITEM_RECEIVED.type -> clickItemReceivedNotification(notification, navController)
+ Notification.Type.ITEM_RECEIVED.type -> clickItemReceivedNotification(
+ notification, navController
+ )
}
}
private fun clickItemReceivedNotification(
- notification: Notification,
- navController: MainNavigationController
+ notification : Notification, navController : MainNavigationController
) {
val data = notification.data as? ItemReceivedData
when (data?.destination) {
@@ -281,8 +283,7 @@ open class NotificationsViewModel : BaseViewModel() {
}
private fun clickNewChatMessage(
- notification: Notification,
- navController: MainNavigationController
+ notification : Notification, navController : MainNavigationController
) {
val data = notification.data as? NewChatMessageData
if (isPartyMessage(data)) {
@@ -292,41 +293,47 @@ open class NotificationsViewModel : BaseViewModel() {
} else {
val bundle = Bundle()
bundle.putString("groupID", data?.group?.id)
- bundle.putBoolean("isMember", true) // safe to assume user is member since they got the notification
+ bundle.putBoolean(
+ "isMember", true
+ ) // safe to assume user is member since they got the notification
bundle.putInt("tabToOpen", 1)
navController.navigate(R.id.guildFragment, bundle)
}
}
private fun clickGroupInvitation(
- notification: Notification,
- navController: MainNavigationController
+ notification : Notification, navController : MainNavigationController
) {
when (notification.type) {
Notification.Type.GUILD_INVITATION.type -> {
val bundle = Bundle()
val data = notification.data as? GuildInvitationData
bundle.putString("groupID", data?.invitation?.id)
- bundle.putBoolean("isMember", true) // safe to assume user is member since they got the notification
+ bundle.putBoolean(
+ "isMember", true
+ ) // safe to assume user is member since they got the notification
navController.navigate(R.id.guildFragment, bundle)
}
+
Notification.Type.PARTY_INVITATION.type -> {
navController.navigate(R.id.partyFragment)
}
}
}
- fun accept(notificationId: String) {
+ fun accept(notificationId : String) {
val notification = findNotification(notificationId) ?: return
when (notification.type) {
Notification.Type.GUILD_INVITATION.type -> {
val data = notification.data as? GuildInvitationData
acceptGroupInvitation(data?.invitation?.id)
}
+
Notification.Type.PARTY_INVITATION.type -> {
val data = notification.data as? PartyInvitationData
acceptGroupInvitation(data?.invitation?.id)
}
+
Notification.Type.QUEST_INVITATION.type -> acceptQuestInvitation()
Notification.Type.GROUP_TASK_REQUIRES_APPROVAL.type -> acceptTaskApproval(notification)
}
@@ -339,17 +346,19 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- fun reject(notificationId: String) {
+ fun reject(notificationId : String) {
val notification = findNotification(notificationId) ?: return
when (notification.type) {
Notification.Type.GUILD_INVITATION.type -> {
val data = notification.data as? GuildInvitationData
rejectGroupInvite(data?.invitation?.id)
}
+
Notification.Type.PARTY_INVITATION.type -> {
val data = notification.data as? PartyInvitationData
rejectGroupInvite(data?.invitation?.id)
}
+
Notification.Type.QUEST_INVITATION.type -> rejectQuestInvitation()
Notification.Type.GROUP_TASK_REQUIRES_APPROVAL.type -> rejectTaskApproval(notification)
}
@@ -358,7 +367,7 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- private fun acceptGroupInvitation(groupId: String?) {
+ private fun acceptGroupInvitation(groupId : String?) {
groupId?.let {
viewModelScope.launch(ExceptionHandler.coroutine()) {
socialRepository.joinGroup(it)
@@ -367,7 +376,7 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- fun rejectGroupInvite(groupId: String?) {
+ fun rejectGroupInvite(groupId : String?) {
groupId?.let {
viewModelScope.launchCatching {
socialRepository.rejectGroupInvite(it)
@@ -400,11 +409,11 @@ open class NotificationsViewModel : BaseViewModel() {
}
}
- private fun acceptTaskApproval(notification: Notification) {
+ private fun acceptTaskApproval(notification : Notification) {
notification.data as? GroupTaskRequiresApprovalData
}
- private fun rejectTaskApproval(notification: Notification) {
+ private fun rejectTaskApproval(notification : Notification) {
notification.data as? GroupTaskRequiresApprovalData
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt
index f2d97de66..be876dd2a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/PartyViewModel.kt
@@ -2,27 +2,40 @@ package com.habitrpg.android.habitica.ui.viewmodels
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
-import com.habitrpg.android.habitica.components.UserComponent
+import com.habitrpg.android.habitica.data.ChallengeRepository
+import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.android.habitica.data.UserRepository
+import com.habitrpg.android.habitica.helpers.NotificationsManager
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
+import javax.inject.Inject
-class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeComponent) {
- constructor() : this(true)
+@HiltViewModel
+class PartyViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ challengeRepository : ChallengeRepository,
+ socialRepository : SocialRepository,
+ notificationsManager : NotificationsManager
+) : GroupViewModel(userRepository, userViewModel, challengeRepository, socialRepository, notificationsManager) {
- internal val isQuestActive: Boolean
+ internal val isQuestActive : Boolean
get() = getGroupData().value?.quest?.active == true
- internal val isUserOnQuest: Boolean
+ internal val isUserOnQuest : Boolean
get() = !(
getGroupData().value?.quest?.members?.none { it.key == user.value?.id }
?: true
)
+ @OptIn(ExperimentalCoroutinesApi::class)
private val membersFlow = groupIDFlow
.filterNotNull()
.flatMapLatest { socialRepository.getPartyMembers(it) }
@@ -32,10 +45,6 @@ class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeCo
groupViewType = GroupViewType.PARTY
}
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
fun getMembersData() = members
fun acceptQuest() {
@@ -58,7 +67,7 @@ class PartyViewModel(initializeComponent: Boolean) : GroupViewModel(initializeCo
}
}
- fun showParticipantButtons(): Boolean {
+ fun showParticipantButtons() : Boolean {
val user = user.value
return !(user?.party == null || user.party?.quest == null) && !isQuestActive && user.party?.quest?.RSVPNeeded == true
}
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 72f13221d..c23957839 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
@@ -1,16 +1,11 @@
package com.habitrpg.android.habitica.ui.viewmodels
-import android.app.Application
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
-import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
-import com.habitrpg.android.habitica.extensions.getTranslatedType
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.models.inventory.Animal
import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.Mount
@@ -21,19 +16,20 @@ import com.habitrpg.android.habitica.models.user.OwnedObject
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
-class StableViewModel(private val application: Application?, private val itemType: String?) : BaseViewModel() {
+@HiltViewModel
+class StableViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val inventoryRepository : InventoryRepository
+) : BaseViewModel(userRepository, userViewModel) {
- @Inject
- lateinit var inventoryRepository: InventoryRepository
-
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
+ private val itemType = ""
private val _items: MutableLiveData> = MutableLiveData()
val items: LiveData> = _items
@@ -119,14 +115,14 @@ class StableViewModel(private val application: Application?, private val itemTyp
if (items.size > 0 && items[items.size - 1].javaClass == StableSection::class.java) {
items.removeAt(items.size - 1)
}
- val title = if (itemType == "pets") {
+ /*val title = if (itemType == "pets") {
application?.getString(R.string.pet_category, animal.getTranslatedType(application))
} else {
application?.getString(R.string.mount_category, animal.getTranslatedType(application))
}
val section = StableSection(animal.type, title ?: "")
items.add(section)
- lastSection = section
+ lastSection = section*/
}
val isOwned = when (itemType) {
"pets" -> {
@@ -155,13 +151,3 @@ class StableViewModel(private val application: Application?, private val itemTyp
return items
}
}
-
-class StableViewModelFactory(
- private val application: Application?,
- private val itemType: String?
-) : ViewModelProvider.Factory {
-
- override fun create(modelClass: Class): T {
- return StableViewModel(application, itemType) as T
- }
-}
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 6c3378935..3d4be772f 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
@@ -1,16 +1,17 @@
package com.habitrpg.android.habitica.ui.viewmodels
import androidx.compose.runtime.mutableStateOf
-import com.habitrpg.android.habitica.components.UserComponent
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.shared.habitica.models.tasks.Attribute
import com.habitrpg.shared.habitica.models.tasks.HabitResetOption
import com.habitrpg.shared.habitica.models.tasks.TaskDifficulty
+import dagger.hilt.android.lifecycle.HiltViewModel
+import javax.inject.Inject
-class TaskFormViewModel : BaseViewModel() {
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
+@HiltViewModel
+class TaskFormViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel) : BaseViewModel(userRepository, userViewModel) {
val taskDifficulty = mutableStateOf(TaskDifficulty.EASY)
val selectedAttribute = mutableStateOf(Attribute.STRENGTH)
val habitResetOption = mutableStateOf(HabitResetOption.DAILY)
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 4b4e26a63..7597e4711 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
@@ -7,9 +7,9 @@ import androidx.core.content.edit
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.GroupPlanInfoProvider
@@ -20,6 +20,7 @@ import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.responses.TaskDirection
import com.habitrpg.shared.habitica.models.responses.TaskScoringResult
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Case
import io.realm.OrderedRealmCollection
import io.realm.RealmQuery
@@ -29,36 +30,28 @@ import kotlinx.coroutines.launch
import java.util.Date
import javax.inject.Inject
-class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
- @Inject
- lateinit var taskRepository: TaskRepository
-
- @Inject
- lateinit var tagRepository: TagRepository
-
- @Inject
- lateinit var appConfigManager: AppConfigManager
-
- @Inject
- lateinit var sharedPreferences: SharedPreferences
-
- private var owners: List> = listOf()
+@HiltViewModel
+class TasksViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val taskRepository : TaskRepository,
+ val tagRepository : TagRepository,
+ val appConfigManager : AppConfigManager,
+ val sharedPreferences : SharedPreferences
+) : BaseViewModel(userRepository, userViewModel), GroupPlanInfoProvider {
+ private var owners : List> = listOf()
var canSwitchOwners = MutableLiveData()
- val ownerID: MutableLiveData by lazy {
+ val ownerID : MutableLiveData by lazy {
MutableLiveData()
}
var teamPlans = mapOf()
- var initialPreferenceFilterSet: Boolean = false
+ var initialPreferenceFilterSet : Boolean = false
- val isPersonalBoard: Boolean
+ val isPersonalBoard : Boolean
get() {
return ownerID.value == userViewModel.userID
}
- val ownerTitle: CharSequence
+ val ownerTitle : CharSequence
get() {
return owners.firstOrNull { it.first == ownerID.value }?.second ?: ""
}
@@ -68,12 +61,13 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
userRepository.getTeamPlans()
.collect { plans ->
teamPlans = plans.associateBy { it.id }
- owners = listOf(Pair(userViewModel.userID, userViewModel.displayName)) + plans.map {
- Pair(
- it.id,
- it.summary
- )
- }
+ owners =
+ listOf(Pair(userViewModel.userID, userViewModel.displayName)) + plans.map {
+ Pair(
+ it.id,
+ it.summary
+ )
+ }
if (owners.size > 1 && canSwitchOwners.value != false) {
canSwitchOwners.value = owners.size > 1
}
@@ -81,7 +75,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- internal fun refreshData(onComplete: () -> Unit) {
+ internal fun refreshData(onComplete : () -> Unit) {
viewModelScope.launch(ExceptionHandler.coroutine()) {
if (isPersonalBoard) {
userRepository.retrieveUser(
@@ -109,9 +103,9 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
fun scoreTask(
- task: Task,
- direction: TaskDirection,
- onResult: (TaskScoringResult, Int) -> Unit
+ task : Task,
+ direction : TaskDirection,
+ onResult : (TaskScoringResult, Int) -> Unit
) {
viewModelScope.launch(ExceptionHandler.coroutine()) {
taskRepository.taskChecked(
@@ -135,18 +129,18 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- private val filterSets: HashMap>>> =
+ private val filterSets : HashMap>>> =
hashMapOf(
Pair(TaskType.HABIT, MutableLiveData()),
Pair(TaskType.DAILY, MutableLiveData()),
Pair(TaskType.TODO, MutableLiveData())
)
- fun getFilterSet(type: TaskType): MutableLiveData>>? {
+ fun getFilterSet(type : TaskType) : MutableLiveData>>? {
return filterSets[type]
}
- var searchQuery: String? = null
+ var searchQuery : String? = null
set(value) {
field = value
filterSets.forEach {
@@ -156,7 +150,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
private val activeFilters = HashMap()
- var tags: MutableList = mutableListOf()
+ var tags : MutableList = mutableListOf()
set(value) {
field = value
filterSets.forEach {
@@ -165,7 +159,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun addActiveTag(tagID: String) {
+ fun addActiveTag(tagID : String) {
if (!tags.contains(tagID)) {
tags.add(tagID)
}
@@ -175,7 +169,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun removeActiveTag(tagID: String) {
+ fun removeActiveTag(tagID : String) {
if (tags.contains(tagID)) {
tags.remove(tagID)
}
@@ -185,15 +179,15 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun filterCount(type: TaskType?): Int {
+ fun filterCount(type : TaskType?) : Int {
return this.tags.size + if (isTaskFilterActive(type)) 1 else 0
}
- fun isFiltering(type: TaskType?): Boolean {
+ fun isFiltering(type : TaskType?) : Boolean {
return filterCount(type) > 0
}
- private fun isTaskFilterActive(type: TaskType?): Boolean {
+ private fun isTaskFilterActive(type : TaskType?) : Boolean {
if (activeFilters[type] == null) {
return false
}
@@ -204,12 +198,12 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun filter(tasks: List): List {
+ fun filter(tasks : List) : List {
if (tasks.isEmpty()) {
return tasks
}
val filtered = ArrayList()
- var activeFilter: String? = null
+ var activeFilter : String? = null
if (activeFilters.size > 0) {
activeFilter = activeFilters[tasks[0].type]
}
@@ -222,7 +216,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
return filtered
}
- private fun isFiltered(task: Task, activeFilter: String?): Boolean {
+ private fun isFiltered(task : Task, activeFilter : String?) : Boolean {
if (!task.containsAllTagIds(tags)) {
return false
}
@@ -233,6 +227,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
} else {
!task.completed
}
+
Task.FILTER_GRAY -> task.completed || !task.isDisplayedActive
Task.FILTER_WEAK -> task.value < 1
Task.FILTER_STRONG -> task.value >= 1
@@ -245,7 +240,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun setActiveFilter(type: TaskType, activeFilter: String) {
+ fun setActiveFilter(type : TaskType, activeFilter : String) {
activeFilters[type] = activeFilter
filterSets[type]?.value = Triple(searchQuery, activeFilter, tags)
@@ -256,7 +251,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun getActiveFilter(type: TaskType?): String? {
+ fun getActiveFilter(type : TaskType?) : String? {
return if (activeFilters.containsKey(type)) {
activeFilters[type]
} else {
@@ -264,7 +259,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
}
}
- fun createQuery(unfilteredData: OrderedRealmCollection): RealmQuery? {
+ fun createQuery(unfilteredData : OrderedRealmCollection) : RealmQuery? {
if (!unfilteredData.isValid) {
return null
}
@@ -292,14 +287,17 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
} else {
query.equalTo("completed", 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_COMPLETED -> query = query.equalTo("completed", true)
}
}
@@ -310,14 +308,14 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
return query
}
- override fun canScoreTask(task: Task): Boolean {
+ override fun canScoreTask(task : Task) : Boolean {
if (!task.isGroupTask) {
return true
}
return task.isAssignedToUser(userViewModel.userID) || task.group?.assignedUsers?.isEmpty() != false
}
- override suspend fun canEditTask(task: Task): Boolean {
+ override suspend fun canEditTask(task : Task) : Boolean {
if (!task.isGroupTask) {
return true
}
@@ -326,7 +324,7 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
return group?.hasTaskEditPrivileges(userViewModel.userID) ?: false
}
- override suspend fun canAddTasks(): Boolean {
+ override suspend fun canAddTasks() : Boolean {
if (isPersonalBoard) {
return true
}
@@ -335,18 +333,27 @@ class TasksViewModel : BaseViewModel(), GroupPlanInfoProvider {
return group?.hasTaskEditPrivileges(userViewModel.userID) ?: false
}
- override fun assignedTextForTask(resources: Resources, assignedUsers: List): String {
+ override fun assignedTextForTask(resources : Resources, assignedUsers : List) : String {
return if (assignedUsers.contains(userViewModel.userID)) {
if (assignedUsers.size == 1) {
resources.getString(R.string.you)
} else {
- resources.getQuantityString(R.plurals.you_x_others, assignedUsers.size - 1, assignedUsers.size - 1)
+ resources.getQuantityString(
+ R.plurals.you_x_others,
+ assignedUsers.size - 1,
+ assignedUsers.size - 1
+ )
}
} else {
if (assignedUsers.size == 1) {
- userViewModel.currentTeamPlanMembers.value?.firstOrNull { it.id == assignedUsers.first() }?.displayName ?: ""
+ userViewModel.currentTeamPlanMembers.value?.firstOrNull { it.id == assignedUsers.first() }?.displayName
+ ?: ""
} else {
- resources.getQuantityString(R.plurals.people, assignedUsers.size, assignedUsers.size)
+ resources.getQuantityString(
+ R.plurals.people,
+ assignedUsers.size,
+ assignedUsers.size
+ )
}
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt
index 70fcdbd2e..a83ba7f8b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/inventory/equipment/EquipmentOverviewViewModel.kt
@@ -1,27 +1,27 @@
package com.habitrpg.android.habitica.ui.viewmodels.inventory.equipment
import androidx.lifecycle.viewModelScope
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
+import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.helpers.launchCatching
+import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
-class EquipmentOverviewViewModel : BaseViewModel() {
- val usesAutoEquip: Boolean
+@HiltViewModel
+class EquipmentOverviewViewModel @Inject constructor(
+ userRepository : UserRepository,
+ userViewModel : MainUserViewModel,
+ val inventoryRepository : InventoryRepository
+) : BaseViewModel(userRepository, userViewModel) {
+ val usesAutoEquip : Boolean
get() = user.value?.preferences?.autoEquip == true
- val usesCostume: Boolean
+ val usesCostume : Boolean
get() = user.value?.preferences?.costume == true
- @Inject
- lateinit var inventoryRepository: InventoryRepository
-
- override fun inject(component: UserComponent) {
- component.inject(this)
- }
-
- fun getGear(key: String, onSuccess: (Equipment) -> Unit) {
+ fun getGear(key : String, onSuccess : (Equipment) -> Unit) {
viewModelScope.launchCatching {
inventoryRepository.getEquipment(key).collect {
onSuccess(it)
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 feb08e96d..751007b1b 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
@@ -251,14 +251,14 @@ fun AppHeaderView(
}
CurrencyText(
"gold",
- user?.stats?.gp ?: 0.0,
+ user.stats?.gp ?: 0.0,
modifier = Modifier.padding(end = 12.dp),
decimals = 0,
minForAbbreviation = 10000
)
CurrencyText(
"gems",
- user?.gemCount?.toDouble() ?: 0.0,
+ user.gemCount?.toDouble() ?: 0.0,
modifier = Modifier.clickable {
MainNavigationController.navigate(R.id.gemPurchaseActivity)
},
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 06a3dd1ec..a629737ed 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
@@ -247,7 +247,7 @@ open class HabiticaAlertDialog(context: Context) : AlertDialog(context, R.style.
super.dismiss()
}
- fun getActivity(): Activity? {
+ open fun getActivity(): Activity? {
var thisContext = context
while (thisContext as? ContextThemeWrapper != null && thisContext as? Activity == null) {
thisContext = thisContext.baseContext
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaBottomSheetDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaBottomSheetDialog.kt
index c97252f11..06d164dcd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaBottomSheetDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaBottomSheetDialog.kt
@@ -24,8 +24,8 @@ open class HabiticaBottomSheetDialog(context: Context) : BottomSheetDialog(conte
super.setContentView(wrapperBinding.root)
}
- override fun setContentView(layoutResId: Int) {
- layoutInflater.inflate(layoutResId, wrapperBinding.container)
+ override fun setContentView(layoutResID: Int) {
+ layoutInflater.inflate(layoutResID, wrapperBinding.container)
super.setContentView(wrapperBinding.root)
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt
index ae426f475..cf44b9864 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/PetSuggestHatchDialog.kt
@@ -7,7 +7,6 @@ import android.view.View
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.lifecycle.lifecycleScope
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.DialogHatchPetButtonBinding
import com.habitrpg.android.habitica.databinding.DialogPetSuggestHatchBinding
@@ -36,7 +35,6 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
inflater?.let { binding = DialogPetSuggestHatchBinding.inflate(it) }
setAdditionalContentView(binding.root)
- HabiticaBaseApplication.userComponent?.inject(this)
binding.shimmerView.startShimmer()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt
index f5a2fcaa9..7dd58935b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt
@@ -8,7 +8,6 @@ import android.widget.TextView
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import com.google.firebase.analytics.FirebaseAnalytics
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.AppConfigManager
@@ -40,7 +39,6 @@ class InsufficientGemsDialog(context: Context, var gemPrice: Int) : Insufficient
}
override fun onCreate(savedInstanceState: Bundle?) {
- HabiticaBaseApplication.userComponent?.inject(this)
super.onCreate(savedInstanceState)
textView.setText(R.string.insufficientGems)
addButton(R.string.see_other_options, true) { _, _ -> MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false))) }
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
index b70a486e1..ac613f40e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
@@ -14,13 +14,11 @@ import androidx.lifecycle.lifecycleScope
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.extensions.getShortRemainingString
-import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.HapticFeedbackManager
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.shops.Shop
@@ -49,18 +47,10 @@ import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import java.lang.Integer.max
import java.util.Date
-import javax.inject.Inject
import kotlin.time.DurationUnit
import kotlin.time.toDuration
-class PurchaseDialog(context: Context, component: UserComponent?, val item: ShopItem) : HabiticaAlertDialog(context) {
-
- @Inject
- lateinit var userRepository: UserRepository
- @Inject
- lateinit var inventoryRepository: InventoryRepository
- @Inject
- lateinit var configManager: AppConfigManager
+class PurchaseDialog(context: Context, private val userRepository : UserRepository, private val inventoryRepository : InventoryRepository, val item: ShopItem) : HabiticaAlertDialog(context) {
private val customHeader: View by lazy {
LayoutInflater.from(context).inflate(R.layout.dialog_purchase_shopitem_header, null)
@@ -238,8 +228,6 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
}
init {
- component?.inject(this)
-
forceScrollableLayout = true
setCustomHeaderView(customHeader)
@@ -375,7 +363,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
} else if (shopItem.purchaseType == "debuffPotion") {
observable = { userRepository.useSkill(shopItem.key, null) }
} else if (shopItem.purchaseType == "customization" || shopItem.purchaseType == "background" || shopItem.purchaseType == "backgrounds" || shopItem.purchaseType == "customizationSet") {
- observable = { userRepository.unlockPath(item.unlockPath ?: "${item.pinType}.${item.key}" ?: "", item.value) }
+ observable = { userRepository.unlockPath(item.unlockPath ?: "${item.pinType}.${item.key}", item.value) }
} else if (shopItem.purchaseType == "debuffPotion") {
observable = { userRepository.useSkill(shopItem.key, null) }
} else if (shopItem.purchaseType == "card") {
@@ -385,7 +373,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
} else if ("gold" == shopItem.currency && "gem" != shopItem.key) {
observable = {
val buyResponse = inventoryRepository.buyItem(user, shopItem.key, shopItem.value.toDouble(), quantity)
- if (shopItem.key == "armoire" && configManager.enableNewArmoire() && buyResponse != null) {
+ if (shopItem.key == "armoire" && buyResponse != null) {
MainNavigationController.navigate(
R.id.armoireActivity,
ArmoireActivityDirections.openArmoireActivity(
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 eb0e1101e..3a364758f 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
@@ -6,19 +6,15 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
-import com.habitrpg.android.habitica.HabiticaBaseApplication
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.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 {
@@ -34,12 +30,6 @@ class ChatBarView : LinearLayout {
}
var onCommunityGuidelinesAccepted: (() -> Unit)? = null
- @Inject
- lateinit var socialRepository: SocialRepository
-
- @Inject
- lateinit var appConfigManager: AppConfigManager
-
private val binding = ChatBarViewBinding.inflate(context.layoutInflater, this)
var chatMessages: List
@@ -67,20 +57,19 @@ class ChatBarView : LinearLayout {
set(value) = binding.chatEditText.setText(value, TextView.BufferType.EDITABLE)
constructor(context: Context) : super(context) {
- setupView(context)
+ setupView()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
- setupView(context)
+ setupView()
}
- private var autocompleteAdapter: AutocompleteAdapter? = null
+ var autocompleteAdapter: AutocompleteAdapter? = null
- private fun setupView(context: Context) {
+ private fun setupView() {
orientation = VERTICAL
this.setBackgroundResource(R.color.content_background)
- HabiticaBaseApplication.userComponent?.inject(this)
binding.chatEditText.addTextChangedListener(
OnChangeTextWatcher { _, _, _, _ ->
@@ -91,7 +80,6 @@ class ChatBarView : LinearLayout {
binding.sendButton.setOnClickListener { sendButtonPressed() }
- autocompleteAdapter = AutocompleteAdapter(context, socialRepository, autocompleteContext, groupID, appConfigManager.enableUsernameAutocomplete())
binding.chatEditText.setAdapter(autocompleteAdapter)
binding.chatEditText.threshold = 2
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
index cd850c7c5..cf13d08f6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
@@ -7,7 +7,6 @@ import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.android.habitica.databinding.DialogBulkAllocateBinding
import com.habitrpg.common.habitica.extensions.getThemeColor
@@ -17,12 +16,9 @@ import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.launch
-import javax.inject.Inject
-class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : AlertDialog(context) {
+class BulkAllocateStatsDialog(context: Context, private val userRepository: UserRepository) : AlertDialog(context) {
private val binding = DialogBulkAllocateBinding.inflate(context.layoutInflater)
- @Inject
- lateinit var userRepository: UserRepository
private val allocatedPoints: Int
get() {
@@ -45,8 +41,6 @@ class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : Ale
}
init {
- component?.inject(this)
-
setView(binding.root)
this.setButton(BUTTON_POSITIVE, context.getString(R.string.save)) { _, _ ->
saveChanges()
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 2de04d9dc..5b5f8219b 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
@@ -139,7 +139,7 @@ private fun IsAssignedIndicator(
painterResource(R.drawable.ic_close_white_24dp),
null,
colorFilter = ColorFilter.tint(color.value),
- modifier = Modifier
+ modifier = modifier
.rotate(rotation.value)
.size(24.dp)
.background(
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 f46216524..17ee90c7f 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
@@ -17,7 +17,6 @@ import androidx.core.widget.CompoundButtonCompat
import androidx.core.widget.TextViewCompat
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.databinding.DialogTaskFilterBinding
import com.habitrpg.android.habitica.databinding.EditTagItemBinding
@@ -30,15 +29,11 @@ import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.shared.habitica.models.tasks.TaskType
import java.util.UUID
-import javax.inject.Inject
-class TaskFilterDialog(context: Context, component: UserComponent?, private val showTags: Boolean) : HabiticaBottomSheetDialog(context), RadioGroup.OnCheckedChangeListener {
+class TaskFilterDialog(context: Context, private val repository: TagRepository, private val showTags: Boolean) : HabiticaBottomSheetDialog(context), RadioGroup.OnCheckedChangeListener {
lateinit var viewModel: TasksViewModel
private val binding = DialogTaskFilterBinding.inflate(layoutInflater)
- @Inject
- lateinit var repository: TagRepository
-
var taskType: TaskType = TaskType.HABIT
set(value) {
field = value
@@ -76,7 +71,6 @@ class TaskFilterDialog(context: Context, component: UserComponent?, private val
private var isEditing: Boolean = false
init {
- component?.inject(this)
addIcon = ContextCompat.getDrawable(context, R.drawable.ic_add_purple_300_36dp)
setTitle(R.string.filters)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt
index 9c33a7197..a3ceae9c4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AddTaskWidgetProvider.kt
@@ -7,7 +7,9 @@ import android.widget.RemoteViews
import androidx.preference.PreferenceManager
import com.habitrpg.android.habitica.R
import com.habitrpg.shared.habitica.models.tasks.TaskType
+import dagger.hilt.android.AndroidEntryPoint
+@AndroidEntryPoint
class AddTaskWidgetProvider : BaseWidgetProvider() {
override fun layoutResourceId(): Int {
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 0de52f780..666b6c00f 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
@@ -8,7 +8,6 @@ import android.content.Intent
import android.view.View
import android.view.ViewGroup
import android.widget.RemoteViews
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.withImmutableFlag
import com.habitrpg.android.habitica.models.user.User
@@ -19,10 +18,12 @@ import com.habitrpg.common.habitica.helpers.HealthFormatter
import com.habitrpg.common.habitica.helpers.NumberAbbreviator
import com.habitrpg.common.habitica.helpers.launchCatching
import com.habitrpg.common.habitica.views.AvatarView
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
+@AndroidEntryPoint
class AvatarStatsWidgetProvider : BaseWidgetProvider() {
private lateinit var avatarView: AvatarView
@@ -36,13 +37,6 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() {
return R.layout.widget_avatar_stats
}
- private fun setUp() {
- if (!hasInjected) {
- hasInjected = true
- HabiticaBaseApplication.userComponent?.inject(this)
- }
- }
-
override fun onEnabled(context: Context) {
super.onEnabled(context)
avatarView = AvatarView(
@@ -54,7 +48,6 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() {
val layoutParams = ViewGroup.LayoutParams(140.dpToPx(context), 147.dpToPx(context))
avatarView.layoutParams = layoutParams
- this.setUp()
MainScope().launchCatching {
userRepository.getUser().collect {
user = it
@@ -79,7 +72,6 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() {
val layoutParams = ViewGroup.LayoutParams(140.dpToPx(context), 147.dpToPx(context))
avatarView.layoutParams = layoutParams
}
- this.setUp()
this.appWidgetManager = appWidgetManager
this.context = context
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
index 8e51e6a63..635417c09 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
@@ -17,8 +17,6 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
@Inject
lateinit var userRepository: UserRepository
- var hasInjected = false
-
protected var context: Context? = null
/**
@@ -72,7 +70,7 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
protected fun showToastForTaskDirection(context: Context, data: TaskScoringResult?) {
if (data != null) {
- val pair = NotifyUserUseCase.getNotificationAndAddStatsToUserAsText(data.experienceDelta!!, data.healthDelta!!, data.goldDelta!!, data.manaDelta!!)
+ val pair = NotifyUserUseCase.getNotificationAndAddStatsToUserAsText(data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta)
val toast = Toast.makeText(context, pair.first, Toast.LENGTH_LONG)
toast.show()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt
index 182510e05..010342589 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesListFactory.kt
@@ -3,6 +3,16 @@ package com.habitrpg.android.habitica.widget
import android.content.Context
import android.content.Intent
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.shared.habitica.models.tasks.TaskType
-class DailiesListFactory(context: Context, intent: Intent) : TaskListFactory(context, intent, TaskType.DAILY, R.layout.widget_dailies_list_row, R.id.dailies_text)
+class DailiesListFactory(context : Context, intent : Intent, taskRepository : TaskRepository, userRepository : UserRepository) : TaskListFactory(
+ context,
+ intent,
+ TaskType.DAILY,
+ R.layout.widget_dailies_list_row,
+ R.id.dailies_text,
+ taskRepository,
+ userRepository
+)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt
index 54252fb79..b68e847be 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/DailiesWidgetService.kt
@@ -2,10 +2,20 @@ package com.habitrpg.android.habitica.widget
import android.content.Intent
import android.widget.RemoteViewsService
+import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
+import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
+@AndroidEntryPoint
class DailiesWidgetService : RemoteViewsService() {
+ @Inject
+ lateinit var taskRepository: TaskRepository
+ @Inject
+ lateinit var userRepository : UserRepository
+
override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
- return DailiesListFactory(this.applicationContext, intent)
+ return DailiesListFactory(this.applicationContext, intent, taskRepository, userRepository)
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.kt
index f03306d11..2b3c23e6d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/HabitButtonWidgetProvider.kt
@@ -5,27 +5,21 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.shared.habitica.models.responses.TaskDirection
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
class HabitButtonWidgetProvider : BaseWidgetProvider() {
@Inject
lateinit var taskRepository: TaskRepository
- private fun setUp() {
- if (!hasInjected) {
- hasInjected = true
- HabiticaBaseApplication.userComponent?.inject(this)
- }
- }
-
override fun layoutResourceId(): Int {
return R.layout.widget_habit_button
}
@@ -36,7 +30,6 @@ class HabitButtonWidgetProvider : BaseWidgetProvider() {
appWidgetIds: IntArray
) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
- setUp()
val thisWidget = ComponentName(
context,
HabitButtonWidgetProvider::class.java
@@ -62,7 +55,6 @@ class HabitButtonWidgetProvider : BaseWidgetProvider() {
}
override fun onReceive(context: Context, intent: Intent) {
- setUp()
if (intent.action == HABIT_ACTION) {
val mgr = AppWidgetManager.getInstance(context)
val appWidgetId = intent.getIntExtra(
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 85685333a..4efcd37ac 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
@@ -12,7 +12,6 @@ import android.text.SpannableStringBuilder
import android.view.View
import android.widget.RemoteViews
import androidx.core.content.ContextCompat
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.extensions.withImmutableFlag
@@ -20,16 +19,20 @@ import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.shared.habitica.models.responses.TaskDirection
+import dagger.hilt.android.AndroidEntryPoint
+import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.math.min
+@AndroidEntryPoint
class HabitButtonWidgetService : Service() {
@Inject
lateinit var sharedPreferences: SharedPreferences
@Inject
+ @ApplicationContext
lateinit var context: Context
@Inject
lateinit var taskRepository: TaskRepository
@@ -39,7 +42,6 @@ class HabitButtonWidgetService : Service() {
private var allWidgetIds: IntArray? = null
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
- HabiticaBaseApplication.userComponent?.inject(this)
this.appWidgetManager = AppWidgetManager.getInstance(this)
val thisWidget = ComponentName(this, HabitButtonWidgetProvider::class.java)
allWidgetIds = appWidgetManager?.getAppWidgetIds(thisWidget)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.kt
index 17d69218b..14587e332 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.kt
@@ -6,7 +6,6 @@ import android.content.Intent
import android.text.SpannableStringBuilder
import android.widget.RemoteViews
import android.widget.RemoteViewsService
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.data.UserRepository
@@ -19,22 +18,19 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
-import javax.inject.Inject
abstract class TaskListFactory internal constructor(
val context: Context,
intent: Intent,
private val taskType: TaskType,
private val listItemResId: Int,
- private val listItemTextResId: Int
+ private val listItemTextResId: Int,
+ val taskRepository: TaskRepository,
+ val userRepository: UserRepository
) : RemoteViewsService.RemoteViewsFactory {
private val job = SupervisorJob()
private val widgetId: Int = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0)
- @Inject
- lateinit var taskRepository: TaskRepository
- @Inject
- lateinit var userRepository: UserRepository
private var taskList: List = ArrayList()
private var reloadData: Boolean = false
@@ -43,9 +39,6 @@ abstract class TaskListFactory internal constructor(
}
private fun loadData() {
- if (!this::taskRepository.isInitialized) {
- return
- }
CoroutineScope(Dispatchers.Main + job).launch(ExceptionHandler.coroutine()) {
val mirroredTasks = userRepository.getUser().firstOrNull()?.preferences?.tasks?.mirrorGroupTasks?.toTypedArray()
val tasks = taskRepository.getTasks(taskType, null, mirroredTasks ?: emptyArray()).firstOrNull()?.filter { task ->
@@ -58,7 +51,6 @@ abstract class TaskListFactory internal constructor(
}
override fun onCreate() {
- HabiticaBaseApplication.userComponent?.inject(this)
this.loadData()
}
override fun onDestroy() { /* no-op */ }
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt
index 459a2bd47..017eb694e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListWidgetProvider.kt
@@ -7,18 +7,19 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.widget.RemoteViews
-import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.extensions.withImmutableFlag
import com.habitrpg.android.habitica.extensions.withMutableFlag
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import javax.inject.Inject
+@AndroidEntryPoint
abstract class TaskListWidgetProvider : BaseWidgetProvider() {
@Inject
@@ -30,15 +31,7 @@ abstract class TaskListWidgetProvider : BaseWidgetProvider() {
protected abstract val titleResId: Int
- private fun setUp() {
- if (!hasInjected) {
- hasInjected = true
- HabiticaBaseApplication.userComponent?.inject(this)
- }
- }
-
override fun onReceive(context: Context, intent: Intent) {
- setUp()
if (intent.action == DAILY_ACTION) {
val appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
@@ -64,7 +57,6 @@ abstract class TaskListWidgetProvider : BaseWidgetProvider() {
appWidgetIds: IntArray
) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
- setUp()
val thisWidget = ComponentName(context, providerClass)
val allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt
index 9fce9c75f..4570672f9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodoListFactory.kt
@@ -3,6 +3,13 @@ package com.habitrpg.android.habitica.widget
import android.content.Context
import android.content.Intent
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
import com.habitrpg.shared.habitica.models.tasks.TaskType
-class TodoListFactory(context: Context, intent: Intent) : TaskListFactory(context, intent, TaskType.TODO, R.layout.widget_todo_list_row, R.id.todo_text)
+class TodoListFactory(
+ context : Context,
+ intent : Intent,
+ taskRepository : TaskRepository,
+ userRepository : UserRepository
+) : TaskListFactory(context, intent, TaskType.TODO, R.layout.widget_todo_list_row, R.id.todo_text, taskRepository, userRepository)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt
index 56c427fdc..442c31e76 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TodosWidgetService.kt
@@ -2,10 +2,18 @@ package com.habitrpg.android.habitica.widget
import android.content.Intent
import android.widget.RemoteViewsService
+import com.habitrpg.android.habitica.data.TaskRepository
+import com.habitrpg.android.habitica.data.UserRepository
+import javax.inject.Inject
class TodosWidgetService : RemoteViewsService() {
+ @Inject
+ lateinit var taskRepository: TaskRepository
+ @Inject
+ lateinit var userRepository : UserRepository
+
override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
- return TodoListFactory(this.applicationContext, intent)
+ return TodoListFactory(this.applicationContext, intent, taskRepository, userRepository)
}
}
diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/AppTestingLevel.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/AppTestingLevel.kt
index b2049338a..720fefa12 100644
--- a/common/src/main/java/com/habitrpg/common/habitica/helpers/AppTestingLevel.kt
+++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/AppTestingLevel.kt
@@ -1,9 +1,9 @@
package com.habitrpg.common.habitica.helpers
-enum class AppTestingLevel(identifier: String) {
- STAFF("staff"),
- PARTNERS("partners"),
- ALPHA("alpha"),
- BETA("beta"),
- PRODUCTION("production")
+enum class AppTestingLevel {
+ STAFF,
+ PARTNERS,
+ ALPHA,
+ BETA,
+ PRODUCTION
}