From 4b73aa507700afe95278a0562183970245b56d65 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 13 Mar 2019 16:56:19 -0500 Subject: [PATCH] Fix loading after list setting changes --- .../todoroo/astrid/activity/MainActivity.java | 55 ++++++++++--------- .../astrid/activity/TaskListFragment.java | 7 +-- .../java/org/tasks/intents/TaskIntents.java | 7 +-- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java index f076609fa..aea5fdb8f 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java @@ -6,6 +6,7 @@ package com.todoroo.astrid.activity; +import static com.google.common.base.Strings.isNullOrEmpty; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; import static com.todoroo.astrid.activity.TaskEditFragment.newTaskEditFragment; @@ -38,6 +39,7 @@ import com.todoroo.astrid.timers.TimerControlSet; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import javax.annotation.Nonnull; import javax.inject.Inject; @@ -52,6 +54,7 @@ import org.tasks.fragments.CommentBarFragment; import org.tasks.gtasks.PlayServices; import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; +import org.tasks.intents.TaskIntents; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import org.tasks.receivers.RepeatConfirmationReceiver; @@ -106,7 +109,7 @@ public class MainActivity extends InjectingAppCompatActivity @BindView(R.id.detail) FrameLayout detail; - private CompositeDisposable disposables; + private CompositeDisposable disposables = new CompositeDisposable(); private NavigationDrawerFragment navigationDrawer; private int currentNightMode; @@ -142,6 +145,8 @@ public class MainActivity extends InjectingAppCompatActivity finishActionMode(); } }); + + handleIntent(); } @Override @@ -149,6 +154,8 @@ public class MainActivity extends InjectingAppCompatActivity super.onNewIntent(intent); setIntent(intent); + + handleIntent(); } @Override @@ -190,6 +197,16 @@ public class MainActivity extends InjectingAppCompatActivity } } + private void addDisposable(Disposable disposable) { + assertMainThread(); + + if (disposables.isDisposed()) { + disposables = new CompositeDisposable(disposable); + } else { + disposables.add(disposable); + } + } + private void handleIntent() { Intent intent = getIntent(); @@ -202,16 +219,14 @@ public class MainActivity extends InjectingAppCompatActivity } if (loadFilter || (!openFilter && filter == null)) { - disposables.add( + addDisposable( Single.fromCallable( () -> { - if (loadFilter) { - String filter = intent.getStringExtra(LOAD_FILTER); - intent.removeExtra(LOAD_FILTER); - return defaultFilterProvider.getFilterFromPreference(filter); - } else { - return defaultFilterProvider.getDefaultFilter(); - } + String filter = intent.getStringExtra(LOAD_FILTER); + intent.removeExtra(LOAD_FILTER); + return isNullOrEmpty(filter) + ? defaultFilterProvider.getDefaultFilter() + : defaultFilterProvider.getFilterFromPreference(filter); }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -311,18 +326,9 @@ public class MainActivity extends InjectingAppCompatActivity return; } - disposables = new CompositeDisposable(); - localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver); - disposables.add(playServices.check(this)); - } - - @Override - protected void onResumeFragments() { - super.onResumeFragments(); - - handleIntent(); + addDisposable(playServices.check(this)); } public void restart() { @@ -355,13 +361,10 @@ public class MainActivity extends InjectingAppCompatActivity getTaskEditFragment().save(); } - if (item == null || item instanceof Filter) { - disposables.add( - Single.fromCallable( - () -> item == null ? defaultFilterProvider.getDefaultFilter() : (Filter) item) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::openTaskListFragment)); + if (item == null) { + startActivity(TaskIntents.getTaskListByIdIntent(this, null)); + } else if (item instanceof Filter) { + startActivity(TaskIntents.getTaskListIntent(this, (Filter) item)); } } diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index fedf7256c..127984f00 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -640,12 +640,7 @@ public final class TaskListFragment extends InjectingFragment if (GoogleTaskListSettingsActivity.ACTION_DELETED.equals(action)) { activity.onFilterItemClicked(null); } else if (GoogleTaskListSettingsActivity.ACTION_RELOAD.equals(action)) { - activity - .getIntent() - .putExtra( - MainActivity.OPEN_FILTER, - (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); - activity.recreate(); + activity.onFilterItemClicked(data.getParcelableExtra(MainActivity.OPEN_FILTER)); } } break; diff --git a/app/src/main/java/org/tasks/intents/TaskIntents.java b/app/src/main/java/org/tasks/intents/TaskIntents.java index 920bd5080..07ff6fe05 100644 --- a/app/src/main/java/org/tasks/intents/TaskIntents.java +++ b/app/src/main/java/org/tasks/intents/TaskIntents.java @@ -3,7 +3,6 @@ package org.tasks.intents; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import com.google.common.base.Strings; import com.todoroo.astrid.activity.MainActivity; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.data.Task; @@ -30,12 +29,10 @@ public class TaskIntents { return intent; } - public static Intent getTaskListByIdIntent(Context context, final String filterId) { + public static Intent getTaskListByIdIntent(Context context, @Nullable String filterId) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName(context, MainActivity.class)); - if (!Strings.isNullOrEmpty(filterId)) { - intent.putExtra(MainActivity.LOAD_FILTER, filterId); - } + intent.putExtra(MainActivity.LOAD_FILTER, filterId); return intent; } }