mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-26 16:22:39 +00:00
migrate to hilt
This commit is contained in:
parent
38e9909651
commit
ec44f0ac31
164 changed files with 922 additions and 1623 deletions
|
|
@ -2,6 +2,7 @@ plugins {
|
||||||
id 'com.android.application'
|
id 'com.android.application'
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
id 'kotlin-kapt'
|
id 'kotlin-kapt'
|
||||||
|
id 'dagger.hilt.android.plugin'
|
||||||
|
|
||||||
id 'com.google.gms.google-services'
|
id 'com.google.gms.google-services'
|
||||||
id 'com.google.firebase.crashlytics'
|
id 'com.google.firebase.crashlytics'
|
||||||
|
|
@ -34,8 +35,8 @@ dependencies {
|
||||||
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
|
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
|
||||||
|
|
||||||
//Dependency Injection
|
//Dependency Injection
|
||||||
implementation "com.google.dagger:dagger:$daggerhilt_version"
|
implementation "com.google.dagger:hilt-android:$daggerhilt_version"
|
||||||
kapt "com.google.dagger:dagger-compiler:$daggerhilt_version"
|
kapt "com.google.dagger:hilt-compiler:$daggerhilt_version"
|
||||||
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
||||||
//App Compatibility and Material Design
|
//App Compatibility and Material Design
|
||||||
implementation "androidx.appcompat:appcompat:$appcompat_version"
|
implementation "androidx.appcompat:appcompat:$appcompat_version"
|
||||||
|
|
|
||||||
|
|
@ -1168,6 +1168,7 @@
|
||||||
<string name="apple" translatable="false">Apple</string>
|
<string name="apple" translatable="false">Apple</string>
|
||||||
<string name="not_connected">Not connected</string>
|
<string name="not_connected">Not connected</string>
|
||||||
<string name="add_password">Add password</string>
|
<string name="add_password">Add password</string>
|
||||||
|
<string name="not_set" tools:override="true">Not Set</string>
|
||||||
<string name="connect">Connect</string>
|
<string name="connect">Connect</string>
|
||||||
<string name="disconnect">Disconnect</string>
|
<string name="disconnect">Disconnect</string>
|
||||||
<string name="add">Add</string>
|
<string name="add">Add</string>
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,4 @@ import com.habitrpg.android.habitica.components.DaggerAppComponent;
|
||||||
import com.habitrpg.android.habitica.modules.AppModule;
|
import com.habitrpg.android.habitica.modules.AppModule;
|
||||||
|
|
||||||
public class HabiticaApplication extends HabiticaBaseApplication {
|
public class HabiticaApplication extends HabiticaBaseApplication {
|
||||||
|
|
||||||
@Override
|
|
||||||
protected AppComponent initDagger() {
|
|
||||||
return DaggerAppComponent.builder()
|
|
||||||
.appModule(new AppModule(this))
|
|
||||||
.developerModule(new DebugDeveloperModule())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,10 @@ import com.google.firebase.analytics.FirebaseAnalytics
|
||||||
import com.google.firebase.installations.FirebaseInstallations
|
import com.google.firebase.installations.FirebaseInstallations
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
|
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.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
import com.habitrpg.android.habitica.helpers.AdHandler
|
||||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||||
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
|
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.BaseActivity
|
||||||
import com.habitrpg.android.habitica.ui.activities.LoginActivity
|
import com.habitrpg.android.habitica.ui.activities.LoginActivity
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
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.LanguageHelper
|
||||||
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
// contains all HabiticaApplicationLogic except dagger componentInitialisation
|
@HiltAndroidApp
|
||||||
abstract class HabiticaBaseApplication : Application(), Application.ActivityLifecycleCallbacks {
|
abstract class HabiticaBaseApplication : Application(), Application.ActivityLifecycleCallbacks {
|
||||||
@Inject
|
@Inject
|
||||||
internal lateinit var lazyApiHelper: ApiClient
|
internal lateinit var lazyApiHelper: ApiClient
|
||||||
|
|
@ -71,7 +68,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
||||||
}
|
}
|
||||||
registerActivityLifecycleCallbacks(this)
|
registerActivityLifecycleCallbacks(this)
|
||||||
setupRealm()
|
setupRealm()
|
||||||
setupDagger()
|
|
||||||
setLocale()
|
setLocale()
|
||||||
setupRemoteConfig()
|
setupRemoteConfig()
|
||||||
setupNotifications()
|
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(
|
override fun openOrCreateDatabase(
|
||||||
name: String,
|
name: String,
|
||||||
mode: Int,
|
mode: Int,
|
||||||
|
|
@ -240,12 +228,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
var component: AppComponent? = null
|
|
||||||
private set
|
|
||||||
|
|
||||||
var userComponent: UserComponent? = null
|
|
||||||
|
|
||||||
fun getInstance(context: Context): HabiticaBaseApplication? {
|
fun getInstance(context: Context): HabiticaBaseApplication? {
|
||||||
return context.applicationContext as? HabiticaBaseApplication
|
return context.applicationContext as? HabiticaBaseApplication
|
||||||
}
|
}
|
||||||
|
|
@ -268,17 +250,12 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
||||||
putString("theme_mode", lightMode)
|
putString("theme_mode", lightMode)
|
||||||
putString("launch_screen", launchScreen)
|
putString("launch_screen", launchScreen)
|
||||||
}
|
}
|
||||||
reloadUserComponent()
|
|
||||||
getInstance(context)?.lazyApiHelper?.updateAuthenticationCredentials(null, null)
|
getInstance(context)?.lazyApiHelper?.updateAuthenticationCredentials(null, null)
|
||||||
Wearable.getCapabilityClient(context).removeLocalCapability("provide_auth")
|
Wearable.getCapabilityClient(context).removeLocalCapability("provide_auth")
|
||||||
startActivity(LoginActivity::class.java, context)
|
startActivity(LoginActivity::class.java, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun reloadUserComponent() {
|
|
||||||
userComponent = component?.plus(UserModule(), UserRepositoryModule())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun startActivity(activityClass: Class<*>, context: Context) {
|
private fun startActivity(activityClass: Class<*>, context: Context) {
|
||||||
val intent = Intent(context, activityClass)
|
val intent = Intent(context, activityClass)
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
@ -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?
|
||||||
|
}
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
@ -102,7 +102,6 @@ class ApiClientImpl(
|
||||||
private var hadError = false
|
private var hadError = false
|
||||||
|
|
||||||
init {
|
init {
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
analyticsManager.setUserIdentifier(this.hostConfig.userID)
|
analyticsManager.setUserIdentifier(this.hostConfig.userID)
|
||||||
buildRetrofit()
|
buildRetrofit()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,14 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class SoundManager {
|
class SoundManager @Inject constructor(var soundFileLoader: SoundFileLoader) {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var soundFileLoader: SoundFileLoader
|
|
||||||
var soundTheme: String = SoundThemeOff
|
var soundTheme: String = SoundThemeOff
|
||||||
|
|
||||||
private val loadedSoundFiles: MutableMap<String, SoundFile> = HashMap()
|
private val loadedSoundFiles: MutableMap<String, SoundFile> = HashMap()
|
||||||
|
|
||||||
init {
|
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun preloadAllFiles() {
|
fun preloadAllFiles() {
|
||||||
loadedSoundFiles.clear()
|
loadedSoundFiles.clear()
|
||||||
if (soundTheme == SoundThemeOff) {
|
if (soundTheme == SoundThemeOff) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
|
||||||
|
|
||||||
import javax.inject.Scope
|
|
||||||
|
|
||||||
@Scope
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
annotation class UserScope
|
|
||||||
|
|
@ -3,35 +3,21 @@ package com.habitrpg.android.habitica.helpers.notifications
|
||||||
import com.google.firebase.messaging.FirebaseMessaging
|
import com.google.firebase.messaging.FirebaseMessaging
|
||||||
import com.google.firebase.messaging.FirebaseMessagingService
|
import com.google.firebase.messaging.FirebaseMessagingService
|
||||||
import com.google.firebase.messaging.RemoteMessage
|
import com.google.firebase.messaging.RemoteMessage
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import com.habitrpg.android.habitica.components.UserComponent
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class HabiticaFirebaseMessagingService : FirebaseMessagingService() {
|
class HabiticaFirebaseMessagingService : FirebaseMessagingService() {
|
||||||
|
|
||||||
private val userComponent: UserComponent?
|
|
||||||
get() = HabiticaBaseApplication.userComponent
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
internal lateinit var pushNotificationManager: PushNotificationManager
|
internal lateinit var pushNotificationManager: PushNotificationManager
|
||||||
|
|
||||||
override fun onMessageReceived(remoteMessage: RemoteMessage) {
|
override fun onMessageReceived(remoteMessage: RemoteMessage) {
|
||||||
try {
|
|
||||||
userComponent?.inject(this)
|
|
||||||
} catch (_: java.lang.IllegalStateException) {
|
|
||||||
}
|
|
||||||
PushNotificationManager.displayNotification(remoteMessage, applicationContext)
|
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) {
|
override fun onNewToken(s: String) {
|
||||||
super.onNewToken(s)
|
super.onNewToken(s)
|
||||||
userComponent?.inject(this)
|
|
||||||
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
||||||
val refreshedToken = task.result
|
val refreshedToken = task.result
|
||||||
if (refreshedToken != null && this::pushNotificationManager.isInitialized) {
|
if (refreshedToken != null && this::pushNotificationManager.isInitialized) {
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,15 @@ import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
||||||
import com.habitrpg.common.habitica.helpers.KeyHelper
|
import com.habitrpg.common.habitica.helpers.KeyHelper
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
open class ApiModule {
|
open class ApiModule {
|
||||||
@Provides
|
@Provides
|
||||||
|
|
@ -25,7 +29,7 @@ open class ApiModule {
|
||||||
fun providesHostConfig(
|
fun providesHostConfig(
|
||||||
sharedPreferences: SharedPreferences,
|
sharedPreferences: SharedPreferences,
|
||||||
keyHelper: KeyHelper?,
|
keyHelper: KeyHelper?,
|
||||||
context: Context
|
@ApplicationContext context: Context
|
||||||
): HostConfig {
|
): HostConfig {
|
||||||
return HostConfig(sharedPreferences, keyHelper, context)
|
return HostConfig(sharedPreferences, keyHelper, context)
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +52,7 @@ open class ApiModule {
|
||||||
hostConfig: HostConfig,
|
hostConfig: HostConfig,
|
||||||
analyticsManager: AnalyticsManager,
|
analyticsManager: AnalyticsManager,
|
||||||
notificationsManager: NotificationsManager,
|
notificationsManager: NotificationsManager,
|
||||||
context: Context
|
@ApplicationContext context: Context
|
||||||
): ApiClient {
|
): ApiClient {
|
||||||
val apiClient = ApiClientImpl(
|
val apiClient = ApiClientImpl(
|
||||||
gsonConverter,
|
gsonConverter,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.habitrpg.android.habitica.modules
|
package com.habitrpg.android.habitica.modules
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.res.Resources
|
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.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.helpers.SoundFileLoader
|
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.android.habitica.helpers.notifications.PushNotificationManager
|
||||||
import com.habitrpg.common.habitica.helpers.KeyHelper
|
import com.habitrpg.common.habitica.helpers.KeyHelper
|
||||||
import com.habitrpg.common.habitica.helpers.KeyHelper.Companion.getInstance
|
import com.habitrpg.common.habitica.helpers.KeyHelper.Companion.getInstance
|
||||||
import com.habitrpg.shared.habitica.HLogger
|
import com.habitrpg.shared.habitica.HLogger
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.security.KeyStore
|
import java.security.KeyStore
|
||||||
import java.security.KeyStoreException
|
import java.security.KeyStoreException
|
||||||
|
|
@ -23,17 +24,12 @@ import java.security.NoSuchAlgorithmException
|
||||||
import java.security.cert.CertificateException
|
import java.security.cert.CertificateException
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
class AppModule(private val application: Application) {
|
class AppModule {
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun providesContext(): Context {
|
fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
|
||||||
return application
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideSharedPreferences(context: Context): SharedPreferences {
|
|
||||||
return PreferenceManager.getDefaultSharedPreferences(context)
|
return PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -57,7 +53,7 @@ class AppModule(private val application: Application) {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun provideKeyHelper(
|
fun provideKeyHelper(
|
||||||
context: Context,
|
@ApplicationContext context: Context,
|
||||||
sharedPreferences: SharedPreferences,
|
sharedPreferences: SharedPreferences,
|
||||||
keyStore: KeyStore?
|
keyStore: KeyStore?
|
||||||
): KeyHelper? {
|
): KeyHelper? {
|
||||||
|
|
@ -67,27 +63,21 @@ class AppModule(private val application: Application) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesResources(context: Context): Resources {
|
fun providesResources(@ApplicationContext context: Context): Resources {
|
||||||
return context.resources
|
return context.resources
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesSoundFileLoader(context: Context): SoundFileLoader {
|
fun providesSoundFileLoader(@ApplicationContext context: Context): SoundFileLoader {
|
||||||
return SoundFileLoader(context)
|
return SoundFileLoader(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun providesSoundManager(): SoundManager {
|
|
||||||
return SoundManager()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun pushNotificationManager(
|
fun pushNotificationManager(
|
||||||
apiClient: ApiClient,
|
apiClient: ApiClient,
|
||||||
sharedPreferences: SharedPreferences,
|
sharedPreferences: SharedPreferences,
|
||||||
context: Context
|
@ApplicationContext context: Context
|
||||||
): PushNotificationManager {
|
): PushNotificationManager {
|
||||||
return PushNotificationManager(apiClient, sharedPreferences, context)
|
return PushNotificationManager(apiClient, sharedPreferences, context)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,18 @@ import com.habitrpg.android.habitica.proxy.implementation.EmptyAnalyticsManager
|
||||||
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
// provide proxy class for libraries(to avoid 65k limit)
|
// provide proxy class for libraries(to avoid 65k limit)
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
open class DeveloperModule {
|
open class DeveloperModule {
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
open fun provideAnalyticsManager(context: Context): AnalyticsManager {
|
open fun provideAnalyticsManager(@ApplicationContext context: Context): AnalyticsManager {
|
||||||
return EmptyAnalyticsManager()
|
return EmptyAnalyticsManager()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,12 @@ import com.habitrpg.android.habitica.data.local.ContentLocalRepository
|
||||||
import com.habitrpg.android.habitica.data.local.implementation.RealmContentLocalRepository
|
import com.habitrpg.android.habitica.data.local.implementation.RealmContentLocalRepository
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
open class RepositoryModule {
|
open class RepositoryModule {
|
||||||
@Provides
|
@Provides
|
||||||
|
|
@ -26,7 +30,7 @@ open class RepositoryModule {
|
||||||
fun providesContentRepository(
|
fun providesContentRepository(
|
||||||
contentLocalRepository: ContentLocalRepository,
|
contentLocalRepository: ContentLocalRepository,
|
||||||
apiClient: ApiClient,
|
apiClient: ApiClient,
|
||||||
context: Context
|
@ApplicationContext context: Context
|
||||||
): ContentRepository {
|
): ContentRepository {
|
||||||
return ContentRepositoryImpl(
|
return ContentRepositoryImpl(
|
||||||
contentLocalRepository,
|
contentLocalRepository,
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,20 @@ import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
import com.habitrpg.android.habitica.data.TaskRepository
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
import com.habitrpg.android.habitica.data.UserRepository
|
||||||
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
||||||
import com.habitrpg.android.habitica.helpers.UserScope
|
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
class UserModule {
|
class UserModule {
|
||||||
@Provides
|
@Provides
|
||||||
@UserScope
|
|
||||||
fun providesTaskAlarmManager(
|
fun providesTaskAlarmManager(
|
||||||
context: Context,
|
@ApplicationContext context: Context,
|
||||||
taskRepository: TaskRepository,
|
taskRepository: TaskRepository,
|
||||||
@Named(NAMED_USER_ID) userId: String
|
@Named(NAMED_USER_ID) userId: String
|
||||||
): TaskAlarmManager {
|
): TaskAlarmManager {
|
||||||
|
|
@ -27,7 +29,6 @@ class UserModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Named(NAMED_USER_ID)
|
@Named(NAMED_USER_ID)
|
||||||
@UserScope
|
|
||||||
fun providesUserID(sharedPreferences: SharedPreferences): String {
|
fun providesUserID(sharedPreferences: SharedPreferences): String {
|
||||||
return if (BuildConfig.DEBUG && BuildConfig.TEST_USER_ID.isNotEmpty()) {
|
return if (BuildConfig.DEBUG && BuildConfig.TEST_USER_ID.isNotEmpty()) {
|
||||||
BuildConfig.TEST_USER_ID
|
BuildConfig.TEST_USER_ID
|
||||||
|
|
@ -37,7 +38,6 @@ class UserModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@UserScope
|
|
||||||
fun providesUserViewModel(
|
fun providesUserViewModel(
|
||||||
@Named(NAMED_USER_ID) userID: String,
|
@Named(NAMED_USER_ID) userID: String,
|
||||||
userRepository: UserRepository,
|
userRepository: UserRepository,
|
||||||
|
|
|
||||||
|
|
@ -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.data.local.implementation.RealmUserLocalRepository
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
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.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
@Module
|
@Module
|
||||||
class UserRepositoryModule {
|
class UserRepositoryModule {
|
||||||
@Provides
|
@Provides
|
||||||
fun providesSetupCustomizationRepository(context: Context?): SetupCustomizationRepository {
|
fun providesSetupCustomizationRepository(@ApplicationContext context: Context?): SetupCustomizationRepository {
|
||||||
return SetupCustomizationRepositoryImpl(context!!)
|
return SetupCustomizationRepositoryImpl(context!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +66,6 @@ class UserRepositoryModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@UserScope
|
|
||||||
fun providesTaskRepository(
|
fun providesTaskRepository(
|
||||||
localRepository: TaskLocalRepository,
|
localRepository: TaskLocalRepository,
|
||||||
apiClient: ApiClient,
|
apiClient: ApiClient,
|
||||||
|
|
@ -148,9 +150,7 @@ class UserRepositoryModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
fun providesInventoryLocalRepository(
|
fun providesInventoryLocalRepository(
|
||||||
realm: Realm?,
|
realm: Realm?): InventoryLocalRepository {
|
||||||
context: Context?
|
|
||||||
): InventoryLocalRepository {
|
|
||||||
return RealmInventoryLocalRepository(realm!!)
|
return RealmInventoryLocalRepository(realm!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -207,9 +207,8 @@ class UserRepositoryModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@UserScope
|
|
||||||
fun providesPurchaseHandler(
|
fun providesPurchaseHandler(
|
||||||
context: Context,
|
@ApplicationContext context: Context,
|
||||||
analyticsManager: AnalyticsManager,
|
analyticsManager: AnalyticsManager,
|
||||||
apiClient: ApiClient,
|
apiClient: ApiClient,
|
||||||
userViewModel: MainUserViewModel
|
userViewModel: MainUserViewModel
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,15 @@ import android.content.Intent
|
||||||
import com.google.android.gms.wearable.MessageEvent
|
import com.google.android.gms.wearable.MessageEvent
|
||||||
import com.google.android.gms.wearable.Wearable
|
import com.google.android.gms.wearable.Wearable
|
||||||
import com.google.android.gms.wearable.WearableListenerService
|
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.LoginActivity
|
||||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
|
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
|
||||||
import com.habitrpg.common.habitica.api.HostConfig
|
import com.habitrpg.common.habitica.api.HostConfig
|
||||||
import com.habitrpg.common.habitica.helpers.DeviceCommunication
|
import com.habitrpg.common.habitica.helpers.DeviceCommunication
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class DeviceCommunicationService : WearableListenerService() {
|
class DeviceCommunicationService : WearableListenerService() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var hostConfig: HostConfig
|
lateinit var hostConfig: HostConfig
|
||||||
|
|
@ -19,7 +20,6 @@ class DeviceCommunicationService : WearableListenerService() {
|
||||||
private val messageClient by lazy { Wearable.getMessageClient(this) }
|
private val messageClient by lazy { Wearable.getMessageClient(this) }
|
||||||
|
|
||||||
init {
|
init {
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMessageReceived(event: MessageEvent) {
|
override fun onMessageReceived(event: MessageEvent) {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import android.text.Spannable
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.core.app.RemoteInput
|
import androidx.core.app.RemoteInput
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.ApiClient
|
import com.habitrpg.android.habitica.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
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.android.habitica.models.user.User
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class LocalNotificationActionReceiver : BroadcastReceiver() {
|
class LocalNotificationActionReceiver : BroadcastReceiver() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userRepository: UserRepository
|
lateinit var userRepository: UserRepository
|
||||||
|
|
@ -46,7 +47,6 @@ class LocalNotificationActionReceiver : BroadcastReceiver() {
|
||||||
private var intent: Intent? = null
|
private var intent: Intent? = null
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
this.intent = intent
|
this.intent = intent
|
||||||
this.context = context
|
this.context = context
|
||||||
handleLocalNotificationAction(intent.action)
|
handleLocalNotificationAction(intent.action)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
import com.habitrpg.android.habitica.data.TaskRepository
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
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.android.habitica.ui.activities.MainActivity
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
@ -27,6 +27,7 @@ import java.util.Random
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
// https://gist.github.com/BrandonSmith/6679223
|
// https://gist.github.com/BrandonSmith/6679223
|
||||||
|
@AndroidEntryPoint
|
||||||
class NotificationPublisher : BroadcastReceiver() {
|
class NotificationPublisher : BroadcastReceiver() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -43,8 +44,7 @@ class NotificationPublisher : BroadcastReceiver() {
|
||||||
this.context = context
|
this.context = context
|
||||||
if (!wasInjected) {
|
if (!wasInjected) {
|
||||||
wasInjected = true
|
wasInjected = true
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
var wasInactive = false
|
var wasInactive = false
|
||||||
// Show special notification if user hasn't logged in for a week
|
// Show special notification if user hasn't logged in for a week
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,16 @@ import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.shared.habitica.HLogger
|
import com.habitrpg.shared.habitica.HLogger
|
||||||
import com.habitrpg.shared.habitica.LogLevel
|
import com.habitrpg.shared.habitica.LogLevel
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TaskAlarmBootReceiver : BroadcastReceiver() {
|
class TaskAlarmBootReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -24,7 +25,6 @@ class TaskAlarmBootReceiver : BroadcastReceiver() {
|
||||||
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
|
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
MainScope().launch(ExceptionHandler.coroutine()) {
|
MainScope().launch(ExceptionHandler.coroutine()) {
|
||||||
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
|
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import android.os.Build
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
import com.habitrpg.android.habitica.data.TaskRepository
|
||||||
import com.habitrpg.android.habitica.extensions.withImmutableFlag
|
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.HLogger
|
||||||
import com.habitrpg.shared.habitica.LogLevel
|
import com.habitrpg.shared.habitica.LogLevel
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TaskReceiver : BroadcastReceiver() {
|
class TaskReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -36,7 +37,6 @@ class TaskReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")
|
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
val extras = intent.extras
|
val extras = intent.extras
|
||||||
if (extras != null) {
|
if (extras != null) {
|
||||||
val taskId = extras.getString(TaskAlarmManager.TASK_ID_INTENT_KEY)
|
val taskId = extras.getString(TaskAlarmManager.TASK_ID_INTENT_KEY)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,9 @@ import androidx.preference.PreferenceManager
|
||||||
import com.habitrpg.android.habitica.databinding.WidgetConfigureAddTaskBinding
|
import com.habitrpg.android.habitica.databinding.WidgetConfigureAddTaskBinding
|
||||||
import com.habitrpg.android.habitica.widget.AddTaskWidgetProvider
|
import com.habitrpg.android.habitica.widget.AddTaskWidgetProvider
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AddTaskWidgetActivity : AppCompatActivity() {
|
class AddTaskWidgetActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private var widgetId: Int = 0
|
private var widgetId: Int = 0
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import android.widget.TextView
|
||||||
import androidx.core.app.NavUtils
|
import androidx.core.app.NavUtils
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.habitrpg.android.habitica.R
|
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.ActivityAdventureGuideBinding
|
||||||
import com.habitrpg.android.habitica.databinding.AdventureGuideItemBinding
|
import com.habitrpg.android.habitica.databinding.AdventureGuideItemBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
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.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.common.habitica.extensions.fromHtml
|
import com.habitrpg.common.habitica.extensions.fromHtml
|
||||||
import com.habitrpg.common.habitica.extensions.loadImage
|
import com.habitrpg.common.habitica.extensions.loadImage
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AdventureGuideActivity : BaseActivity() {
|
class AdventureGuideActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivityAdventureGuideBinding
|
private lateinit var binding: ActivityAdventureGuideBinding
|
||||||
|
|
||||||
|
|
@ -38,10 +39,6 @@ class AdventureGuideActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import android.widget.RelativeLayout
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityArmoireBinding
|
import com.habitrpg.android.habitica.databinding.ActivityArmoireBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.plattysoft.leonids.ParticleSystem
|
import com.plattysoft.leonids.ParticleSystem
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ArmoireActivity : BaseActivity() {
|
class ArmoireActivity : BaseActivity() {
|
||||||
|
|
||||||
private var equipmentKey: String? = null
|
private var equipmentKey: String? = null
|
||||||
|
|
@ -47,10 +48,6 @@ class ArmoireActivity : BaseActivity() {
|
||||||
|
|
||||||
override fun getLayoutResId(): Int = R.layout.activity_armoire
|
override fun getLayoutResId(): Int = R.layout.activity_armoire
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getContentView(layoutResId: Int?): View {
|
override fun getContentView(layoutResId: Int?): View {
|
||||||
binding = ActivityArmoireBinding.inflate(layoutInflater)
|
binding = ActivityArmoireBinding.inflate(layoutInflater)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,7 @@ import androidx.core.os.bundleOf
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.habitrpg.android.habitica.HabiticaApplication
|
import com.habitrpg.android.habitica.HabiticaApplication
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
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.data.UserRepository
|
||||||
import com.habitrpg.android.habitica.extensions.forceLocale
|
import com.habitrpg.android.habitica.extensions.forceLocale
|
||||||
import com.habitrpg.android.habitica.extensions.updateStatusBarColor
|
import com.habitrpg.android.habitica.extensions.updateStatusBarColor
|
||||||
|
|
@ -87,7 +85,6 @@ abstract class BaseActivity : AppCompatActivity() {
|
||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
habiticaApplication
|
habiticaApplication
|
||||||
injectActivity(HabiticaBaseApplication.userComponent)
|
|
||||||
getLayoutResId()?.let {
|
getLayoutResId()?.let {
|
||||||
setContentView(getContentView(it))
|
setContentView(getContentView(it))
|
||||||
}
|
}
|
||||||
|
|
@ -178,8 +175,6 @@ abstract class BaseActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun injectActivity(component: UserComponent?)
|
|
||||||
|
|
||||||
protected fun setupToolbar(toolbar: Toolbar?) {
|
protected fun setupToolbar(toolbar: Toolbar?) {
|
||||||
this.toolbar = toolbar
|
this.toolbar = toolbar
|
||||||
if (toolbar != null) {
|
if (toolbar != null) {
|
||||||
|
|
|
||||||
|
|
@ -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.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
|
||||||
import com.habitrpg.common.habitica.extensions.DataBindingUtils
|
import com.habitrpg.common.habitica.extensions.DataBindingUtils
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
@ -82,6 +83,7 @@ import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class BirthdayActivity : BaseActivity() {
|
class BirthdayActivity : BaseActivity() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userViewModel: MainUserViewModel
|
lateinit var userViewModel: MainUserViewModel
|
||||||
|
|
@ -189,10 +191,6 @@ class BirthdayActivity : BaseActivity() {
|
||||||
userRepository.retrieveUser(false, true)
|
userRepository.retrieveUser(false, true)
|
||||||
isPurchasing.value = false
|
isPurchasing.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.widget.AppCompatCheckedTextView
|
import androidx.appcompat.widget.AppCompatCheckedTextView
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.ChallengeRepository
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityCreateChallengeBinding
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
|
|
@ -46,6 +46,7 @@ import kotlinx.coroutines.launch
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ChallengeFormActivity : BaseActivity() {
|
class ChallengeFormActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityCreateChallengeBinding
|
private lateinit var binding: ActivityCreateChallengeBinding
|
||||||
|
|
@ -118,10 +119,6 @@ class ChallengeFormActivity : BaseActivity() {
|
||||||
return R.layout.activity_create_challenge
|
return R.layout.activity_create_challenge
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
val inflater = menuInflater
|
val inflater = menuInflater
|
||||||
inflater.inflate(R.menu.menu_create_challenge, menu)
|
inflater.inflate(R.menu.menu_create_challenge, menu)
|
||||||
|
|
@ -224,11 +221,11 @@ class ChallengeFormActivity : BaseActivity() {
|
||||||
val intent = intent
|
val intent = intent
|
||||||
val bundle = intent.extras
|
val bundle = intent.extras
|
||||||
|
|
||||||
ChallengeTasksRecyclerViewAdapter(
|
/*ChallengeTasksRecyclerViewAdapter(
|
||||||
TasksViewModel(), 0, this, "",
|
TasksViewModel(), 0, this, "",
|
||||||
openTaskDisabled = false,
|
openTaskDisabled = false,
|
||||||
taskActionsDisabled = true
|
taskActionsDisabled = true
|
||||||
).also { challengeTasks = it }
|
).also { challengeTasks = it }*/
|
||||||
challengeTasks.onTaskOpen = {
|
challengeTasks.onTaskOpen = {
|
||||||
if (it.isValid) {
|
if (it.isValid) {
|
||||||
openNewTaskActivity(it.type, it)
|
openNewTaskActivity(it.type, it)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.navArgs
|
import androidx.navigation.navArgs
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.ActivityClassSelectionBinding
|
||||||
import com.habitrpg.android.habitica.models.user.Gear
|
import com.habitrpg.android.habitica.models.user.Gear
|
||||||
import com.habitrpg.android.habitica.models.user.Items
|
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.HabiticaAlertDialog
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
|
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ClassSelectionActivity : BaseActivity() {
|
class ClassSelectionActivity : BaseActivity() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -152,10 +153,6 @@ class ClassSelectionActivity : BaseActivity() {
|
||||||
binding.warriorButton.setCompoundDrawablesWithIntrinsicBounds(warriorIcon, null, null, null)
|
binding.warriorButton.setCompoundDrawablesWithIntrinsicBounds(warriorIcon, null, null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun makeUser(preferences: Preferences, outfit: Outfit): User {
|
private fun makeUser(preferences: Preferences, outfit: Outfit): User {
|
||||||
val user = User()
|
val user = User()
|
||||||
user.preferences = preferences
|
user.preferences = preferences
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import android.view.View
|
||||||
import android.view.animation.AccelerateInterpolator
|
import android.view.animation.AccelerateInterpolator
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityDeathBinding
|
import com.habitrpg.android.habitica.databinding.ActivityDeathBinding
|
||||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
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.Animations
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.plattysoft.leonids.ParticleSystem
|
import com.plattysoft.leonids.ParticleSystem
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class DeathActivity : BaseActivity() {
|
class DeathActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivityDeathBinding
|
private lateinit var binding: ActivityDeathBinding
|
||||||
|
|
||||||
|
|
@ -36,10 +37,6 @@ class DeathActivity : BaseActivity() {
|
||||||
|
|
||||||
override fun getLayoutResId(): Int = R.layout.activity_armoire
|
override fun getLayoutResId(): Int = R.layout.activity_armoire
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getContentView(layoutResId: Int?): View {
|
override fun getContentView(layoutResId: Int?): View {
|
||||||
binding = ActivityDeathBinding.inflate(layoutInflater)
|
binding = ActivityDeathBinding.inflate(layoutInflater)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,16 @@ import android.view.View
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.ActivityFixcharacterBinding
|
||||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||||
import com.habitrpg.android.habitica.models.user.Stats
|
import com.habitrpg.android.habitica.models.user.Stats
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class FixCharacterValuesActivity : BaseActivity() {
|
class FixCharacterValuesActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityFixcharacterBinding
|
private lateinit var binding: ActivityFixcharacterBinding
|
||||||
|
|
@ -31,10 +32,6 @@ class FixCharacterValuesActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import androidx.core.view.MenuCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
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.launchCatching
|
||||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||||
import com.habitrpg.common.habitica.views.PixelArtView
|
import com.habitrpg.common.habitica.views.PixelArtView
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
|
|
@ -58,6 +58,7 @@ import javax.inject.Inject
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class FullProfileActivity : BaseActivity() {
|
class FullProfileActivity : BaseActivity() {
|
||||||
private var blocks: List<String> = listOf()
|
private var blocks: List<String> = listOf()
|
||||||
private var isModerator = false
|
private var isModerator = false
|
||||||
|
|
@ -717,10 +718,6 @@ class FullProfileActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun open(userId: String) {
|
fun open(userId: String) {
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,17 @@ import android.os.Bundle
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.habitrpg.android.habitica.R
|
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.GemsPurchaseFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment
|
import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GemPurchaseActivity : PurchaseActivity() {
|
class GemPurchaseActivity : PurchaseActivity() {
|
||||||
|
|
||||||
override fun getLayoutResId(): Int {
|
override fun getLayoutResId(): Int {
|
||||||
return R.layout.activity_gem_purchase
|
return R.layout.activity_gem_purchase
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import androidx.navigation.navArgs
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityGiftGemsBinding
|
import com.habitrpg.android.habitica.databinding.ActivityGiftGemsBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
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.fragments.purchases.GiftPurchaseGemsFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.CurrencyView
|
import com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GiftGemsActivity : PurchaseActivity() {
|
class GiftGemsActivity : PurchaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityGiftGemsBinding
|
private lateinit var binding: ActivityGiftGemsBinding
|
||||||
|
|
@ -54,10 +55,6 @@ class GiftGemsActivity : PurchaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.navArgs
|
import androidx.navigation.navArgs
|
||||||
import com.android.billingclient.api.ProductDetails
|
import com.android.billingclient.api.ProductDetails
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityGiftSubscriptionBinding
|
import com.habitrpg.android.habitica.databinding.ActivityGiftSubscriptionBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
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.helpers.PurchaseTypes
|
||||||
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
|
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GiftSubscriptionActivity : PurchaseActivity() {
|
class GiftSubscriptionActivity : PurchaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityGiftSubscriptionBinding
|
private lateinit var binding: ActivityGiftSubscriptionBinding
|
||||||
|
|
@ -42,10 +43,6 @@ class GiftSubscriptionActivity : PurchaseActivity() {
|
||||||
return R.layout.activity_gift_subscription
|
return R.layout.activity_gift_subscription
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getContentView(layoutResId: Int?): View {
|
override fun getContentView(layoutResId: Int?): View {
|
||||||
binding = ActivityGiftSubscriptionBinding.inflate(layoutInflater)
|
binding = ActivityGiftSubscriptionBinding.inflate(layoutInflater)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,13 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.ActivityGroupFormBinding
|
||||||
import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter
|
import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter
|
||||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||||
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GroupFormActivity : BaseActivity() {
|
class GroupFormActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityGroupFormBinding
|
private lateinit var binding: ActivityGroupFormBinding
|
||||||
|
|
@ -65,10 +66,6 @@ class GroupFormActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun fillForm() {
|
private fun fillForm() {
|
||||||
binding.groupNameEditText.setText(groupName)
|
binding.groupNameEditText.setText(groupName)
|
||||||
binding.groupDescriptionEditText.setText(groupDescription)
|
binding.groupDescriptionEditText.setText(groupDescription)
|
||||||
|
|
|
||||||
|
|
@ -10,19 +10,16 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityPartyInviteBinding
|
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.modules.AppModule
|
||||||
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment
|
import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragment
|
||||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
import kotlin.time.DurationUnit
|
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GroupInviteActivity : BaseActivity() {
|
class GroupInviteActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityPartyInviteBinding
|
private lateinit var binding: ActivityPartyInviteBinding
|
||||||
|
|
@ -53,10 +50,6 @@ class GroupInviteActivity : BaseActivity() {
|
||||||
setViewPagerAdapter()
|
setViewPagerAdapter()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.menu_party_invite, menu)
|
menuInflater.inflate(R.menu.menu_party_invite, menu)
|
||||||
return super.onCreateOptionsMenu(menu)
|
return super.onCreateOptionsMenu(menu)
|
||||||
|
|
@ -68,12 +61,6 @@ class GroupInviteActivity : BaseActivity() {
|
||||||
R.id.action_send_invites -> {
|
R.id.action_send_invites -> {
|
||||||
setResult(Activity.RESULT_OK, createResultIntent())
|
setResult(Activity.RESULT_OK, createResultIntent())
|
||||||
dismissKeyboard()
|
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
|
true
|
||||||
}
|
}
|
||||||
android.R.id.home -> {
|
android.R.id.home -> {
|
||||||
|
|
@ -87,13 +74,6 @@ class GroupInviteActivity : BaseActivity() {
|
||||||
private fun createResultIntent(): Intent {
|
private fun createResultIntent(): Intent {
|
||||||
val intent = Intent()
|
val intent = Intent()
|
||||||
if (fragments.size == 0) return 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
|
return intent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +83,6 @@ class GroupInviteActivity : BaseActivity() {
|
||||||
val statePagerAdapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
|
val statePagerAdapter = object : FragmentStateAdapter(fragmentManager, lifecycle) {
|
||||||
override fun createFragment(position: Int): Fragment {
|
override fun createFragment(position: Int): Fragment {
|
||||||
val fragment = PartyInviteFragment()
|
val fragment = PartyInviteFragment()
|
||||||
fragment.isEmailInvite = position == 1
|
|
||||||
fragments.add(fragment)
|
fragments.add(fragment)
|
||||||
return fragment
|
return fragment
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@ import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.habitrpg.android.habitica.R
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import okhttp3.Call
|
import okhttp3.Call
|
||||||
import okhttp3.Callback
|
import okhttp3.Callback
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
|
@ -16,13 +16,10 @@ import java.io.BufferedReader
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GuidelinesActivity : BaseActivity() {
|
class GuidelinesActivity : BaseActivity() {
|
||||||
override fun getLayoutResId(): Int = R.layout.activity_guidelines
|
override fun getLayoutResId(): Int = R.layout.activity_guidelines
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setupToolbar(findViewById(R.id.toolbar))
|
setupToolbar(findViewById(R.id.toolbar))
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import androidx.core.content.edit
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.habitrpg.android.habitica.R
|
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.data.TaskRepository
|
||||||
import com.habitrpg.android.habitica.databinding.WidgetConfigureHabitButtonBinding
|
import com.habitrpg.android.habitica.databinding.WidgetConfigureHabitButtonBinding
|
||||||
import com.habitrpg.android.habitica.modules.AppModule
|
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.android.habitica.widget.HabitButtonWidgetProvider
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
|
|
@ -25,6 +25,7 @@ import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class HabitButtonWidgetActivity : BaseActivity() {
|
class HabitButtonWidgetActivity : BaseActivity() {
|
||||||
private val job = SupervisorJob()
|
private val job = SupervisorJob()
|
||||||
|
|
||||||
|
|
@ -47,10 +48,6 @@ class HabitButtonWidgetActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,16 @@ import androidx.fragment.app.FragmentStatePagerAdapter
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.habitrpg.android.habitica.R
|
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.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
|
import com.habitrpg.android.habitica.databinding.ActivityIntroBinding
|
||||||
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
|
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.viewpagerindicator.IconPagerAdapter
|
import com.viewpagerindicator.IconPagerAdapter
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
|
class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
|
||||||
|
|
||||||
private lateinit var binding: ActivityIntroBinding
|
private lateinit var binding: ActivityIntroBinding
|
||||||
|
|
@ -54,10 +55,6 @@ class IntroActivity : BaseActivity(), View.OnClickListener, ViewPager.OnPageChan
|
||||||
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupIntro() {
|
private fun setupIntro() {
|
||||||
binding.viewPager.adapter = PagerAdapter(supportFragmentManager)
|
binding.viewPager.adapter = PagerAdapter(supportFragmentManager)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ import com.google.android.gms.wearable.MessageClient
|
||||||
import com.google.android.gms.wearable.Wearable
|
import com.google.android.gms.wearable.Wearable
|
||||||
import com.google.firebase.analytics.FirebaseAnalytics
|
import com.google.firebase.analytics.FirebaseAnalytics
|
||||||
import com.habitrpg.android.habitica.R
|
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.ApiClient
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityLoginBinding
|
import com.habitrpg.android.habitica.databinding.ActivityLoginBinding
|
||||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.habitrpg.common.habitica.models.auth.UserAuthResponse
|
import com.habitrpg.common.habitica.models.auth.UserAuthResponse
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class LoginActivity : BaseActivity() {
|
class LoginActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var viewModel: AuthenticationViewModel
|
|
||||||
private lateinit var binding: ActivityLoginBinding
|
private lateinit var binding: ActivityLoginBinding
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -61,6 +61,8 @@ class LoginActivity : BaseActivity() {
|
||||||
lateinit var sharedPrefs: SharedPreferences
|
lateinit var sharedPrefs: SharedPreferences
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var configManager: AppConfigManager
|
lateinit var configManager: AppConfigManager
|
||||||
|
@Inject
|
||||||
|
lateinit var viewModel : AuthenticationViewModel
|
||||||
|
|
||||||
private var isRegistering: Boolean = false
|
private var isRegistering: Boolean = false
|
||||||
private var isShowingForm: Boolean = false
|
private var isShowingForm: Boolean = false
|
||||||
|
|
@ -141,7 +143,6 @@ class LoginActivity : BaseActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
window.requestFeature(Window.FEATURE_ACTION_BAR)
|
window.requestFeature(Window.FEATURE_ACTION_BAR)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
viewModel = AuthenticationViewModel()
|
|
||||||
supportActionBar?.hide()
|
supportActionBar?.hide()
|
||||||
// Set default values to avoid null-responses when requesting unedited settings
|
// Set default values to avoid null-responses when requesting unedited settings
|
||||||
PreferenceManager.setDefaultValues(this, R.xml.preferences_fragment, false)
|
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() {
|
private fun resetLayout() {
|
||||||
if (this.isRegistering) {
|
if (this.isRegistering) {
|
||||||
if (binding.email.visibility == View.GONE) {
|
if (binding.email.visibility == View.GONE) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ import com.google.android.gms.wearable.Wearable
|
||||||
import com.google.firebase.perf.FirebasePerformance
|
import com.google.firebase.perf.FirebasePerformance
|
||||||
import com.habitrpg.android.habitica.BuildConfig
|
import com.habitrpg.android.habitica.BuildConfig
|
||||||
import com.habitrpg.android.habitica.R
|
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.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
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.common.habitica.views.AvatarView
|
||||||
import com.habitrpg.shared.habitica.models.responses.MaintenanceResponse
|
import com.habitrpg.shared.habitica.models.responses.MaintenanceResponse
|
||||||
import com.habitrpg.shared.habitica.models.responses.TaskScoringResult
|
import com.habitrpg.shared.habitica.models.responses.TaskScoringResult
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
|
|
@ -84,6 +84,7 @@ import kotlin.time.toDuration
|
||||||
|
|
||||||
var mainActivityCreatedAt: Date? = null
|
var mainActivityCreatedAt: Date? = null
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
open class MainActivity : BaseActivity(), SnackbarActivity {
|
open class MainActivity : BaseActivity(), SnackbarActivity {
|
||||||
private var launchScreen: String? = null
|
private var launchScreen: String? = null
|
||||||
|
|
||||||
|
|
@ -350,10 +351,6 @@ open class MainActivity : BaseActivity(), SnackbarActivity {
|
||||||
} else super.onOptionsItemSelected(item)
|
} else super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,14 @@ import androidx.core.net.toUri
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.api.MaintenanceApiService
|
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.data.ApiClient
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityMaintenanceBinding
|
import com.habitrpg.android.habitica.databinding.ActivityMaintenanceBinding
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MaintenanceActivity : BaseActivity() {
|
class MaintenanceActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityMaintenanceBinding
|
private lateinit var binding: ActivityMaintenanceBinding
|
||||||
|
|
@ -58,10 +59,6 @@ class MaintenanceActivity : BaseActivity() {
|
||||||
binding.playStoreButton.setOnClickListener { openInPlayStore() }
|
binding.playStoreButton.setOnClickListener { openInPlayStore() }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (!isDeprecationNotice) {
|
if (!isDeprecationNotice) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import androidx.activity.viewModels
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityNotificationsBinding
|
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.QuestInvitationData
|
||||||
import com.habitrpg.common.habitica.models.notifications.UnallocatedPointsData
|
import com.habitrpg.common.habitica.models.notifications.UnallocatedPointsData
|
||||||
import com.habitrpg.common.habitica.views.PixelArtView
|
import com.habitrpg.common.habitica.views.PixelArtView
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
|
class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
||||||
private lateinit var binding: ActivityNotificationsBinding
|
private lateinit var binding: ActivityNotificationsBinding
|
||||||
|
|
@ -79,10 +80,6 @@ class NotificationsActivity : BaseActivity(), androidx.swiperefreshlayout.widget
|
||||||
binding.notificationsRefreshLayout.setOnRefreshListener(this)
|
binding.notificationsRefreshLayout.setOnRefreshListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
if (supportFragmentManager.backStackEntryCount > 0) {
|
if (supportFragmentManager.backStackEntryCount > 0) {
|
||||||
onBackPressed()
|
onBackPressed()
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,14 @@ import android.view.ViewGroup
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import com.habitrpg.android.habitica.R
|
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.AccountPreferenceFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.preferences.EmailNotificationsPreferencesFragment
|
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.PreferencesFragment
|
||||||
import com.habitrpg.android.habitica.ui.fragments.preferences.PushNotificationsPreferencesFragment
|
import com.habitrpg.android.habitica.ui.fragments.preferences.PushNotificationsPreferencesFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback, SnackbarActivity {
|
class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback, SnackbarActivity {
|
||||||
|
|
||||||
override fun getLayoutResId(): Int = R.layout.activity_prefs
|
override fun getLayoutResId(): Int = R.layout.activity_prefs
|
||||||
|
|
@ -26,10 +27,6 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
|
||||||
.commit()
|
.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
if (supportFragmentManager.backStackEntryCount > 0) {
|
if (supportFragmentManager.backStackEntryCount > 0) {
|
||||||
onBackPressed()
|
onBackPressed()
|
||||||
|
|
|
||||||
|
|
@ -12,16 +12,17 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.navArgs
|
import androidx.navigation.navArgs
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivityReportMessageBinding
|
import com.habitrpg.android.habitica.databinding.ActivityReportMessageBinding
|
||||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ReportMessageActivity : BaseActivity() {
|
class ReportMessageActivity : BaseActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityReportMessageBinding
|
private lateinit var binding: ActivityReportMessageBinding
|
||||||
|
|
@ -39,10 +40,6 @@ class ReportMessageActivity : BaseActivity() {
|
||||||
return R.layout.activity_report_message
|
return R.layout.activity_report_message
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getContentView(layoutResId: Int?): View {
|
override fun getContentView(layoutResId: Int?): View {
|
||||||
binding = ActivityReportMessageBinding.inflate(layoutInflater)
|
binding = ActivityReportMessageBinding.inflate(layoutInflater)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.habitrpg.android.habitica.R
|
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.ApiClient
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.viewpagerindicator.IconPagerAdapter
|
import com.viewpagerindicator.IconPagerAdapter
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.FlowPreview
|
||||||
import kotlinx.coroutines.flow.debounce
|
import kotlinx.coroutines.flow.debounce
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
@ -39,6 +39,7 @@ import java.util.Locale
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.time.Duration.Companion.milliseconds
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
|
|
||||||
private lateinit var binding: ActivitySetupBinding
|
private lateinit var binding: ActivitySetupBinding
|
||||||
|
|
@ -108,10 +109,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
binding.nextButton.setOnClickListener { nextClicked() }
|
binding.nextButton.setOnClickListener { nextClicked() }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
userRepository.close()
|
userRepository.close()
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,20 @@ import android.view.View
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivitySkillMembersBinding
|
import com.habitrpg.android.habitica.databinding.ActivitySkillMembersBinding
|
||||||
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter
|
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.filterNotNull
|
import kotlinx.coroutines.flow.filterNotNull
|
||||||
import kotlinx.coroutines.flow.flatMapLatest
|
import kotlinx.coroutines.flow.flatMapLatest
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SkillMemberActivity : BaseActivity() {
|
class SkillMemberActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivitySkillMembersBinding
|
private lateinit var binding: ActivitySkillMembersBinding
|
||||||
private var viewAdapter: PartyMemberRecyclerViewAdapter? = null
|
private var viewAdapter: PartyMemberRecyclerViewAdapter? = null
|
||||||
|
|
@ -33,10 +34,6 @@ class SkillMemberActivity : BaseActivity() {
|
||||||
return R.layout.activity_skill_members
|
return R.layout.activity_skill_members
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getContentView(layoutResId: Int?): View {
|
override fun getContentView(layoutResId: Int?): View {
|
||||||
binding = ActivitySkillMembersBinding.inflate(layoutInflater)
|
binding = ActivitySkillMembersBinding.inflate(layoutInflater)
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,17 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
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.data.TaskRepository
|
||||||
import com.habitrpg.android.habitica.databinding.ActivitySkillTasksBinding
|
import com.habitrpg.android.habitica.databinding.ActivitySkillTasksBinding
|
||||||
import com.habitrpg.android.habitica.models.tasks.Task
|
import com.habitrpg.android.habitica.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.modules.AppModule
|
import com.habitrpg.android.habitica.modules.AppModule
|
||||||
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment
|
import com.habitrpg.android.habitica.ui.fragments.skills.SkillTasksRecyclerViewFragment
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SkillTasksActivity : BaseActivity() {
|
class SkillTasksActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivitySkillTasksBinding
|
private lateinit var binding: ActivitySkillTasksBinding
|
||||||
|
|
||||||
|
|
@ -45,10 +46,6 @@ class SkillTasksActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadTaskLists() {
|
private fun loadTaskLists() {
|
||||||
val statePagerAdapter = object : FragmentStateAdapter(supportFragmentManager, lifecycle) {
|
val statePagerAdapter = object : FragmentStateAdapter(supportFragmentManager, lifecycle) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.HabitResetOption
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskDifficulty
|
import com.habitrpg.shared.habitica.models.tasks.TaskDifficulty
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.realm.RealmList
|
import io.realm.RealmList
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
|
|
@ -77,6 +78,7 @@ import kotlinx.coroutines.launch
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TaskFormActivity : BaseActivity() {
|
class TaskFormActivity : BaseActivity() {
|
||||||
|
|
||||||
private val viewModel: TaskFormViewModel by viewModels()
|
private val viewModel: TaskFormViewModel by viewModels()
|
||||||
|
|
@ -172,10 +174,6 @@ class TaskFormActivity : BaseActivity() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
overrideModernHeader = false
|
overrideModernHeader = false
|
||||||
val bundle = intent.extras ?: return
|
val bundle = intent.extras ?: return
|
||||||
|
|
|
||||||
|
|
@ -38,68 +38,51 @@ import androidx.compose.ui.text.SpanStyle
|
||||||
import androidx.compose.ui.text.buildAnnotatedString
|
import androidx.compose.ui.text.buildAnnotatedString
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.withStyle
|
import androidx.compose.ui.text.withStyle
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import androidx.lifecycle.ViewModelProvider
|
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||||
import com.habitrpg.android.habitica.R
|
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.SocialRepository
|
||||||
import com.habitrpg.android.habitica.data.TaskRepository
|
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.MainNavigationController
|
||||||
import com.habitrpg.android.habitica.helpers.TaskDescriptionBuilder
|
import com.habitrpg.android.habitica.helpers.TaskDescriptionBuilder
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.BaseViewModel
|
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.CompletedAt
|
||||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||||
import com.habitrpg.android.habitica.ui.views.UserRow
|
import com.habitrpg.android.habitica.ui.views.UserRow
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class TaskSummaryViewModel(val taskId: String) : BaseViewModel() {
|
class TaskSummaryViewModel(
|
||||||
@Inject
|
userRepository : UserRepository,
|
||||||
lateinit var taskRespository: TaskRepository
|
userViewModel : MainUserViewModel,
|
||||||
|
val taskRepository : TaskRepository,
|
||||||
|
val socialRepository : SocialRepository
|
||||||
|
) : BaseViewModel(userRepository, userViewModel) {
|
||||||
|
val taskID : String = ""
|
||||||
|
|
||||||
@Inject
|
val task = taskRepository.getTask(taskID).asLiveData()
|
||||||
lateinit var socialRepository: SocialRepository
|
|
||||||
|
|
||||||
val task = taskRespository.getTask(taskId).asLiveData()
|
fun getMember(userID : String?) : Flow<Member?> {
|
||||||
|
|
||||||
override fun inject(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getMember(userID: String?): Flow<Member?> {
|
|
||||||
return socialRepository.getMember(userID)
|
return socialRepository.getMember(userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
class Factory(private val taskID: String) : ViewModelProvider.Factory {
|
|
||||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
|
||||||
return TaskSummaryViewModel(taskID) as T
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TaskSummaryActivity : BaseActivity() {
|
class TaskSummaryActivity : BaseActivity() {
|
||||||
override fun getLayoutResId(): Int? = null
|
override fun getLayoutResId() : Int? = null
|
||||||
|
|
||||||
private val viewModel: TaskSummaryViewModel by viewModels {
|
private val viewModel : TaskSummaryViewModel by viewModels()
|
||||||
TaskSummaryViewModel.Factory(
|
|
||||||
intent.extras?.getString(
|
|
||||||
TaskFormActivity.TASK_ID_KEY
|
|
||||||
) ?: ""
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState : Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContent {
|
setContent {
|
||||||
HabiticaTheme {
|
HabiticaTheme {
|
||||||
|
|
@ -107,14 +90,10 @@ class TaskSummaryActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectActivity(component: UserComponent?) {
|
|
||||||
component?.inject(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TaskSummaryView(viewModel: TaskSummaryViewModel) {
|
fun TaskSummaryView(viewModel : TaskSummaryViewModel) {
|
||||||
val taskDescriptionBuilder = TaskDescriptionBuilder(LocalContext.current)
|
val taskDescriptionBuilder = TaskDescriptionBuilder(LocalContext.current)
|
||||||
val task by viewModel.task.observeAsState()
|
val task by viewModel.task.observeAsState()
|
||||||
val titleModifier = Modifier.padding(top = 30.dp)
|
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 {
|
return buildAnnotatedString {
|
||||||
var isBold = false
|
var isBold = false
|
||||||
for (segment in split("**")) {
|
for (segment in split("**")) {
|
||||||
|
|
@ -338,9 +317,3 @@ private fun String.makeBoldComposable(): AnnotatedString {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Preview
|
|
||||||
@Composable
|
|
||||||
private fun TaskSummaryViewPreview() {
|
|
||||||
TaskSummaryView(TaskSummaryViewModel(""))
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.databinding.CustomizationGridItemBinding
|
import com.habitrpg.android.habitica.databinding.CustomizationGridItemBinding
|
||||||
import com.habitrpg.android.habitica.databinding.CustomizationSectionFooterBinding
|
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.inventory.CustomizationSet
|
||||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
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.dpToPx
|
||||||
import com.habitrpg.common.habitica.extensions.loadImage
|
import com.habitrpg.common.habitica.extensions.loadImage
|
||||||
import com.habitrpg.common.habitica.views.AvatarView
|
import com.habitrpg.common.habitica.views.AvatarView
|
||||||
|
|
@ -44,6 +42,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
|
||||||
private var pinnedItemKeys: List<String> = ArrayList()
|
private var pinnedItemKeys: List<String> = ArrayList()
|
||||||
|
|
||||||
var onCustomizationSelected: ((Customization) -> Unit)? = null
|
var onCustomizationSelected: ((Customization) -> Unit)? = null
|
||||||
|
var onShowPurchaseDialog: ((ShopItem) -> Unit)? = null
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder {
|
||||||
return when (viewType) {
|
return when (viewType) {
|
||||||
|
|
@ -212,9 +211,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
|
||||||
dialog.show()
|
dialog.show()
|
||||||
} else {
|
} else {
|
||||||
customization?.let {
|
customization?.let {
|
||||||
val dialog = PurchaseDialog(itemView.context, HabiticaBaseApplication.userComponent, ShopItem.fromCustomization(it, userSize, hairColor))
|
onShowPurchaseDialog?.invoke(ShopItem.fromCustomization(it, userSize, hairColor))
|
||||||
if (it.type == "background") dialog.isPinned = pinnedItemKeys.contains(ShopItem.fromCustomization(it, userSize, hairColor).key)
|
|
||||||
dialog.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
@ -293,8 +290,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
|
||||||
|
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
set?.let {
|
set?.let {
|
||||||
val dialog = PurchaseDialog(itemView.context, HabiticaBaseApplication.userComponent, ShopItem.fromCustomizationSet(it, additionalSetItems, userSize, hairColor))
|
onShowPurchaseDialog?.invoke(ShopItem.fromCustomizationSet(it, additionalSetItems, userSize, hairColor))
|
||||||
dialog.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import com.habitrpg.common.habitica.extensions.fromHtml
|
||||||
class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||||
|
|
||||||
var onNeedsRefresh: (() -> Unit)? = null
|
var onNeedsRefresh: (() -> Unit)? = null
|
||||||
|
var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null
|
||||||
|
|
||||||
private val items: MutableList<Any> = ArrayList()
|
private val items: MutableList<Any> = ArrayList()
|
||||||
private var shopIdentifier: String? = null
|
private var shopIdentifier: String? = null
|
||||||
|
|
@ -96,6 +97,7 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<an
|
||||||
val viewHolder = ShopItemViewHolder(view)
|
val viewHolder = ShopItemViewHolder(view)
|
||||||
viewHolder.shopIdentifier = shopIdentifier
|
viewHolder.shopIdentifier = shopIdentifier
|
||||||
viewHolder.onNeedsRefresh = onNeedsRefresh
|
viewHolder.onNeedsRefresh = onNeedsRefresh
|
||||||
|
viewHolder.onShowPurchaseDialog = onShowPurchaseDialog
|
||||||
viewHolder
|
viewHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,6 @@ class GuildListAdapter : BaseRecyclerViewAdapter<Group, RecyclerView.ViewHolder>
|
||||||
val formattedNumber = NumberAbbreviator.abbreviate(itemView.context, guild.memberCount.toDouble(), number)
|
val formattedNumber = NumberAbbreviator.abbreviate(itemView.context, guild.memberCount.toDouble(), number)
|
||||||
binding.guildBadgeView.setImageBitmap(
|
binding.guildBadgeView.setImageBitmap(
|
||||||
HabiticaIconsHelper.imageOfGuildCrest(
|
HabiticaIconsHelper.imageOfGuildCrest(
|
||||||
itemView.context,
|
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
guild.memberCount.toFloat(),
|
guild.memberCount.toFloat(),
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import android.view.ViewGroup
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.habitrpg.android.habitica.R
|
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.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter
|
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter
|
||||||
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
||||||
|
|
@ -33,10 +32,6 @@ class ChallengeTasksRecyclerViewAdapter(
|
||||||
var onAddItem: ((Task) -> Unit)? = null
|
var onAddItem: ((Task) -> Unit)? = null
|
||||||
var onTaskOpen: ((Task) -> Unit)? = null
|
var onTaskOpen: ((Task) -> Unit)? = null
|
||||||
|
|
||||||
override fun injectThis(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
val task = this.filteredContent?.get(position)
|
val task = this.filteredContent?.get(position)
|
||||||
|
|
||||||
|
|
@ -86,13 +81,13 @@ class ChallengeTasksRecyclerViewAdapter(
|
||||||
*/
|
*/
|
||||||
fun replaceTask(task: Task): Boolean {
|
fun replaceTask(task: Task): Boolean {
|
||||||
var i = 0
|
var i = 0
|
||||||
while (i < this.content?.size ?: 0) {
|
while (i < (this.content?.size ?: 0)) {
|
||||||
if (content?.get(i)?.id == task.id) {
|
if (content?.get(i)?.id == task.id) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
++i
|
++i
|
||||||
}
|
}
|
||||||
if (i < content?.size ?: 0) {
|
if (i < (content?.size ?: 0)) {
|
||||||
content?.set(i, task)
|
content?.set(i, task)
|
||||||
|
|
||||||
filter()
|
filter()
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,11 @@ import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
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.models.tasks.Task
|
||||||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||||
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
||||||
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
|
abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
|
||||||
var taskType: TaskType,
|
var taskType: TaskType,
|
||||||
|
|
@ -22,21 +17,14 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
|
||||||
newContext: Context,
|
newContext: Context,
|
||||||
private val userID: String?
|
private val userID: String?
|
||||||
) : BaseRecyclerViewAdapter<Task, VH>() {
|
) : BaseRecyclerViewAdapter<Task, VH>() {
|
||||||
@Inject
|
|
||||||
lateinit var analyticsManager: AnalyticsManager
|
|
||||||
@Inject
|
|
||||||
lateinit var taskRepository: TaskRepository
|
|
||||||
protected var content: MutableList<Task>? = null
|
protected var content: MutableList<Task>? = null
|
||||||
protected var filteredContent: MutableList<Task>? = null
|
protected var filteredContent: MutableList<Task>? = null
|
||||||
internal var context: Context = newContext.applicationContext
|
internal var context: Context = newContext.applicationContext
|
||||||
|
|
||||||
init {
|
init {
|
||||||
this.filteredContent = ArrayList()
|
this.filteredContent = ArrayList()
|
||||||
HabiticaBaseApplication.userComponent?.let { injectThis(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun injectThis(component: UserComponent)
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: VH, position: Int) {
|
override fun onBindViewHolder(holder: VH, position: Int) {
|
||||||
val item = filteredContent?.get(position)
|
val item = filteredContent?.get(position)
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ class RewardsRecyclerViewAdapter(
|
||||||
override var brokenTaskEvents: ((Task) -> Unit)? = null
|
override var brokenTaskEvents: ((Task) -> Unit)? = null
|
||||||
override var adventureGuideOpenEvents: ((Boolean) -> Unit)? = null
|
override var adventureGuideOpenEvents: ((Boolean) -> Unit)? = null
|
||||||
var purchaseCardEvents: ((ShopItem) -> Unit)? = null
|
var purchaseCardEvents: ((ShopItem) -> Unit)? = null
|
||||||
|
var onShowPurchaseDialog: ((ShopItem, Boolean) -> Unit)? = null
|
||||||
|
|
||||||
override var taskDisplayMode: String = "standard"
|
override var taskDisplayMode: String = "standard"
|
||||||
set(value) {
|
set(value) {
|
||||||
|
|
@ -80,6 +81,7 @@ class RewardsRecyclerViewAdapter(
|
||||||
} else {
|
} else {
|
||||||
val viewHolder = ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false))
|
val viewHolder = ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false))
|
||||||
viewHolder.purchaseCardAction = { purchaseCardEvents?.invoke(it) }
|
viewHolder.purchaseCardAction = { purchaseCardEvents?.invoke(it) }
|
||||||
|
viewHolder.onShowPurchaseDialog = onShowPurchaseDialog
|
||||||
viewHolder
|
viewHolder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import android.widget.Toast
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import com.google.firebase.analytics.FirebaseAnalytics
|
import com.google.firebase.analytics.FirebaseAnalytics
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.FragmentAboutBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||||
|
|
@ -21,7 +20,9 @@ import com.habitrpg.common.habitica.extensions.DataBindingUtils
|
||||||
import com.plattysoft.leonids.ParticleSystem
|
import com.plattysoft.leonids.ParticleSystem
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
|
|
||||||
@field:[Inject Named(AppModule.NAMED_USER_ID)]
|
@field:[Inject Named(AppModule.NAMED_USER_ID)]
|
||||||
|
|
@ -30,9 +31,6 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var appConfigManager: AppConfigManager
|
lateinit var appConfigManager: AppConfigManager
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val privacyPolicyLink = "https://habitica.com/static/privacy"
|
private val privacyPolicyLink = "https://habitica.com/static/privacy"
|
||||||
private val termsLink = "https://habitica.com/static/terms"
|
private val termsLink = "https://habitica.com/static/terms"
|
||||||
|
|
@ -85,7 +83,7 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
private val versionName: String by lazy {
|
private val versionName: String by lazy {
|
||||||
try {
|
try {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName ?: ""
|
mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionName ?: ""
|
||||||
} catch (e: PackageManager.NameNotFoundException) {
|
} catch (e: PackageManager.NameNotFoundException) {
|
||||||
""
|
""
|
||||||
}
|
}
|
||||||
|
|
@ -94,7 +92,7 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
private val versionCode: Int by lazy {
|
private val versionCode: Int by lazy {
|
||||||
try {
|
try {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode ?: 0
|
mainActivity?.packageManager?.getPackageInfo(mainActivity?.packageName ?: "", 0)?.versionCode ?: 0
|
||||||
} catch (e: PackageManager.NameNotFoundException) {
|
} catch (e: PackageManager.NameNotFoundException) {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
@ -132,8 +130,8 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
val context = context ?: return
|
val context = context ?: return
|
||||||
FirebaseAnalytics.getInstance(context).logEvent("found_easter_egg", null)
|
FirebaseAnalytics.getInstance(context).logEvent("found_easter_egg", null)
|
||||||
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Base") { bitmap ->
|
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Base") { bitmap ->
|
||||||
activity?.runOnUiThread {
|
mainActivity?.runOnUiThread {
|
||||||
activity?.let {
|
mainActivity?.let {
|
||||||
ParticleSystem(it, 50, bitmap, 3000)
|
ParticleSystem(it, 50, bitmap, 3000)
|
||||||
.setAcceleration(0.00013f, 90)
|
.setAcceleration(0.00013f, 90)
|
||||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||||
|
|
@ -144,8 +142,8 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Golden") { bitmap ->
|
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Golden") { bitmap ->
|
||||||
activity?.runOnUiThread {
|
mainActivity?.runOnUiThread {
|
||||||
activity?.let {
|
mainActivity?.let {
|
||||||
ParticleSystem(it, 50, bitmap, 3000)
|
ParticleSystem(it, 50, bitmap, 3000)
|
||||||
.setAcceleration(0.00013f, 90)
|
.setAcceleration(0.00013f, 90)
|
||||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||||
|
|
@ -156,8 +154,8 @@ class AboutFragment : BaseMainFragment<FragmentAboutBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Red") { bitmap ->
|
DataBindingUtils.loadImage(context, "Pet-Sabretooth-Red") { bitmap ->
|
||||||
activity?.runOnUiThread {
|
mainActivity?.runOnUiThread {
|
||||||
activity?.let {
|
mainActivity?.let {
|
||||||
ParticleSystem(it, 50, bitmap, 3000)
|
ParticleSystem(it, 50, bitmap, 3000)
|
||||||
.setAcceleration(0.00013f, 90)
|
.setAcceleration(0.00013f, 90)
|
||||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||||
import com.habitrpg.android.habitica.ui.adapter.AchievementsAdapter
|
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.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AchievementsFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>(), SwipeRefreshLayout.OnRefreshListener {
|
class AchievementsFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>(), SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -48,9 +49,6 @@ class AchievementsFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
@ -76,7 +74,7 @@ class AchievementsFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
val layoutManager = GridLayoutManager(activity, 2)
|
val layoutManager = GridLayoutManager(mainActivity, 2)
|
||||||
binding?.recyclerView?.layoutManager = layoutManager
|
binding?.recyclerView?.layoutManager = layoutManager
|
||||||
binding?.recyclerView?.adapter = adapter
|
binding?.recyclerView?.adapter = adapter
|
||||||
adapter.useGridLayout = useGridLayout
|
adapter.useGridLayout = useGridLayout
|
||||||
|
|
@ -164,7 +162,7 @@ class AchievementsFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
if (item.itemId == menuID) {
|
if (item.itemId == menuID) {
|
||||||
useGridLayout = !useGridLayout
|
useGridLayout = !useGridLayout
|
||||||
activity?.invalidateOptionsMenu()
|
mainActivity?.invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,6 @@ import android.view.ViewGroup
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
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.data.TutorialRepository
|
||||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
|
|
@ -34,13 +32,6 @@ abstract class BaseDialogFragment<VB : ViewBinding> : BottomSheetDialogFragment(
|
||||||
open val displayedClassName: String?
|
open val displayedClassName: String?
|
||||||
get() = this.javaClass.simpleName
|
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
|
abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
|
@ -56,8 +47,6 @@ abstract class BaseDialogFragment<VB : ViewBinding> : BottomSheetDialogFragment(
|
||||||
return binding?.root
|
return binding?.root
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun injectFragment(component: UserComponent)
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
showTutorialIfNeeded()
|
showTutorialIfNeeded()
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,6 @@ import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.viewbinding.ViewBinding
|
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.data.TutorialRepository
|
||||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||||
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
import com.habitrpg.common.habitica.helpers.AnalyticsManager
|
||||||
|
|
@ -38,17 +36,6 @@ abstract class BaseFragment<VB : ViewBinding> : Fragment() {
|
||||||
open val displayedClassName: String?
|
open val displayedClassName: String?
|
||||||
get() = this.javaClass.simpleName
|
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
|
abstract fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB
|
||||||
|
|
||||||
|
|
@ -61,8 +48,6 @@ abstract class BaseFragment<VB : ViewBinding> : Fragment() {
|
||||||
return binding?.root
|
return binding?.root
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun injectFragment(component: UserComponent)
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
showTutorialIfNeeded()
|
showTutorialIfNeeded()
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
||||||
|
|
||||||
protected var showsBackButton: Boolean = false
|
protected var showsBackButton: Boolean = false
|
||||||
|
|
||||||
open val activity get() = getActivity() as? MainActivity
|
open val mainActivity get() = getActivity() as? MainActivity
|
||||||
val tabLayout get() = activity?.binding?.content?.detailTabs
|
val tabLayout get() = mainActivity?.binding?.content?.detailTabs
|
||||||
val collapsingToolbar get() = activity?.binding?.content?.toolbar
|
val collapsingToolbar get() = mainActivity?.binding?.content?.toolbar
|
||||||
val toolbarAccessoryContainer get() = activity?.binding?.content?.toolbarAccessoryContainer
|
val toolbarAccessoryContainer get() = mainActivity?.binding?.content?.toolbarAccessoryContainer
|
||||||
val bottomNavigation get() = activity?.binding?.content?.bottomNavigation
|
val bottomNavigation get() = mainActivity?.binding?.content?.bottomNavigation
|
||||||
var usesTabLayout: Boolean = false
|
var usesTabLayout: Boolean = false
|
||||||
var hidesToolbar: Boolean = false
|
var hidesToolbar: Boolean = false
|
||||||
var usesBottomNavigation = false
|
var usesBottomNavigation = false
|
||||||
|
|
@ -81,24 +81,24 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
activity?.showBackButton = showsBackButton
|
mainActivity?.showBackButton = showsBackButton
|
||||||
activity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
mainActivity?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||||
super.onCreateOptionsMenu(menu, inflater)
|
super.onCreateOptionsMenu(menu, inflater)
|
||||||
activity?.toolbar?.let { ToolbarColorHelper.colorizeToolbar(it, activity) }
|
mainActivity?.toolbar?.let { ToolbarColorHelper.colorizeToolbar(it, mainActivity) }
|
||||||
updateToolbarInteractivity()
|
updateToolbarInteractivity()
|
||||||
}
|
}
|
||||||
|
|
||||||
var isTitleInteractive = false
|
var isTitleInteractive = false
|
||||||
|
|
||||||
open fun updateToolbarInteractivity() {
|
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) {
|
if (isTitleInteractive) {
|
||||||
activity?.binding?.content?.toolbarTitle?.setScaledPadding(context, 16, 4, 16, 4)
|
mainActivity?.binding?.content?.toolbarTitle?.setScaledPadding(context, 16, 4, 16, 4)
|
||||||
} else {
|
} else {
|
||||||
activity?.binding?.content?.toolbarTitle?.setPadding(0)
|
mainActivity?.binding?.content?.toolbarTitle?.setPadding(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -118,11 +118,11 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideToolbar() {
|
private fun hideToolbar() {
|
||||||
activity?.binding?.content?.headerView?.visibility = View.GONE
|
mainActivity?.binding?.content?.headerView?.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showToolbar() {
|
private fun showToolbar() {
|
||||||
activity?.binding?.content?.headerView?.visibility = View.VISIBLE
|
mainActivity?.binding?.content?.headerView?.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disableToolbarScrolling() {
|
private fun disableToolbarScrolling() {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import androidx.drawerlayout.widget.DrawerLayout
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.data.ContentRepository
|
import com.habitrpg.android.habitica.data.ContentRepository
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
|
|
@ -59,7 +58,9 @@ import kotlin.time.Duration
|
||||||
import kotlin.time.DurationUnit
|
import kotlin.time.DurationUnit
|
||||||
import kotlin.time.ExperimentalTime
|
import kotlin.time.ExperimentalTime
|
||||||
import kotlin.time.toDuration
|
import kotlin.time.toDuration
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class NavigationDrawerFragment : DialogFragment() {
|
class NavigationDrawerFragment : DialogFragment() {
|
||||||
|
|
||||||
private var binding: DrawerMainBinding? = null
|
private var binding: DrawerMainBinding? = null
|
||||||
|
|
@ -110,7 +111,6 @@ class NavigationDrawerFragment : DialogFragment() {
|
||||||
} else {
|
} else {
|
||||||
NavigationDrawerAdapter(0, 0)
|
NavigationDrawerAdapter(0, 0)
|
||||||
}
|
}
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,13 @@ import android.webkit.WebView
|
||||||
import android.webkit.WebViewClient
|
import android.webkit.WebViewClient
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.FragmentNewsBinding
|
||||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class NewsFragment : BaseMainFragment<FragmentNewsBinding>() {
|
class NewsFragment : BaseMainFragment<FragmentNewsBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentNewsBinding? = null
|
override var binding: FragmentNewsBinding? = null
|
||||||
|
|
@ -71,9 +72,6 @@ class NewsFragment : BaseMainFragment<FragmentNewsBinding>() {
|
||||||
binding?.newsWebview?.loadUrl("$address/static/new-stuff")
|
binding?.newsWebview?.loadUrl("$address/static/new-stuff")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.components.UserComponent
|
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentPromoInfoBinding
|
import com.habitrpg.android.habitica.databinding.FragmentPromoInfoBinding
|
||||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PromoInfoFragment : BaseMainFragment<FragmentPromoInfoBinding>() {
|
class PromoInfoFragment : BaseMainFragment<FragmentPromoInfoBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentPromoInfoBinding? = null
|
override var binding: FragmentPromoInfoBinding? = null
|
||||||
|
|
@ -20,9 +21,6 @@ class PromoInfoFragment : BaseMainFragment<FragmentPromoInfoBinding>() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var configManager: AppConfigManager
|
lateinit var configManager: AppConfigManager
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
@ -41,6 +39,6 @@ class PromoInfoFragment : BaseMainFragment<FragmentPromoInfoBinding>() {
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
activity?.title = ""
|
mainActivity?.title = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,9 @@ import com.habitrpg.android.habitica.databinding.FragmentNewsBinding
|
||||||
import com.habitrpg.android.habitica.modules.AppModule
|
import com.habitrpg.android.habitica.modules.AppModule
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PromoWebFragment : BaseMainFragment<FragmentNewsBinding>() {
|
class PromoWebFragment : BaseMainFragment<FragmentNewsBinding>() {
|
||||||
@field:[Inject Named(AppModule.NAMED_USER_ID)]
|
@field:[Inject Named(AppModule.NAMED_USER_ID)]
|
||||||
lateinit var userID: String
|
lateinit var userID: String
|
||||||
|
|
@ -47,7 +49,4 @@ class PromoWebFragment : BaseMainFragment<FragmentNewsBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,7 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
|
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
|
||||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
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.extensions.getThemeColor
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import com.habitrpg.shared.habitica.models.tasks.Attribute
|
import com.habitrpg.shared.habitica.models.tasks.Attribute
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class StatsFragment : BaseMainFragment<FragmentStatsBinding>() {
|
class StatsFragment : BaseMainFragment<FragmentStatsBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentStatsBinding? = null
|
override var binding: FragmentStatsBinding? = null
|
||||||
|
|
@ -156,7 +156,7 @@ class StatsFragment : BaseMainFragment<FragmentStatsBinding>() {
|
||||||
|
|
||||||
private fun showBulkAllocateDialog() {
|
private fun showBulkAllocateDialog() {
|
||||||
context?.let { context ->
|
context?.let { context ->
|
||||||
val dialog = BulkAllocateStatsDialog(context, HabiticaBaseApplication.userComponent)
|
val dialog = BulkAllocateStatsDialog(context, userRepository)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -245,9 +245,6 @@ class StatsFragment : BaseMainFragment<FragmentStatsBinding>() {
|
||||||
binding?.numberOfPointsTextView?.setScaledPadding(context, 18, 4, 18, 4)
|
binding?.numberOfPointsTextView?.setScaledPadding(context, 18, 4, 18, 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateStats(user: User) {
|
private fun updateStats(user: User) {
|
||||||
val outfit = user.items?.gear?.equipped
|
val outfit = user.items?.gear?.equipped
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import com.google.android.flexbox.FlexDirection.ROW
|
||||||
import com.google.android.flexbox.FlexboxLayoutManager
|
import com.google.android.flexbox.FlexboxLayoutManager
|
||||||
import com.google.android.flexbox.JustifyContent
|
import com.google.android.flexbox.JustifyContent
|
||||||
import com.habitrpg.android.habitica.R
|
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.CustomizationRepository
|
||||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.BottomSheetBackgroundsFilterBinding
|
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.extensions.setTintWith
|
||||||
import com.habitrpg.android.habitica.models.CustomizationFilter
|
import com.habitrpg.android.habitica.models.CustomizationFilter
|
||||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
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.OwnedCustomization
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.android.habitica.ui.adapter.CustomizationRecyclerViewAdapter
|
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.helpers.SafeDefaultItemAnimator
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
|
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.dpToPx
|
||||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AvatarCustomizationFragment :
|
class AvatarCustomizationFragment :
|
||||||
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
@ -69,7 +72,7 @@ class AvatarCustomizationFragment :
|
||||||
private var activeCustomization: String? = null
|
private var activeCustomization: String? = null
|
||||||
|
|
||||||
internal var adapter: CustomizationRecyclerViewAdapter = CustomizationRecyclerViewAdapter()
|
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 currentFilter = MutableStateFlow(CustomizationFilter(false, true))
|
||||||
private val ownedCustomizations = MutableStateFlow<List<OwnedCustomization>>(emptyList())
|
private val ownedCustomizations = MutableStateFlow<List<OwnedCustomization>>(emptyList())
|
||||||
|
|
@ -96,6 +99,10 @@ class AvatarCustomizationFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
adapter.onShowPurchaseDialog = { item ->
|
||||||
|
val dialog = PurchaseDialog(requireContext(), userRepository, inventoryRepository, item)
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
|
||||||
lifecycleScope.launchCatching {
|
lifecycleScope.launchCatching {
|
||||||
inventoryRepository.getInAppRewards()
|
inventoryRepository.getInAppRewards()
|
||||||
|
|
@ -118,7 +125,7 @@ class AvatarCustomizationFragment :
|
||||||
}
|
}
|
||||||
adapter.customizationType = type
|
adapter.customizationType = type
|
||||||
binding?.refreshLayout?.setOnRefreshListener(this)
|
binding?.refreshLayout?.setOnRefreshListener(this)
|
||||||
layoutManager = FlexboxLayoutManager(activity, ROW)
|
layoutManager = FlexboxLayoutManager(mainActivity, ROW)
|
||||||
layoutManager.justifyContent = JustifyContent.CENTER
|
layoutManager.justifyContent = JustifyContent.CENTER
|
||||||
layoutManager.alignItems = AlignItems.FLEX_START
|
layoutManager.alignItems = AlignItems.FLEX_START
|
||||||
binding?.recyclerView?.layoutManager = layoutManager
|
binding?.recyclerView?.layoutManager = layoutManager
|
||||||
|
|
@ -184,9 +191,6 @@ class AvatarCustomizationFragment :
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadCustomizations() {
|
private fun loadCustomizations() {
|
||||||
val type = this.type ?: return
|
val type = this.type ?: return
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
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 com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AvatarEquipmentFragment :
|
class AvatarEquipmentFragment :
|
||||||
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
@ -42,7 +43,7 @@ class AvatarEquipmentFragment :
|
||||||
private var activeEquipment: String? = null
|
private var activeEquipment: String? = null
|
||||||
|
|
||||||
internal var adapter: CustomizationEquipmentRecyclerViewAdapter = CustomizationEquipmentRecyclerViewAdapter()
|
internal var adapter: CustomizationEquipmentRecyclerViewAdapter = CustomizationEquipmentRecyclerViewAdapter()
|
||||||
internal var layoutManager: GridLayoutManager = GridLayoutManager(activity, 2)
|
internal var layoutManager: GridLayoutManager = GridLayoutManager(mainActivity, 2)
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
@ -77,7 +78,7 @@ class AvatarEquipmentFragment :
|
||||||
}
|
}
|
||||||
binding?.refreshLayout?.setOnRefreshListener(this)
|
binding?.refreshLayout?.setOnRefreshListener(this)
|
||||||
setGridSpanCount(view.width)
|
setGridSpanCount(view.width)
|
||||||
val layoutManager = GridLayoutManager(activity, 4)
|
val layoutManager = GridLayoutManager(mainActivity, 4)
|
||||||
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
|
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
|
||||||
override fun getSpanSize(position: Int): Int {
|
override fun getSpanSize(position: Int): Int {
|
||||||
return if (adapter.getItemViewType(position) == 0) {
|
return if (adapter.getItemViewType(position) == 0) {
|
||||||
|
|
@ -97,9 +98,6 @@ class AvatarEquipmentFragment :
|
||||||
userViewModel.user.observe(viewLifecycleOwner) { updateUser(it) }
|
userViewModel.user.observe(viewLifecycleOwner) { updateUser(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadEquipment() {
|
private fun loadEquipment() {
|
||||||
val type = this.type ?: return
|
val type = this.type ?: return
|
||||||
|
|
|
||||||
|
|
@ -106,9 +106,6 @@ open class AvatarOverviewFragment :
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun displayCustomizationFragment(type: String, category: String?) {
|
private fun displayCustomizationFragment(type: String, category: String?) {
|
||||||
MainNavigationController.navigate(
|
MainNavigationController.navigate(
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.inventory.customization
|
package com.habitrpg.android.habitica.ui.fragments.inventory.customization
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class EquipmentOverviewFragment : AvatarOverviewFragment() {
|
class EquipmentOverviewFragment : AvatarOverviewFragment() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
showCustomization = false
|
showCustomization = false
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
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 com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class EquipmentDetailFragment :
|
class EquipmentDetailFragment :
|
||||||
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
@ -80,7 +81,7 @@ class EquipmentDetailFragment :
|
||||||
this.adapter.type = this.type
|
this.adapter.type = this.type
|
||||||
|
|
||||||
binding?.recyclerView?.adapter = this.adapter
|
binding?.recyclerView?.adapter = this.adapter
|
||||||
binding?.recyclerView?.layoutManager = LinearLayoutManager(activity)
|
binding?.recyclerView?.layoutManager = LinearLayoutManager(mainActivity)
|
||||||
binding?.recyclerView?.addItemDecoration(DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL))
|
binding?.recyclerView?.addItemDecoration(DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL))
|
||||||
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||||
|
|
||||||
|
|
@ -96,9 +97,6 @@ class EquipmentDetailFragment :
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRefresh() {
|
override fun onRefresh() {
|
||||||
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
lifecycleScope.launch(ExceptionHandler.coroutine()) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,9 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ItemDialogFragment : BaseDialogFragment<FragmentItemsDialogBinding>() {
|
class ItemDialogFragment : BaseDialogFragment<FragmentItemsDialogBinding>() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -78,9 +80,6 @@ class ItemDialogFragment : BaseDialogFragment<FragmentItemsDialogBinding>() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,9 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshLayout.OnRefreshListener {
|
class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -81,9 +83,6 @@ class ItemRecyclerFragment : BaseFragment<FragmentItemsBinding>(), SwipeRefreshL
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.FragmentViewpagerBinding
|
||||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ItemsFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
class ItemsFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentViewpagerBinding? = null
|
override var binding: FragmentViewpagerBinding? = null
|
||||||
|
|
@ -48,9 +49,6 @@ class ItemsFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setViewPagerAdapter() {
|
private fun setViewPagerAdapter() {
|
||||||
val fragmentManager = childFragmentManager
|
val fragmentManager = childFragmentManager
|
||||||
|
|
@ -91,11 +89,11 @@ class ItemsFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
|
|
||||||
private fun getPageTitle(position: Int): String {
|
private fun getPageTitle(position: Int): String {
|
||||||
return when (position) {
|
return when (position) {
|
||||||
0 -> activity?.getString(R.string.eggs)
|
0 -> mainActivity?.getString(R.string.eggs)
|
||||||
1 -> activity?.getString(R.string.hatching_potions)
|
1 -> mainActivity?.getString(R.string.hatching_potions)
|
||||||
2 -> activity?.getString(R.string.food)
|
2 -> mainActivity?.getString(R.string.food)
|
||||||
3 -> activity?.getString(R.string.quests)
|
3 -> mainActivity?.getString(R.string.quests)
|
||||||
4 -> activity?.getString(R.string.special)
|
4 -> mainActivity?.getString(R.string.special)
|
||||||
else -> ""
|
else -> ""
|
||||||
} ?: ""
|
} ?: ""
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MarketFragment : ShopFragment() {
|
class MarketFragment : ShopFragment() {
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class QuestShopFragment : ShopFragment() {
|
class QuestShopFragment : ShopFragment() {
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SeasonalShopFragment : ShopFragment() {
|
class SeasonalShopFragment : ShopFragment() {
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import androidx.core.os.bundleOf
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.SocialRepository
|
import com.habitrpg.android.habitica.data.SocialRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
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.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
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.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.RecyclerViewState
|
import com.habitrpg.common.habitica.helpers.RecyclerViewState
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
|
@ -103,6 +103,18 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
|
||||||
loadMarketGear()
|
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
|
adapter?.context = context
|
||||||
binding?.recyclerView?.adapter = adapter
|
binding?.recyclerView?.adapter = adapter
|
||||||
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||||
|
|
@ -291,9 +303,6 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
super.onSaveInstanceState(outState)
|
super.onSaveInstanceState(outState)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.models.shops.Shop
|
import com.habitrpg.android.habitica.models.shops.Shop
|
||||||
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
import com.habitrpg.android.habitica.ui.views.CurrencyText
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TimeTravelersShopFragment : ShopFragment() {
|
class TimeTravelersShopFragment : ShopFragment() {
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import android.view.ViewGroup
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||||
import com.habitrpg.android.habitica.extensions.getTranslatedType
|
import com.habitrpg.android.habitica.extensions.getTranslatedType
|
||||||
|
|
@ -25,7 +24,9 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MountDetailRecyclerFragment :
|
class MountDetailRecyclerFragment :
|
||||||
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
@ -61,9 +62,6 @@ class MountDetailRecyclerFragment :
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
showsBackButton = true
|
showsBackButton = true
|
||||||
|
|
@ -79,7 +77,7 @@ class MountDetailRecyclerFragment :
|
||||||
}
|
}
|
||||||
binding?.refreshLayout?.setOnRefreshListener(this)
|
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() {
|
layoutManager?.spanSizeLookup = object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() {
|
||||||
override fun getSpanSize(position: Int): Int {
|
override fun getSpanSize(position: Int): Int {
|
||||||
return if (adapter?.getItemViewType(position) == 0 || adapter?.getItemViewType(position) == 1) {
|
return if (adapter?.getItemViewType(position) == 0 || adapter?.getItemViewType(position) == 1) {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import android.view.ViewGroup
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||||
import com.habitrpg.android.habitica.extensions.getTranslatedType
|
import com.habitrpg.android.habitica.extensions.getTranslatedType
|
||||||
|
|
@ -31,7 +30,9 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PetDetailRecyclerFragment :
|
class PetDetailRecyclerFragment :
|
||||||
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseMainFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
@ -77,9 +78,6 @@ class PetDetailRecyclerFragment :
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
showsBackButton = true
|
showsBackButton = true
|
||||||
|
|
@ -143,7 +141,7 @@ class PetDetailRecyclerFragment :
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
activity?.title = animalType
|
mainActivity?.title = animalType
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
|
@ -224,7 +222,7 @@ class PetDetailRecyclerFragment :
|
||||||
|
|
||||||
private fun showFeedingDialog(pet: Pet, food: Food?) {
|
private fun showFeedingDialog(pet: Pet, food: Food?) {
|
||||||
if (food != null) {
|
if (food != null) {
|
||||||
val context = activity ?: context ?: return
|
val context = mainActivity ?: context ?: return
|
||||||
lifecycleScope.launchCatching {
|
lifecycleScope.launchCatching {
|
||||||
feedPetUseCase.callInteractor(
|
feedPetUseCase.callInteractor(
|
||||||
FeedPetUseCase.RequestValues(
|
FeedPetUseCase.RequestValues(
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,12 @@ import androidx.fragment.app.viewModels
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.habitrpg.android.habitica.R
|
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.databinding.FragmentViewpagerBinding
|
||||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class StableFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
class StableFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentViewpagerBinding? = null
|
override var binding: FragmentViewpagerBinding? = null
|
||||||
|
|
@ -40,9 +41,6 @@ class StableFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
setViewPagerAdapter()
|
setViewPagerAdapter()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setViewPagerAdapter() {
|
private fun setViewPagerAdapter() {
|
||||||
val fragmentManager = childFragmentManager
|
val fragmentManager = childFragmentManager
|
||||||
|
|
@ -80,8 +78,8 @@ class StableFragment : BaseMainFragment<FragmentViewpagerBinding>() {
|
||||||
|
|
||||||
private fun getPageTitle(position: Int): String {
|
private fun getPageTitle(position: Int): String {
|
||||||
return when (position) {
|
return when (position) {
|
||||||
0 -> activity?.getString(R.string.pets)
|
0 -> mainActivity?.getString(R.string.pets)
|
||||||
1 -> activity?.getString(R.string.mounts)
|
1 -> mainActivity?.getString(R.string.mounts)
|
||||||
else -> ""
|
else -> ""
|
||||||
} ?: ""
|
} ?: ""
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.inventory.stable
|
package com.habitrpg.android.habitica.ui.fragments.inventory.stable
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
@ -9,7 +8,6 @@ import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
import com.habitrpg.android.habitica.R
|
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.InventoryRepository
|
||||||
import com.habitrpg.android.habitica.data.UserRepository
|
import com.habitrpg.android.habitica.data.UserRepository
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
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.helpers.SafeDefaultItemAnimator
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.android.habitica.ui.viewmodels.StableViewModel
|
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.EmptyItem
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class StableRecyclerFragment :
|
class StableRecyclerFragment :
|
||||||
BaseFragment<FragmentRefreshRecyclerviewBinding>(),
|
BaseFragment<FragmentRefreshRecyclerviewBinding>(),
|
||||||
SwipeRefreshLayout.OnRefreshListener {
|
SwipeRefreshLayout.OnRefreshListener {
|
||||||
|
|
||||||
private val viewModel: StableViewModel by viewModels(factoryProducer = {
|
private val viewModel: StableViewModel by viewModels()
|
||||||
StableViewModelFactory(context?.applicationContext as? Application, itemType)
|
|
||||||
})
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var inventoryRepository: InventoryRepository
|
lateinit var inventoryRepository: InventoryRepository
|
||||||
|
|
@ -75,9 +72,6 @@ class StableRecyclerFragment :
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,9 @@ import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AccountPreferenceFragment :
|
class AccountPreferenceFragment :
|
||||||
BasePreferencesFragment(),
|
BasePreferencesFragment(),
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener,
|
SharedPreferences.OnSharedPreferenceChangeListener,
|
||||||
|
|
@ -53,8 +55,8 @@ class AccountPreferenceFragment :
|
||||||
lateinit var hostConfig: HostConfig
|
lateinit var hostConfig: HostConfig
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var apiClient: ApiClient
|
lateinit var apiClient: ApiClient
|
||||||
|
@Inject
|
||||||
private lateinit var viewModel: AuthenticationViewModel
|
lateinit var viewModel: AuthenticationViewModel
|
||||||
private lateinit var accountDialog: HabiticaAccountDialog
|
private lateinit var accountDialog: HabiticaAccountDialog
|
||||||
|
|
||||||
override var user: User? = null
|
override var user: User? = null
|
||||||
|
|
@ -64,9 +66,7 @@ class AccountPreferenceFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
viewModel = AuthenticationViewModel()
|
|
||||||
findPreference<Preference>("confirm_username")?.isVisible = user?.flags?.verifiedUsername == false
|
findPreference<Preference>("confirm_username")?.isVisible = user?.flags?.verifiedUsername == false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -277,7 +277,7 @@ class AccountPreferenceFragment :
|
||||||
context?.let { context ->
|
context?.let { context ->
|
||||||
val dialog = HabiticaAlertDialog(context)
|
val dialog = HabiticaAlertDialog(context)
|
||||||
dialog.setTitle(R.string.change_password)
|
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)
|
KeyboardUtil.dismissKeyboard(activity)
|
||||||
passwordEditText?.showErrorIfNecessary()
|
passwordEditText?.showErrorIfNecessary()
|
||||||
passwordRepeatEditText?.showErrorIfNecessary()
|
passwordRepeatEditText?.showErrorIfNecessary()
|
||||||
|
|
@ -293,7 +293,7 @@ class AccountPreferenceFragment :
|
||||||
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
|
displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
dialog.dismiss()
|
d.dismiss()
|
||||||
}
|
}
|
||||||
dialog.addCancelButton()
|
dialog.addCancelButton()
|
||||||
dialog.setAdditionalContentView(view)
|
dialog.setAdditionalContentView(view)
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,18 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.preferences
|
package com.habitrpg.android.habitica.ui.fragments.preferences
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.CheckBoxPreference
|
import androidx.preference.CheckBoxPreference
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class EmailNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
|
class EmailNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private var isInitialSet: Boolean = true
|
private var isInitialSet: Boolean = true
|
||||||
private var isSettingUser: Boolean = false
|
private var isSettingUser: Boolean = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,9 @@ import androidx.fragment.app.DialogFragment
|
||||||
import com.habitrpg.android.habitica.R
|
import com.habitrpg.android.habitica.R
|
||||||
import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding
|
import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
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) {
|
class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R.layout.dialog_habitica_account) {
|
||||||
private var _binding: DialogHabiticaAccountBinding? = null
|
private var _binding: DialogHabiticaAccountBinding? = null
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
|
|
|
||||||
|
|
@ -54,11 +54,13 @@ import com.habitrpg.common.habitica.helpers.AppTestingLevel
|
||||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||||
import com.habitrpg.common.habitica.helpers.LanguageHelper
|
import com.habitrpg.common.habitica.helpers.LanguageHelper
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PreferencesFragment : BasePreferencesFragment(),
|
class PreferencesFragment : BasePreferencesFragment(),
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
|
@ -84,11 +86,6 @@ class PreferencesFragment : BasePreferencesFragment(),
|
||||||
private var serverUrlPreference : ListPreference? = null
|
private var serverUrlPreference : ListPreference? = null
|
||||||
private var taskListPreference : 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?) {
|
override fun onViewCreated(view : View, savedInstanceState : Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
listView.itemAnimator = null
|
listView.itemAnimator = null
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,18 @@
|
||||||
package com.habitrpg.android.habitica.ui.fragments.preferences
|
package com.habitrpg.android.habitica.ui.fragments.preferences
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.CheckBoxPreference
|
import androidx.preference.CheckBoxPreference
|
||||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|
||||||
import com.habitrpg.android.habitica.models.user.User
|
import com.habitrpg.android.habitica.models.user.User
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class PushNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
|
class PushNotificationsPreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private var isInitialSet: Boolean = true
|
private var isInitialSet: Boolean = true
|
||||||
private var isSettingUser: Boolean = false
|
private var isSettingUser: Boolean = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
HabiticaBaseApplication.userComponent?.inject(this)
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this)
|
preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this)
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,9 @@ import androidx.preference.PreferenceDialogFragmentCompat
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import com.habitrpg.android.habitica.prefs.TimePreference
|
import com.habitrpg.android.habitica.prefs.TimePreference
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TimePreferenceDialogFragment : PreferenceDialogFragmentCompat() {
|
class TimePreferenceDialogFragment : PreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
lateinit var picker: TimePicker
|
lateinit var picker: TimePicker
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,9 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GemsPurchaseFragment : BaseFragment<FragmentGemPurchaseBinding>() {
|
class GemsPurchaseFragment : BaseFragment<FragmentGemPurchaseBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentGemPurchaseBinding? = null
|
override var binding: FragmentGemPurchaseBinding? = null
|
||||||
|
|
@ -56,9 +58,6 @@ class GemsPurchaseFragment : BaseFragment<FragmentGemPurchaseBinding>() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var purchaseHandler: PurchaseHandler
|
lateinit var purchaseHandler: PurchaseHandler
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private var isGemSaleHappening = false
|
private var isGemSaleHappening = false
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,9 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GiftBalanceGemsFragment : BaseFragment<FragmentGiftGemBalanceBinding>() {
|
class GiftBalanceGemsFragment : BaseFragment<FragmentGiftGemBalanceBinding>() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -60,9 +62,6 @@ class GiftBalanceGemsFragment : BaseFragment<FragmentGiftGemBalanceBinding>() {
|
||||||
binding?.usernameTextview?.text = it.formattedUsername
|
binding?.usernameTextview?.text = it.formattedUsername
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,9 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class GiftPurchaseGemsFragment : BaseFragment<FragmentGiftGemPurchaseBinding>() {
|
class GiftPurchaseGemsFragment : BaseFragment<FragmentGiftGemPurchaseBinding>() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -46,9 +48,6 @@ class GiftPurchaseGemsFragment : BaseFragment<FragmentGiftGemPurchaseBinding>()
|
||||||
|
|
||||||
private var purchaseHandler: PurchaseHandler? = null
|
private var purchaseHandler: PurchaseHandler? = null
|
||||||
|
|
||||||
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)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,9 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() {
|
class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentSubscriptionBinding? = null
|
override var binding: FragmentSubscriptionBinding? = null
|
||||||
|
|
@ -149,9 +151,6 @@ class SubscriptionFragment : BaseFragment<FragmentSubscriptionBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadInventory() {
|
private fun loadInventory() {
|
||||||
CoroutineScope(Dispatchers.IO).launchCatching {
|
CoroutineScope(Dispatchers.IO).launchCatching {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,9 @@ import com.habitrpg.android.habitica.ui.views.setup.AvatarCategoryView
|
||||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||||
import java.util.Random
|
import java.util.Random
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class AvatarSetupFragment : BaseFragment<FragmentSetupAvatarBinding>() {
|
class AvatarSetupFragment : BaseFragment<FragmentSetupAvatarBinding>() {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
|
|
@ -113,9 +115,6 @@ class AvatarSetupFragment : BaseFragment<FragmentSetupAvatarBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadCustomizations() {
|
private fun loadCustomizations() {
|
||||||
val user = this.user ?: return
|
val user = this.user ?: return
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ import android.view.ViewGroup
|
||||||
import com.habitrpg.android.habitica.components.UserComponent
|
import com.habitrpg.android.habitica.components.UserComponent
|
||||||
import com.habitrpg.android.habitica.databinding.FragmentIntroBinding
|
import com.habitrpg.android.habitica.databinding.FragmentIntroBinding
|
||||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class IntroFragment : BaseFragment<FragmentIntroBinding>() {
|
class IntroFragment : BaseFragment<FragmentIntroBinding>() {
|
||||||
|
|
||||||
override var binding: FragmentIntroBinding? = null
|
override var binding: FragmentIntroBinding? = null
|
||||||
|
|
@ -52,9 +54,6 @@ class IntroFragment : BaseFragment<FragmentIntroBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setImage(image: Drawable?) {
|
fun setImage(image: Drawable?) {
|
||||||
this.image = image
|
this.image = image
|
||||||
|
|
|
||||||
|
|
@ -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.Frequency
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() {
|
class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() {
|
||||||
|
|
||||||
var activity: SetupActivity? = null
|
var activity: SetupActivity? = null
|
||||||
|
|
@ -73,9 +75,6 @@ class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setTasks() {
|
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))
|
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))
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,9 @@ import kotlinx.coroutines.flow.firstOrNull
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
||||||
|
|
||||||
var onNameValid: ((Boolean?) -> Unit)? = null
|
var onNameValid: ((Boolean?) -> Unit)? = null
|
||||||
|
|
@ -144,7 +146,4 @@ class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun injectFragment(component: UserComponent) {
|
|
||||||
component.inject(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,9 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||||
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
import com.habitrpg.shared.habitica.models.tasks.TaskType
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class SkillTasksRecyclerViewFragment : BaseFragment<FragmentRecyclerviewBinding>() {
|
class SkillTasksRecyclerViewFragment : BaseFragment<FragmentRecyclerviewBinding>() {
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var taskRepository: TaskRepository
|
lateinit var taskRepository: TaskRepository
|
||||||
|
|
@ -35,9 +37,6 @@ class SkillTasksRecyclerViewFragment : BaseFragment<FragmentRecyclerviewBinding>
|
||||||
|
|
||||||
var onTaskSelection: ((Task) -> Unit)? = null
|
var onTaskSelection: ((Task) -> Unit)? = null
|
||||||
|
|
||||||
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)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue