From 7da825219a9ccee7c36637194504a86d34a96ba8 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 21 Jul 2017 14:41:39 +0200 Subject: [PATCH] improve content reloading --- Habitica/res/values/strings.xml | 2 + .../android/habitica/data/UserRepository.java | 3 ++ .../implementation/UserRepositoryImpl.java | 13 +++++++ .../preferences/PreferencesFragment.java | 38 ++++++++----------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 65fdae797..0ae55b9db 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -622,4 +622,6 @@ Invitations Started by %s Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner. + Loading... + Reloading Content diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.java index 5e29290db..6fac8e894 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.java @@ -54,4 +54,7 @@ public interface UserRepository extends BaseRepository { Observable readNotification(String id); + Observable changeCustomDayStart(int dayStartTime); + + Observable updateLanguage(User user, String languageCode); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java index b969c68cd..25bab05ad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java @@ -220,6 +220,19 @@ public class UserRepositoryImpl extends BaseRepositoryImpl return apiClient.readNotification(id); } + @Override + public Observable changeCustomDayStart(int dayStartTime) { + Map updateObject = new HashMap<>(); + updateObject.put("dayStart", dayStartTime); + return apiClient.changeCustomDayStart(updateObject); + } + + @Override + public Observable updateLanguage(User user, String languageCode) { + return updateUser(user, "preferences.language", languageCode) + .doOnNext(user1 -> apiClient.setLanguageCode(languageCode)); + } + @Override public void runCron(List tasks) { Observable> observable; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java index dea716737..6eb524e3b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.ui.fragments.preferences; +import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -13,7 +14,7 @@ import android.support.v7.preference.PreferenceScreen; import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.HabiticaBaseApplication; import com.habitrpg.android.habitica.R; -import com.habitrpg.android.habitica.data.ApiClient; +import com.habitrpg.android.habitica.data.InventoryRepository; import com.habitrpg.android.habitica.data.UserRepository; import com.habitrpg.android.habitica.helpers.LanguageHelper; import com.habitrpg.android.habitica.helpers.RxErrorHandler; @@ -21,7 +22,6 @@ import com.habitrpg.android.habitica.helpers.SoundManager; import com.habitrpg.android.habitica.helpers.TaskAlarmManager; import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager; import com.habitrpg.android.habitica.models.user.User; -import com.habitrpg.android.habitica.models.user.Preferences; import com.habitrpg.android.habitica.prefs.TimePreference; import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity; import com.habitrpg.android.habitica.ui.activities.MainActivity; @@ -38,7 +38,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements SharedPreferences.OnSharedPreferenceChangeListener { @Inject - public ApiClient apiClient; + public InventoryRepository inventoryRepository; @Inject public SoundManager soundManager; @Inject @@ -137,7 +137,11 @@ public class PreferencesFragment extends BasePreferencesFragment implements } return true; } else if (preference.getKey().equals("reload_content")) { - apiClient.getContent().subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError()); + ProgressDialog dialog = ProgressDialog.show(context, context.getString(R.string.reloading_content), null, true); + inventoryRepository.retrieveContent(true).subscribe(contentResult -> dialog.dismiss(), throwable -> { + dialog.dismiss(); + RxErrorHandler.reportError(throwable); + }); } return super.onPreferenceTreeClick(preference); } @@ -172,12 +176,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements String timeval = sharedPreferences.getString("cds_time", "00:00"); String[] pieces = timeval.split(":"); int hour = Integer.parseInt(pieces[0]); - Map updateObject = new HashMap<>(); - updateObject.put("dayStart", hour); - apiClient.changeCustomDayStart(updateObject) - .subscribe(user -> { - }, throwable -> { - }); + userRepository.changeCustomDayStart(hour).subscribe(user -> {}, throwable -> {}); break; case "language": { LanguageHelper languageHelper = new LanguageHelper(sharedPreferences.getString(key, "en")); @@ -189,14 +188,10 @@ public class PreferencesFragment extends BasePreferencesFragment implements } else { configuration.setLocale(languageHelper.getLocale()); } - getActivity().getResources().updateConfiguration(configuration, - getActivity().getResources().getDisplayMetrics()); - userRepository.updateUser(user, "preferences.language", languageHelper.getLanguageCode()) - .subscribe(habitRPGUser -> { - }, throwable -> { - }); - apiClient.setLanguageCode(languageHelper.getLanguageCode()); - apiClient.getContent().subscribe(contentResult -> {}, throwable -> {}); + getActivity().getResources().updateConfiguration(configuration, getActivity().getResources().getDisplayMetrics()); + userRepository.updateLanguage(user, languageHelper.getLanguageCode()) + .flatMap(user1 -> inventoryRepository.retrieveContent(true)) + .subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError()); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { Intent intent = new Intent(getActivity(), MainActivity.class); @@ -207,22 +202,19 @@ public class PreferencesFragment extends BasePreferencesFragment implements this.startActivity(intent); getActivity().finishAffinity(); } - break; } case "audioTheme": { String newAudioTheme = sharedPreferences.getString(key, "off"); userRepository.updateUser(user, "preferences.sound", newAudioTheme) - .subscribe(habitRPGUser -> {}, throwable -> {}); - + .subscribe(habitRPGUser -> {}, RxErrorHandler.handleEmptyError()); soundManager.setSoundTheme(newAudioTheme); - soundManager.preloadAllFiles(); break; } case "dailyDueDefaultView": userRepository.updateUser(user, "preferences.dailyDueDefaultView", sharedPreferences.getBoolean(key, false)) - .subscribe(habitRPGUser -> {}, throwable -> {}); + .subscribe(habitRPGUser -> {}, RxErrorHandler.handleEmptyError()); break; } }