From 3283cd8187d9a7c1bd673e0c15dc2c70747a01e4 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 10 Apr 2017 15:54:39 +0200 Subject: [PATCH] fix various linter errors --- Habitica/config/checkstyle.xml | 1 - Habitica/res/values/strings.xml | 2 +- .../android/habitica/HabiticaApplication.java | 2 - .../android/habitica/ApiClientImpl.java | 72 +++++++++---------- .../android/habitica/ContentCache.java | 60 ++++++++-------- .../android/habitica/HabitDatabase.java | 4 ++ .../habitica/HabiticaBaseApplication.java | 38 ++-------- .../helpers/PopupNotificationsManager.java | 34 ++++----- .../habitica/helpers/SoundFileLoader.java | 17 ++++- .../habitica/helpers/SoundManager.java | 10 +-- .../android/habitica/modules/ApiModule.java | 11 ++- .../android/habitica/modules/AppModule.java | 6 +- .../habitica/ui/MaxHeightLinearLayout.java | 4 +- .../activities/ChallengeDetailActivity.java | 4 +- .../ui/activities/FullProfileActivity.java | 6 +- .../ui/adapter/social/AchievementAdapter.java | 4 +- .../tasks/RewardsRecyclerViewAdapter.java | 2 +- .../ui/fragments/social/ChatListFragment.java | 2 +- .../social/InboxMessageListFragment.java | 2 +- .../ui/fragments/social/TavernFragment.java | 2 +- ....java => ChallengeDetailDialogHolder.java} | 13 ++-- .../challenges/ChallengeListFragment.java | 2 +- .../ChallengesOverviewFragment.java | 6 +- .../fragments/social/party/PartyFragment.java | 2 +- .../habitica/ui/helpers/ViewHelper.java | 13 ++-- .../habitrpgwrapper/lib/api/ApiClient.java | 55 +++++++------- .../habitrpgwrapper/lib/api/ApiService.java | 9 ++- .../habitrpgwrapper/lib/api/Server.java | 13 ++-- .../habitrpgwrapper/lib/models/Group.java | 8 ++- .../habitrpgwrapper/lib/models/Items.java | 4 +- .../lib/models/tasks/ItemData.java | 2 + .../PopupNotificationsManagerTest.java | 5 +- 32 files changed, 201 insertions(+), 214 deletions(-) rename Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/{ChallegeDetailDialogHolder.java => ChallengeDetailDialogHolder.java} (95%) diff --git a/Habitica/config/checkstyle.xml b/Habitica/config/checkstyle.xml index cd58f6806..1e8975579 100644 --- a/Habitica/config/checkstyle.xml +++ b/Habitica/config/checkstyle.xml @@ -237,7 +237,6 @@ Severity: EASY - diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index b97a3cf53..60c82f274 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -491,7 +491,7 @@ by %s Challenge Details Leave Challenge - Are you sure you want to leave the Challenge ā€œ%sā€? + Are you sure you want to leave the Challenge ā€œ%sā€? Remove tasks Do you want to remove the tasks? Remove diff --git a/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java b/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java index 00537bda4..e6f196d0c 100644 --- a/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java +++ b/Habitica/src/debug/java/com/habitrpg/android/habitica/HabiticaApplication.java @@ -4,8 +4,6 @@ import com.habitrpg.android.habitica.components.AppComponent; import com.habitrpg.android.habitica.components.DaggerAppComponent; import com.habitrpg.android.habitica.modules.AppModule; -import android.content.Context; - public class HabiticaApplication extends HabiticaBaseApplication { @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java index 8f09d5547..a01d208ad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java @@ -1,17 +1,19 @@ package com.habitrpg.android.habitica; +import android.content.Context; +import android.support.v7.app.AlertDialog; + +import com.amplitude.api.Amplitude; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; - -import com.amplitude.api.Amplitude; import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy; import com.habitrpg.android.habitica.helpers.PopupNotificationsManager; import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy; -import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.api.ApiClient; +import com.magicmicky.habitrpgwrapper.lib.api.ApiService; import com.magicmicky.habitrpgwrapper.lib.api.Server; import com.magicmicky.habitrpgwrapper.lib.models.AchievementResult; import com.magicmicky.habitrpgwrapper.lib.models.Challenge; @@ -26,16 +28,14 @@ import com.magicmicky.habitrpgwrapper.lib.models.LeaveChallengeBody; import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; +import com.magicmicky.habitrpgwrapper.lib.models.Purchases; import com.magicmicky.habitrpgwrapper.lib.models.Quest; import com.magicmicky.habitrpgwrapper.lib.models.Shop; +import com.magicmicky.habitrpgwrapper.lib.models.Skill; import com.magicmicky.habitrpgwrapper.lib.models.Status; import com.magicmicky.habitrpgwrapper.lib.models.SubscriptionValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.Tag; import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData; -import com.magicmicky.habitrpgwrapper.lib.models.responses.BuyResponse; -import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse; -import com.magicmicky.habitrpgwrapper.lib.models.Purchases; -import com.magicmicky.habitrpgwrapper.lib.models.Skill; import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep; import com.magicmicky.habitrpgwrapper.lib.models.UserAuth; import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse; @@ -47,7 +47,9 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount; import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet; import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; +import com.magicmicky.habitrpgwrapper.lib.models.responses.BuyResponse; import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse; +import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse; import com.magicmicky.habitrpgwrapper.lib.models.responses.SkillResponse; import com.magicmicky.habitrpgwrapper.lib.models.responses.UnlockResponse; import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem; @@ -82,10 +84,6 @@ import com.magicmicky.habitrpgwrapper.lib.utils.TaskTagDeserializer; import com.magicmicky.habitrpgwrapper.lib.utils.TutorialStepListDeserializer; import com.raizlabs.android.dbflow.structure.ModelAdapter; -import android.app.Activity; -import android.content.Context; -import android.support.v7.app.AlertDialog; - import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -94,7 +92,6 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -120,6 +117,7 @@ public class ApiClientImpl implements Action1, ApiClient { private final GsonConverterFactory gsonConverter; private final HostConfig hostConfig; private final Retrofit retrofitAdapter; + private final PopupNotificationsManager popupNotificationsManager; private CrashlyticsProxy crashlyticsProxy; private Context context; @@ -127,13 +125,12 @@ public class ApiClientImpl implements Action1, ApiClient { // I think we don't need the ApiClientImpl anymore we could just use ApiService private final ApiService apiService; - final Observable.Transformer apiCallTransformer = + private final Observable.Transformer apiCallTransformer = observable -> ((Observable) observable) .map(new Func1() { @Override public Object call(HabitResponse habitResponse) { if (habitResponse.notifications != null) { - PopupNotificationsManager popupNotificationsManager = PopupNotificationsManager.getInstance(com.habitrpg.android.habitica.ApiClientImpl.this, context); popupNotificationsManager.showNotificationDialog(habitResponse.notifications); } return habitResponse.getData(); @@ -147,10 +144,12 @@ public class ApiClientImpl implements Action1, ApiClient { //private OnHabitsAPIResult mResultListener; //private HostConfig mConfig; - public ApiClientImpl(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, Context context) { + public ApiClientImpl(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, PopupNotificationsManager popupNotificationsManager, Context context) { this.gsonConverter = gsonConverter; this.hostConfig = hostConfig; this.context = context; + this.crashlyticsProxy = crashlyticsProxy; + this.popupNotificationsManager = popupNotificationsManager; HabiticaBaseApplication.getComponent().inject(this); crashlyticsProxy.setUserIdentifier(this.hostConfig.getUser()); @@ -217,9 +216,9 @@ public class ApiClientImpl implements Action1, ApiClient { }.getType(); Type questContentListType = new TypeToken>() { }.getType(); - Type petListType = new TypeToken>() { + Type petListType = new TypeToken>() { }.getType(); - Type mountListType = new TypeToken>() { + Type mountListType = new TypeToken>() { }.getType(); //Exclusion strategy needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121 @@ -227,8 +226,8 @@ public class ApiClientImpl implements Action1, ApiClient { .setExclusionStrategies(new CheckListItemExcludeStrategy()) .setExclusionStrategies(new ExclusionStrategy() { @Override - public boolean shouldSkipField(FieldAttributes f) { - return f.getDeclaredClass().equals(ModelAdapter.class); + public boolean shouldSkipField(FieldAttributes field) { + return field.getDeclaredClass().equals(ModelAdapter.class); } @Override @@ -355,18 +354,20 @@ public class ApiClientImpl implements Action1, ApiClient { habitRPGUser.setRewards(sortTasks(tasks.tasks, habitRPGUser.getTasksOrder().getRewards())); for (Task task : tasks.tasks.values()) { switch (task.getType()) { - case "habit": + case Task.TYPE_HABIT: habitRPGUser.getHabits().add(task); break; - case "daily": + case Task.TYPE_DAILY: habitRPGUser.getDailys().add(task); break; - case "todo": + case Task.TYPE_TODO: habitRPGUser.getTodos().add(task); break; - case "reward": + case Task.TYPE_REWARD: habitRPGUser.getRewards().add(task); break; + default: + break; } } @@ -400,10 +401,7 @@ public class ApiClientImpl implements Action1, ApiClient { } private void showConnectionProblemDialog(final int resourceTitleString, final int resourceMessageString) { - Activity currentActivity = HabiticaApplication.currentActivity; - if (currentActivity != null) { - showConnectionProblemDialog(currentActivity.getString(resourceTitleString), currentActivity.getString(resourceMessageString)); - } + showConnectionProblemDialog(context.getString(resourceTitleString), context.getString(resourceMessageString)); } private void showConnectionProblemDialog(final String resourceTitleString, final String resourceMessageString) { @@ -447,7 +445,7 @@ public class ApiClientImpl implements Action1, ApiClient { @Override public void setLanguageCode(String languageCode) { - this.languageCode = languageCode; + this.languageCode = languageCode; } @Override @@ -498,7 +496,7 @@ public class ApiClientImpl implements Action1, ApiClient { } @Override - public Observable validateSubscription(SubscriptionValidationRequest request){ + public Observable validateSubscription(SubscriptionValidationRequest request) { return apiService.validateSubscription(request).compose(configureApiCallObserver()); } @@ -669,7 +667,7 @@ public class ApiClientImpl implements Action1, ApiClient { } @Override - public Observable postGroupChat(String groupId, HashMap message) { + public Observable postGroupChat(String groupId, Map message) { return apiService.postGroupChat(groupId, message).compose(configureApiCallObserver()); } @@ -730,7 +728,7 @@ public class ApiClientImpl implements Action1, ApiClient { @Override public Observable forceStartQuest(String groupId, Group group) { - return apiService.forceStartQuest(groupId,group).compose(configureApiCallObserver()); + return apiService.forceStartQuest(groupId, group).compose(configureApiCallObserver()); } @Override @@ -759,17 +757,17 @@ public class ApiClientImpl implements Action1, ApiClient { } @Override - public Observable GetMember(String memberId) { - return apiService.GetMember(memberId).compose(configureApiCallObserver()); + public Observable getMember(String memberId) { + return apiService.getMember(memberId).compose(configureApiCallObserver()); } @Override - public Observable GetMemberAchievements(String memberId) { - return apiService.GetMemberAchievements(memberId).compose(configureApiCallObserver()); + public Observable getMemberAchievements(String memberId) { + return apiService.getMemberAchievements(memberId).compose(configureApiCallObserver()); } @Override - public Observable postPrivateMessage(HashMap messageDetails) { + public Observable postPrivateMessage(Map messageDetails) { return apiService.postPrivateMessage(messageDetails).compose(configureApiCallObserver()); } @@ -823,7 +821,7 @@ public class ApiClientImpl implements Action1, ApiClient { return apiService.readNotification(notificationId).compose(configureApiCallObserver()); } - public ObservablegetContent() { + public Observable getContent() { return apiService.getContent(languageCode).compose(configureApiCallObserver()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java index 447a22c72..0a1cb293a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ContentCache.java @@ -1,5 +1,7 @@ package com.habitrpg.android.habitica; +import android.support.annotation.Nullable; + import com.magicmicky.habitrpgwrapper.lib.api.ApiClient; import com.magicmicky.habitrpgwrapper.lib.models.QuestBoss; import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent; @@ -11,11 +13,14 @@ import com.raizlabs.android.dbflow.sql.language.Where; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import rx.Observable; public class ContentCache { + private static final String CONTENT_TYPE_ITEM = "item"; + private static final String CONTENT_TYPE_QUEST = "quest"; private ApiClient apiClient; @@ -23,36 +28,31 @@ public class ContentCache { this.apiClient = apiClient; } - public void GetQuestContent(final String key, final QuestContentCallback cb) { - final QuestContent quest = new Select().from(QuestContent.class).where(Condition.column("key").eq(key)).querySingle(); + public void getQuestContent(final String key, final QuestContentCallback cb) { + final QuestContent quest = new Select().from(QuestContent.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle(); if (quest != null) { - quest.boss = new Select().from(QuestBoss.class).where(Condition.column("key").eq(key)).querySingle(); - cb.GotQuest(quest); + quest.boss = new Select().from(QuestBoss.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle(); + cb.gotQuest(quest); } else { - getContentAndSearchFor("quest", key, new GotContentEntryCallback() { - @Override - public void GotObject(QuestContent obj) { - cb.GotQuest(obj); - } - }); + getContentAndSearchFor(CONTENT_TYPE_QUEST, key, cb::gotQuest); } } - public void GetItemData(final String key, final GotContentEntryCallback gotEntry) { - final ItemData itemData = new Select().from(ItemData.class).where(Condition.column("key").eq(key)).querySingle(); + public void getItemData(final String key, final GotContentEntryCallback gotEntry) { + final ItemData itemData = new Select().from(ItemData.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle(); if (itemData != null) { - gotEntry.GotObject(itemData); + gotEntry.gotObject(itemData); } else { - getContentAndSearchFor("item", key, gotEntry); + getContentAndSearchFor(CONTENT_TYPE_ITEM, key, gotEntry); } } - public void GetItemDataList(final List keysToSearch, GotContentEntryCallback> gotEntries) { + public void getItemDataList(final List keysToSearch, GotContentEntryCallback> gotEntries) { - Condition.In keyCondition = Condition.column("key").in(""); + Condition.In keyCondition = Condition.column(ItemData.UNIQUE_IDENTIFIER).in(""); for (String item : keysToSearch) { keyCondition = keyCondition.and(item); @@ -63,9 +63,9 @@ public class ContentCache { List items = query.queryList(); if (items != null && items.size() == keysToSearch.size()) { - gotEntries.GotObject(items); + gotEntries.gotObject(items); } else { - getContentAndSearchForList("item", keysToSearch, gotEntries); + getContentAndSearchForList(keysToSearch, gotEntries); } } @@ -74,23 +74,23 @@ public class ContentCache { .subscribe(contentResult -> { switch (typeOfSearch) { - case "quest": { + case CONTENT_TYPE_QUEST: { Collection questList = contentResult.quests; for (QuestContent quest : questList) { if (quest.getKey().equals(searchKey)) { - gotEntry.GotObject((T) quest); + gotEntry.gotObject((T) quest); } } break; } - case "item": { + case CONTENT_TYPE_ITEM: { T searchedItem = null; - if (searchKey.equals("potion")) { + if ("potion".equals(searchKey)) { searchedItem = (T) contentResult.potion; - } else if (searchKey == "armoire") { + } else if ("armoire".equals(searchKey)) { searchedItem = (T) contentResult.armoire; } else { Collection itemList = contentResult.gear.flat; @@ -102,35 +102,37 @@ public class ContentCache { } } - gotEntry.GotObject(searchedItem); + gotEntry.gotObject(searchedItem); break; } + default: + break; } }, throwable -> { }); } - private void getContentAndSearchForList(final String typeOfSearch, final List searchKeys, final GotContentEntryCallback> gotEntry) { + private void getContentAndSearchForList(final List searchKeys, final GotContentEntryCallback> gotEntry) { List resultList = new ArrayList<>(); apiClient.getContent() .flatMap(contentResult -> { - List itemList = new ArrayList(contentResult.gear.flat); + List itemList = new ArrayList<>(contentResult.gear.flat); itemList.add(contentResult.potion); itemList.add(contentResult.armoire); return Observable.from(itemList); }) .filter(item -> searchKeys.contains(item.key)) .subscribe(resultList::add, throwable -> { - }, () -> gotEntry.GotObject(resultList)); + }, () -> gotEntry.gotObject(resultList)); } public interface GotContentEntryCallback { - void GotObject(T obj); + void gotObject(@Nullable T obj); } public interface QuestContentCallback { - void GotQuest(QuestContent content); + void gotQuest(QuestContent content); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java index 49a3c9846..fb71d61a5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabitDatabase.java @@ -8,4 +8,8 @@ public class HabitDatabase { public static final String NAME = "Habitica"; public static final int VERSION = 34; + + public HabitDatabase() { + super(); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java index 719c7694d..f84c8a781 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java @@ -1,24 +1,5 @@ package com.habitrpg.android.habitica; -import com.amplitude.api.Amplitude; -import com.facebook.FacebookSdk; -import com.facebook.drawee.backends.pipeline.Fresco; -import com.habitrpg.android.habitica.components.AppComponent; -import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy; -import com.habitrpg.android.habitica.ui.activities.IntroActivity; -import com.habitrpg.android.habitica.ui.activities.LoginActivity; -import com.habitrpg.android.habitica.ui.activities.SetupActivity; -import com.habitrpg.android.habitica.ui.activities.TaskFormActivity; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.raizlabs.android.dbflow.config.FlowManager; -import com.squareup.leakcanary.LeakCanary; -import com.squareup.leakcanary.RefWatcher; - -import org.solovyev.android.checkout.Billing; -import org.solovyev.android.checkout.Cache; -import org.solovyev.android.checkout.Checkout; -import org.solovyev.android.checkout.PurchaseVerifier; - import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,19 +7,13 @@ import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.ShortcutInfo; -import android.content.pm.ShortcutManager; import android.content.res.Resources; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; -import android.graphics.drawable.Icon; -import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; import android.support.multidex.MultiDexApplication; import android.util.Log; @@ -62,7 +37,6 @@ import org.solovyev.android.checkout.PurchaseVerifier; import java.io.File; import java.lang.reflect.Field; -import java.util.Arrays; import javax.inject.Inject; @@ -84,14 +58,12 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { /** * For better performance billing class should be used as singleton */ - @NonNull private Billing billing; /** * Application wide {@link Checkout} instance (can be used * anywhere in the app). * This instance contains all available products in the app. */ - @NonNull private Checkout checkout; public static HabiticaBaseApplication getInstance(Context context) { @@ -108,7 +80,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { } } - private static void setFinalStatic(Field field, Object newValue) throws NoSuchFieldException, IllegalAccessException { + private static void setFinalStatic(Field field, @Nullable Object newValue) throws NoSuchFieldException, IllegalAccessException { field.setAccessible(true); field.set(null, newValue); } @@ -264,8 +236,9 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { @Override public void onActivityDestroyed(Activity activity) { - if (currentActivity == activity) + if (currentActivity.equals(activity)) { currentActivity = null; + } } }); } @@ -336,9 +309,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { @Override public File getDatabasePath(String name) { - File dbFile = new File(getExternalFilesDir(null), "HabiticaDatabase/" + name); - //Crashlytics.setString("Database File", dbFile.getAbsolutePath()); - return dbFile; + return new File(getExternalFilesDir(null), "HabiticaDatabase/" + name); } private void createBillingAndCheckout() { @@ -355,6 +326,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { return Billing.newCache(); } + @NonNull @Override public PurchaseVerifier getPurchaseVerifier() { return new HabiticaPurchaseVerifier(HabiticaBaseApplication.this, lazyApiHelper.get()); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java index c1e32a78c..ebb1c2e82 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.helpers; +import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; @@ -25,31 +26,27 @@ import java.util.Map; */ public class PopupNotificationsManager { - private static PopupNotificationsManager instance; private Map seenNotifications; + @Nullable private ApiClient apiClient; private Context context; // @TODO: A queue for displaying alert dialogues - private PopupNotificationsManager(ApiClient apiClient, Context context) { - this.apiClient = apiClient; + public PopupNotificationsManager(Context context) { this.seenNotifications = new HashMap<>(); this.context = context.getApplicationContext(); } - public static PopupNotificationsManager getInstance(ApiClient apiHelper, Context context) { - if (instance == null) { - instance = new PopupNotificationsManager(apiHelper, context); - } - return instance; + public void setApiClient(@Nullable ApiClient apiClient) { + this.apiClient = apiClient; } - public Boolean displayNotification(Notification notification) { + Boolean displayNotification(Notification notification) { String title = notification.data.message; String youEarnedMessage = ""; - LayoutInflater factory = LayoutInflater.from(HabiticaApplication.currentActivity); + LayoutInflater factory = LayoutInflater.from(context); final View view = factory.inflate(R.layout.dialog_login_incentive, null); SimpleDraweeView imageView = (SimpleDraweeView) view.findViewById(R.id.imageView); @@ -89,17 +86,14 @@ public class PopupNotificationsManager { final AlertDialog dialog = builder.create(); dialog.show(); - confirmButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (apiClient != null) { - // @TODO: This should be handled somewhere else? MAybe we notifiy via event - apiClient.readNotificaiton(notification.getId()) - .subscribe(next -> {}, throwable -> {}); - } - - dialog.hide(); + confirmButton.setOnClickListener(view1 -> { + if (apiClient != null) { + // @TODO: This should be handled somewhere else? MAybe we notifiy via event + apiClient.readNotificaiton(notification.getId()) + .subscribe(next -> {}, throwable -> {}); } + + dialog.hide(); }); return true; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.java index deb040899..85413e6a6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundFileLoader.java @@ -1,5 +1,8 @@ package com.habitrpg.android.habitica.helpers; +import android.content.Context; +import android.support.annotation.Nullable; + import com.habitrpg.android.habitica.HabiticaApplication; import java.io.File; @@ -18,10 +21,12 @@ import rx.schedulers.Schedulers; // based on http://stackoverflow.com/questions/29838565/downloading-files-using-okhttp-okio-and-rxjava public class SoundFileLoader { - OkHttpClient client; + private final Context context; + private OkHttpClient client; - public SoundFileLoader() { + public SoundFileLoader(Context context) { client = new OkHttpClient(); + this.context = context; } public Observable> download(List files) { @@ -70,8 +75,14 @@ public class SoundFileLoader { .map(ArrayList::new); } + @Nullable private String getExternalCacheDir() { - return HabiticaApplication.getInstance(HabiticaApplication.currentActivity).getExternalCacheDir().getPath(); + File cacheDir = HabiticaApplication.getInstance(context).getExternalCacheDir(); + if (cacheDir != null) { + return cacheDir.getPath(); + } else { + return null; + } } public String getFullAudioFilePath(SoundFile soundFile) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java index d375ae2d7..d6de39609 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SoundManager.java @@ -1,8 +1,6 @@ package com.habitrpg.android.habitica.helpers; -import com.habitrpg.android.habitica.HabiticaApplication; - -import android.media.MediaPlayer; +import com.habitrpg.android.habitica.HabiticaBaseApplication; import java.util.ArrayList; import java.util.HashMap; @@ -29,12 +27,10 @@ public class SoundManager { SoundFileLoader soundFileLoader; private String soundTheme; - private MediaPlayer mp = new MediaPlayer(); - private HashMap loadedSoundFiles; public SoundManager() { - HabiticaApplication.getInstance(HabiticaApplication.currentActivity).getComponent().inject(this); + HabiticaBaseApplication.getComponent().inject(this); loadedSoundFiles = new HashMap<>(); } @@ -84,7 +80,7 @@ public class SoundManager { loadedSoundFiles.put(type, file); file.play(); - }, throwable -> throwable.printStackTrace()); + }, Throwable::printStackTrace); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.java index 22a15e921..3d3be6006 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.modules; +import com.habitrpg.android.habitica.helpers.PopupNotificationsManager; import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy; import com.magicmicky.habitrpgwrapper.lib.api.ApiClient; import com.habitrpg.android.habitica.ContentCache; @@ -33,8 +34,14 @@ public class ApiModule { @Provides @Singleton - public ApiClient providesApiHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, Context context) { - return new com.habitrpg.android.habitica.ApiClientImpl(gsonConverter, hostConfig, crashlyticsProxy, context); + public PopupNotificationsManager providesPopupNotificationsManager(Context context) { + return new PopupNotificationsManager(context); + } + + @Provides + @Singleton + public ApiClient providesApiHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, PopupNotificationsManager popupNotificationsManager, Context context) { + return new com.habitrpg.android.habitica.ApiClientImpl(gsonConverter, hostConfig, crashlyticsProxy, popupNotificationsManager, context); } @Provides diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.java index 127b83370..c6efeee54 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/AppModule.java @@ -45,7 +45,7 @@ public class AppModule { @Provides @Named("UserID") public String providesUserID(SharedPreferences sharedPreferences) { - return sharedPreferences.getString(application.getString(R.string.SP_userID), null); + return sharedPreferences.getString(application.getString(R.string.SP_userID), ""); } @Provides @@ -60,8 +60,8 @@ public class AppModule { } @Provides - public SoundFileLoader providesSoundFileLoader() { - return new SoundFileLoader(); + public SoundFileLoader providesSoundFileLoader(Context context) { + return new SoundFileLoader(context); } @Provides diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.java index 1b31e4020..1d8f925a0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/MaxHeightLinearLayout.java @@ -17,6 +17,7 @@ public class MaxHeightLinearLayout extends LinearLayout { private final float defaultHeight = 0.9f; private float maxHeight; + private DisplayMetrics displaymetrics = new DisplayMetrics(); public MaxHeightLinearLayout(Context context) { super(context); @@ -58,9 +59,8 @@ public class MaxHeightLinearLayout extends LinearLayout { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (HabiticaApplication.currentActivity != null) { - DisplayMetrics displaymetrics = new DisplayMetrics(); HabiticaApplication.currentActivity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); - int height = (int) ((int) displaymetrics.heightPixels * maxHeight); + int height = (int) (displaymetrics.heightPixels * maxHeight); heightMeasureSpec = Math.min(heightMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.AT_MOST)); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java index 042d0b57b..e8982f5bb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java @@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.interactors.DisplayItemDropUseCase; import com.habitrpg.android.habitica.interactors.HabitScoreUseCase; import com.habitrpg.android.habitica.interactors.NotifyUserUseCase; import com.habitrpg.android.habitica.interactors.TodoCheckUseCase; -import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallegeDetailDialogHolder; +import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeDetailDialogHolder; import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeTasksRecyclerViewFragment; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; import com.habitrpg.android.habitica.ui.helpers.UiUtils; @@ -337,7 +337,7 @@ public class ChallengeDetailActivity extends BaseActivity { @OnClick(R.id.btn_show_more) void onShowMore() { - ChallegeDetailDialogHolder.showDialog(ChallengeDetailActivity.this, ChallengeDetailActivity.this.apiClient, + ChallengeDetailDialogHolder.showDialog(ChallengeDetailActivity.this, ChallengeDetailActivity.this.apiClient, HabiticaApplication.User, challenge, challenge1 -> { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java index 7ac50259f..956b00a0a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java @@ -124,7 +124,7 @@ public class FullProfileActivity extends BaseActivity { setTitle(R.string.profile_loading_data); - apiClient.GetMember(this.userId) + apiClient.getMember(this.userId) .subscribe(this::updateView, throwable -> { @@ -248,7 +248,7 @@ public class FullProfileActivity extends BaseActivity { mountsTamedCount.setText(String.valueOf(user.getMountsTamedCount())); // Load the members achievements now - apiClient.GetMemberAchievements(this.userId) + apiClient.getMemberAchievements(this.userId) .subscribe(this::fillAchievements, throwable -> { @@ -375,7 +375,7 @@ public class FullProfileActivity extends BaseActivity { outfitList.add(outfit.getShield()); outfitList.add(outfit.getWeapon()); - contentCache.GetItemDataList(outfitList, gotEntries); + contentCache.getItemDataList(outfitList, gotEntries); } public void gotGear(List itemDataList, HabitRPGUser user) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementAdapter.java index ce4a31414..0356a14d4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/AchievementAdapter.java @@ -32,7 +32,7 @@ public class AchievementAdapter extends RecyclerView.Adapter itemList; - public void setItemList(List itemList) { + public void setItemList(List itemList) { this.itemList = itemList; this.notifyDataSetChanged(); } @@ -93,7 +93,7 @@ public class AchievementAdapter extends RecyclerView.Adapter>) subscriber -> { - contentCache.GetItemDataList(itemKeys, obj -> { + contentCache.getItemDataList(itemKeys, obj -> { ArrayList buyableItems = new ArrayList<>(); for (ItemData item : obj) { Task reward = new Task(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java index 61fe7ba72..83888b56f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java @@ -226,7 +226,7 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout }, throwable -> { }); - UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); + UiUtils.dismissKeyboard(getActivity()); } // If the ChatList is Tavern, we're able to toggle the sleep-mode diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java index 36012523b..d72636b1f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java @@ -130,7 +130,7 @@ public class InboxMessageListFragment extends BaseMainFragment }, throwable -> { }); - UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); + UiUtils.dismissKeyboard(getActivity()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java index 0c25b4025..c351a77fa 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java @@ -64,7 +64,7 @@ public class TavernFragment extends BaseMainFragment { TavernFragment.this.tabLayout.setupWithViewPager(TavernFragment.this.viewPager); } - contentCache.GetQuestContent(group.quest.key, content -> { + contentCache.getQuestContent(group.quest.key, content -> { if (questInfoFragment != null) { questInfoFragment.setQuestContent(content); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallegeDetailDialogHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java similarity index 95% rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallegeDetailDialogHolder.java rename to Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java index 7e9e39590..e9a2cf76c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallegeDetailDialogHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java @@ -11,7 +11,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.commands.OpenFullProfileCommand; import com.habitrpg.android.habitica.ui.activities.ChallengeDetailActivity; @@ -36,7 +35,7 @@ import butterknife.ButterKnife; import butterknife.OnClick; import rx.functions.Action1; -public class ChallegeDetailDialogHolder { +public class ChallengeDetailDialogHolder { @BindView(R.id.challenge_not_joined_header) LinearLayout notJoinedHeader; @@ -78,7 +77,7 @@ public class ChallegeDetailDialogHolder { private Activity context; - private ChallegeDetailDialogHolder(View view, Activity context) { + private ChallengeDetailDialogHolder(View view, Activity context) { this.context = context; ButterKnife.bind(this, view); } @@ -87,12 +86,12 @@ public class ChallegeDetailDialogHolder { Action1 challengeJoinedAction, Action1 challengeLeftAction) { View dialogLayout = activity.getLayoutInflater().inflate(R.layout.dialog_challenge_detail, null); - ChallegeDetailDialogHolder challegeDetailDialogHolder = new ChallegeDetailDialogHolder(dialogLayout, activity); + ChallengeDetailDialogHolder challengeDetailDialogHolder = new ChallengeDetailDialogHolder(dialogLayout, activity); AlertDialog.Builder builder = new AlertDialog.Builder(activity) .setView(dialogLayout); - challegeDetailDialogHolder.bind(builder.show(), apiClient, user, challenge, challengeJoinedAction, challengeLeftAction); + challengeDetailDialogHolder.bind(builder.show(), apiClient, user, challenge, challengeJoinedAction, challengeLeftAction); } public void bind(AlertDialog dialog, ApiClient apiClient, @Nullable HabitRPGUser user, Challenge challenge, @@ -279,7 +278,7 @@ public class ChallegeDetailDialogHolder { Bundle bundle = new Bundle(); bundle.putString(ChallengeDetailActivity.CHALLENGE_ID, challenge.id); - Intent intent = new Intent(HabiticaApplication.currentActivity, ChallengeDetailActivity.class); + Intent intent = new Intent(context, ChallengeDetailActivity.class); intent.putExtras(bundle); //intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); context.startActivity(intent); @@ -308,7 +307,7 @@ public class ChallegeDetailDialogHolder { void leaveChallenge() { new AlertDialog.Builder(context) .setTitle(context.getString(R.string.challenge_leave_title)) - .setMessage(String.format(context.getString(R.string.challenge_leave_text), challenge.name)) + .setMessage(context.getString(R.string.challenge_leave_text, challenge.name)) .setPositiveButton(context.getString(R.string.yes), (dialog, which) -> showRemoveTasksDialog(keepTasks -> this.apiClient.leaveChallenge(challenge.id, new LeaveChallengeBody(keepTasks)) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java index 0f0abbcb5..2e702176d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java @@ -124,7 +124,7 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr challengeFilterLayout.setVisibility(withFilter?View.VISIBLE:View.GONE); challengeFilterLayout.setClickable(true); - challengeFilterLayout.setOnClickListener(view -> ChallegeFilterDialogHolder.showDialog(HabiticaApplication.currentActivity, currentChallengesInView, lastFilterOptions, filterOptions -> { + challengeFilterLayout.setOnClickListener(view -> ChallegeFilterDialogHolder.showDialog(getActivity(), currentChallengesInView, lastFilterOptions, filterOptions -> { challengeAdapter.setFilterByGroups(filterOptions); this.lastFilterOptions = filterOptions; })); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java index 97a1a225c..d60b09c5f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java @@ -148,7 +148,7 @@ public class ChallengesOverviewFragment extends BaseMainFragment { public void onEvent(ShowChallengeDetailDialogCommand cmd) { Challenge challenge = new Select().from(Challenge.class).where(Condition.column("id").is(cmd.challengeId)).querySingle(); - ChallegeDetailDialogHolder.showDialog(HabiticaApplication.currentActivity, apiClient, user, challenge, challenge1 -> { + ChallengeDetailDialogHolder.showDialog(getActivity(), apiClient, user, challenge, challenge1 -> { // challenge joined userChallengesFragment.addItem(challenge1); availableChallengesFragment.updateItem(challenge1); @@ -164,10 +164,10 @@ public class ChallengesOverviewFragment extends BaseMainFragment { Bundle bundle = new Bundle(); bundle.putString(ChallengeDetailActivity.CHALLENGE_ID, cmd.challengeId); - Intent intent = new Intent(HabiticaApplication.currentActivity, ChallengeDetailActivity.class); + Intent intent = new Intent(getActivity(), ChallengeDetailActivity.class); intent.putExtras(bundle); //intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - HabiticaApplication.currentActivity.startActivity(intent); + getActivity().startActivity(intent); } public boolean onHandleBackPressed() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java index ae5c5fb4b..26e60e8fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java @@ -125,7 +125,7 @@ public class PartyFragment extends BaseMainFragment { PartyFragment.this.activity.supportInvalidateOptionsMenu(); if (group != null && group.quest != null && group.quest.key != null && !group.quest.key.isEmpty()) { - contentCache.GetQuestContent(group.quest.key, content -> { + contentCache.getQuestContent(group.quest.key, content -> { if (groupInformationFragment != null) { groupInformationFragment.setQuestContent(content); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ViewHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ViewHelper.java index b30621938..00453a1c1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ViewHelper.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/ViewHelper.java @@ -4,6 +4,8 @@ import android.annotation.TargetApi; import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.support.v4.graphics.drawable.DrawableCompat; +import android.support.v4.view.ViewCompat; import android.support.v7.widget.AppCompatButton; import android.view.View; import android.widget.Button; @@ -13,13 +15,10 @@ import android.widget.ImageView; public class ViewHelper { public static void SetBackgroundTint(Button b, int tint) { - ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{tint}); - if (b instanceof AppCompatButton) { + ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{tint}); AppCompatButton compatButton = (AppCompatButton) b; - - compatButton.setSupportBackgroundTintList(csl); - + ViewCompat.setBackgroundTintList(compatButton, csl); return; } @@ -29,7 +28,7 @@ public class ViewHelper { } @TargetApi(21) - public static void SetBackgroundTintV21(Button b, int tint) { + private static void SetBackgroundTintV21(Button b, int tint) { ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{tint}); @@ -44,7 +43,7 @@ public class ViewHelper { v.getBackground().setColorFilter(tint, PorterDuff.Mode.SRC_OVER); } - public static void SetBackgroundTint(CheckBox c, int tint) { + static void SetBackgroundTint(CheckBox c, int tint) { if (c != null) { c.setBackgroundColor(tint); } diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java index 86ed40c2f..3ee885371 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java @@ -1,5 +1,7 @@ package com.magicmicky.habitrpgwrapper.lib.api; +import android.support.annotation.Nullable; + import com.habitrpg.android.habitica.ErrorResponse; import com.magicmicky.habitrpgwrapper.lib.models.AchievementResult; import com.magicmicky.habitrpgwrapper.lib.models.Challenge; @@ -28,10 +30,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList; -import android.support.annotation.Nullable; - import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -86,15 +85,15 @@ public interface ApiClient { Observable> postTaskNewPosition(String id, String position); - Observable scoreChecklistItem(String taskId, String itemId); + Observable scoreChecklistItem(String taskId, String itemId); Observable createItem(Task item); Observable> createTasks(List tasks); - Observable updateTask(String id, Task item); + Observable updateTask(String id, Task item); - Observable deleteTask( String id); + Observable deleteTask(String id); Observable createTag(Tag tag); @@ -112,9 +111,9 @@ public interface ApiClient { Observable revive(); - Observable useSkill( String skillName, String targetType, String targetId); + Observable useSkill(String skillName, String targetType, String targetId); - Observable useSkill( String skillName, String targetType); + Observable useSkill(String skillName, String targetType); Observable changeClass(); @@ -130,30 +129,30 @@ public interface ApiClient { Observable getGroup(String groupId); - Observable updateGroup( String id, Group item); + Observable updateGroup(String id, Group item); - Observable> listGroupChat( String groupId); + Observable> listGroupChat(String groupId); Observable joinGroup(String groupId); - Observable leaveGroup( String groupId); + Observable leaveGroup(String groupId); - Observable postGroupChat( String groupId, HashMap message); + Observable postGroupChat(String groupId, Map message); - Observable deleteMessage( String groupId, String messageId); + Observable deleteMessage(String groupId, String messageId); - Observable> getGroupMembers( String groupId, Boolean includeAllPublicFields); + Observable> getGroupMembers(String groupId, Boolean includeAllPublicFields); - Observable> getGroupMembers( String groupId, Boolean includeAllPublicFields, String lastId); + Observable> getGroupMembers(String groupId, Boolean includeAllPublicFields, String lastId); // Like returns the full chat list - Observable likeMessage( String groupId, String mid); + Observable likeMessage(String groupId, String mid); - Observable flagMessage(String groupId, String mid); + Observable flagMessage(String groupId, String mid); Observable seenMessages(String groupId); - Observable inviteToGroup( String groupId, Map inviteData); + Observable inviteToGroup(String groupId, Map inviteData); Observable rejectGroupInvite(String groupId); @@ -161,13 +160,13 @@ public interface ApiClient { Observable rejectQuest(String groupId); - Observable cancelQuest( String groupId); + Observable cancelQuest(String groupId); - Observable forceStartQuest( String groupId, Group group); + Observable forceStartQuest(String groupId, Group group); - Observable inviteToQuest( String groupId,String questKey); + Observable inviteToQuest(String groupId,String questKey); - Observable abortQuest( String groupId); + Observable abortQuest(String groupId); Observable leaveQuest(String groupId); @@ -176,16 +175,16 @@ public interface ApiClient { Observable changeCustomDayStart(Map updateObject); //Members URL - Observable GetMember(String memberId); + Observable getMember(String memberId); - Observable GetMemberAchievements(String memberId); + Observable getMemberAchievements(String memberId); - Observable postPrivateMessage(HashMap messageDetails); + Observable postPrivateMessage(Map messageDetails); Observable fetchShopInventory(String identifier); //Push notifications - Observable addPushDevice( Map pushDeviceData); + Observable addPushDevice(Map pushDeviceData); Observable deletePushDevice(String regId); @@ -193,7 +192,7 @@ public interface ApiClient { Observable> getUserChallenges(); - Observable getChallengeTasks( String challengeId); + Observable getChallengeTasks(String challengeId); Observable getChallenge(String challengeId); @@ -214,7 +213,7 @@ public interface ApiClient { boolean hasAuthenticationKeys(); - Observable retrieveUser(boolean b); + Observable retrieveUser(boolean withTasks); Observable.Transformer, T> configureApiCallObserver(); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index d442c23fa..b7fc47b8a 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -30,7 +30,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -194,7 +193,7 @@ public interface ApiService { Observable> leaveGroup(@Path("gid") String groupId); @POST("groups/{gid}/chat") - Observable> postGroupChat(@Path("gid") String groupId, @Body HashMap message); + Observable> postGroupChat(@Path("gid") String groupId, @Body Map message); @DELETE("groups/{gid}/chat/{messageId}") Observable> deleteMessage(@Path("gid") String groupId, @Path("messageId") String messageId); @@ -253,13 +252,13 @@ public interface ApiService { //Members URL @GET("members/{mid}") - Observable> GetMember(@Path("mid") String memberId); + Observable> getMember(@Path("mid") String memberId); @GET("members/{mid}/achievements") - Observable> GetMemberAchievements(@Path("mid") String memberId); + Observable> getMemberAchievements(@Path("mid") String memberId); @POST("members/send-private-message") - Observable> postPrivateMessage(@Body HashMap messageDetails); + Observable> postPrivateMessage(@Body Map messageDetails); @GET("shops/{identifier}") Observable> fetchShopInventory(@Path("identifier") String identifier); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java index 606a85e86..cde7c5c2f 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/Server.java @@ -10,21 +10,22 @@ public class Server { this(addr, true); } - public Server(String addr, boolean attachSuffix) { + private Server(String addr, boolean attachSuffix) { if (attachSuffix) { - if (addr.endsWith("/api/v3") || addr.endsWith("/api/v3/")) + if (addr.endsWith("/api/v3") || addr.endsWith("/api/v3/")) { this.addr = addr; - else if (addr.endsWith("/")) + } else if (addr.endsWith("/")) { this.addr = addr + "api/v3/"; - else + } else { this.addr = addr + "/api/v3/"; + } } else { this.addr = addr; } } - public Server(Server s) { - this.addr = s.toString(); + public Server(Server server) { + this.addr = server.toString(); } @Override diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java index 79c619d03..fc4950dd5 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Group.java @@ -49,8 +49,12 @@ public class Group extends BaseModel { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } Group group = (Group) o; diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java index e9ae07230..5c3f0eb65 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/Items.java @@ -30,7 +30,9 @@ public class Items extends BaseModel { HashMap pets; HashMap mounts; @Column - private String currentMount, currentPet; + private String currentMount; + @Column + private String currentPet; @Column private int lastDrop_count; @Column diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java index 158431e54..4a27a4078 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/tasks/ItemData.java @@ -13,6 +13,8 @@ import com.raizlabs.android.dbflow.structure.BaseModel; */ @Table(databaseName = HabitDatabase.NAME) public class ItemData extends BaseModel { + public static final String UNIQUE_IDENTIFIER = "key"; + @Column public double value; @Column diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManagerTest.java b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManagerTest.java index 488970f81..f4be83c73 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManagerTest.java +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManagerTest.java @@ -45,6 +45,7 @@ public class PopupNotificationsManagerTest { public String username; public final String password = "password"; private Context context; + private PopupNotificationsManager popupNotificationsManager; @Before public void setUp() { @@ -53,14 +54,14 @@ public class PopupNotificationsManagerTest { BuildConfig.PORT, "", ""); + popupNotificationsManager =new PopupNotificationsManager(context); - apiClient = new ApiClientImpl(ApiClientImpl.createGsonFactory(), hostConfig, new EmptyCrashlyticsProxy(), context); + apiClient = new ApiClientImpl(ApiClientImpl.createGsonFactory(), hostConfig, new EmptyCrashlyticsProxy(), popupNotificationsManager, context); } @Test public void itDoesNothingWhenNotificationsListIsEmpty() { List notifications = new ArrayList<>(); - PopupNotificationsManager popupNotificationsManager = PopupNotificationsManager.getInstance(apiClient, context); popupNotificationsManager.showNotificationDialog(notifications); AlertDialog alert =