From 7129244017ebaffa80bf84012f389cc65217c1c6 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Tue, 11 Sep 2018 21:04:41 -0500 Subject: [PATCH] Only reinit collection when needed, Fixes #4938 --- .../java/com/ichi2/anki/AnkiActivity.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.java b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.java index 2b50835c51b8..848f30140a65 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.java +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.java @@ -36,6 +36,8 @@ import com.ichi2.libanki.Collection; import com.ichi2.themes.Themes; +import java.util.concurrent.atomic.AtomicBoolean; + import timber.log.Timber; public class AnkiActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks, @@ -44,6 +46,15 @@ public class AnkiActivity extends AppCompatActivity implements LoaderManager.Loa public final int SIMPLE_NOTIFICATION_ID = 0; public static final int REQUEST_REVIEW = 901; + /** Do we need to notify callbacks from the {@link #onLoadFinished(Loader, Collection)} method? */ + private final AtomicBoolean mNotifyLoaderCallbacks = new AtomicBoolean(true); + + /** + * Is the collection initialized? if this is false, you need to reinitialize + * From MVP template https://github.com/benoitletondor/Android-Studio-MVP-template/blob/master/MVPBoilerplate/root/src/app_package/classes/BaseActivity.java.ftl#L58 + */ + protected AtomicBoolean mNeedToInitializeCollection = new AtomicBoolean(true); + private DialogHandler mHandler = new DialogHandler(this); // custom tabs @@ -64,6 +75,11 @@ protected void onCreate(Bundle savedInstanceState) { protected void onStart() { super.onStart(); mCustomTabActivityHelper.bindCustomTabsService(this); + if (mNeedToInitializeCollection.get()) { + Timber.d("Still need to initialize collection with callbacks"); + mNotifyLoaderCallbacks.set(true); + } + mNeedToInitializeCollection.set(false); } @Override @@ -280,7 +296,10 @@ public Loader onCreateLoader(int id, Bundle args) { public void onLoadFinished(Loader loader, Collection col) { hideProgressBar(); if (col != null && colIsOpen()) { - onCollectionLoaded(col); + if (mNotifyLoaderCallbacks.compareAndSet(true, false)) { + Timber.d("Callbacks need notification, calling onCollectionLoaded()"); + onCollectionLoaded(col); + } } else { onCollectionLoadError(); } @@ -289,7 +308,7 @@ public void onLoadFinished(Loader loader, Collection col) { @Override public void onLoaderReset(Loader arg0) { - // We don't currently retain any references, so no need to free any data here + mNeedToInitializeCollection.set(true); }