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 0afd18362..05588a48b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java @@ -29,6 +29,7 @@ import com.habitrpg.android.habitica.ui.activities.LoginActivity; 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; @@ -56,6 +57,9 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { @Inject CrashlyticsProxy crashlyticsProxy; private static AppComponent component; + + public RefWatcher refWatcher; + /** * For better performance billing class should be used as singleton */ @@ -123,6 +127,11 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); + if (LeakCanary.isInAnalyzerProcess(this)) { + // This process is dedicated to LeakCanary for heap analysis. + // You should not init your app in this process. + return; + } setupDagger(); crashlyticsProxy.init(this); setupLeakCanary(); @@ -177,10 +186,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication { protected abstract AppComponent initDagger(); private void setupLeakCanary() { - // LeakCanary 1.3.1 has problems on Marshmallow; can remove check once updated with fixes - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - LeakCanary.install(this); - } + refWatcher = LeakCanary.install(this); } private void setupFlowManager() { 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 c8b3439bd..5f3dc0f67 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 @@ -36,7 +36,7 @@ public class PopupNotificationsManager { private PopupNotificationsManager(APIHelper apiHelper, Context context) { this.apiHelper = apiHelper; this.seenNotifications = new HashMap<>(); - this.context = context; + this.context = context.getApplicationContext(); } public static PopupNotificationsManager getInstance(APIHelper apiHelper, Context context) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java index bbf836c1d..2ea8181eb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java @@ -48,7 +48,7 @@ public class TaskAlarmManager { private TaskAlarmManager(Context context) { HabiticaBaseApplication.getComponent().inject(this); - this.context = context; + this.context = context.getApplicationContext(); EventBus.getDefault().register(this); am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 2afcf899f..e1f49b636 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -1,17 +1,16 @@ package com.habitrpg.android.habitica.helpers.notifications; +import com.google.firebase.iid.FirebaseInstanceId; +import com.google.firebase.messaging.RemoteMessage; + +import com.habitrpg.android.habitica.APIHelper; +import com.habitrpg.android.habitica.HabiticaApplication; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; +import com.magicmicky.habitrpgwrapper.lib.models.PushDevice; + import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.util.Log; - -import com.google.firebase.iid.FirebaseInstanceId; -import com.google.firebase.messaging.RemoteMessage; -import com.habitrpg.android.habitica.APIHelper; -import com.habitrpg.android.habitica.HabiticaApplication; -import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback; -import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; -import com.magicmicky.habitrpgwrapper.lib.models.PushDevice; import java.util.HashMap; import java.util.Map; @@ -55,11 +54,11 @@ public class PushNotificationManager { public static PushNotificationManager getInstance(Context context) { if(instance == null) { - instance = new PushNotificationManager(context); + instance = new PushNotificationManager(context.getApplicationContext()); } instance.refreshedToken = instance.sharedPreferences.getString(DEVICE_TOKEN_PREFERENCE_KEY, ""); - instance.context = context; + instance.context = context.getApplicationContext(); return instance; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index d815faf6c..346a9738b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -882,7 +882,10 @@ public class MainActivity extends BaseActivity implements Action1, Ha } private void setTranslatedFragmentTitle(BaseMainFragment fragment){ - if(fragment!= null && fragment.customTitle() != null){ + if (getSupportActionBar() == null) { + return; + } + if(fragment!= null && fragment.isAdded() && fragment.customTitle() != null){ getSupportActionBar().setTitle(fragment.customTitle()); } else if(user != null && user.getProfile() != null){ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java index 6e159cfef..09ed5c951 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/BaseTasksRecyclerViewAdapter.java @@ -19,7 +19,6 @@ import com.raizlabs.android.dbflow.sql.language.Select; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; -import android.app.Activity; import android.content.Context; import android.databinding.ObservableArrayList; import android.support.v7.widget.RecyclerView; @@ -43,7 +42,7 @@ public abstract class BaseTasksRecyclerViewAdapter content; protected List filteredContent; @@ -53,7 +52,7 @@ public abstract class BaseTasksRecyclerViewAdapter(); @@ -99,72 +98,9 @@ public abstract class BaseTasksRecyclerViewAdapter> sleep(); + Observable> sleep(); @POST("user/revive") Observable> revive();