From 4ab3e014fd88aa2ee8d3740bbf366b6eedfbffce Mon Sep 17 00:00:00 2001 From: cgspine Date: Tue, 10 Sep 2019 16:38:21 +0800 Subject: [PATCH] clearAll for latest visit --- .../qmui/arch/QMUIFragmentActivity.java | 1 - .../qmuiteam/qmui/arch/QMUILatestVisit.java | 42 +++++++++++-------- .../record/DefaultLatestVisitStorage.java | 7 ++++ .../arch/record/QMUILatestVisitStorage.java | 2 + 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragmentActivity.java b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragmentActivity.java index 3ed256b1..6d3f17b1 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragmentActivity.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragmentActivity.java @@ -358,7 +358,6 @@ public abstract class QMUIFragmentActivity extends InnerBaseActivity { super.onLayout(changed, left, top, right, bottom); for (int i = 0; i < getChildCount(); i++) { SwipeBackLayout.updateLayoutInSwipeBack(getChildAt(i)); - } } } diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java index 56907dc5..35694fd3 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import com.qmuiteam.qmui.QMUILog; import com.qmuiteam.qmui.arch.record.DefaultLatestVisitStorage; import com.qmuiteam.qmui.arch.record.QMUILatestVisitStorage; import com.qmuiteam.qmui.arch.record.RecordArgumentEditor; @@ -14,6 +15,7 @@ import com.qmuiteam.qmui.arch.record.RecordIdClassMap; import androidx.annotation.MainThread; public class QMUILatestVisit { + private static final String TAG = "QMUILatestVisit"; private static QMUILatestVisit sInstance; private QMUILatestVisitStorage mStorage; private Context mContext; @@ -81,26 +83,32 @@ public class QMUILatestVisit { return null; } Intent intent; - if (QMUIFragmentActivity.class.isAssignableFrom(activityCls)) { - int fragmentId = getStorage().getFragmentRecordId(); - if (fragmentId == QMUILatestVisitStorage.NOT_EXIST) { - return null; - } + try { + if (QMUIFragmentActivity.class.isAssignableFrom(activityCls)) { + int fragmentId = getStorage().getFragmentRecordId(); + if (fragmentId == QMUILatestVisitStorage.NOT_EXIST) { + return null; + } - Class fragmentCls = mRecordMap.getRecordClassById(fragmentId); - if (fragmentCls == null) { - return null; + Class fragmentCls = mRecordMap.getRecordClassById(fragmentId); + if (fragmentCls == null) { + return null; + } + Class activity = (Class) activityCls; + Class fragment = (Class) fragmentCls; + Bundle bundle = new Bundle(); + getStorage().getAndWriteFragmentArgumentsToBundle(bundle); + intent = QMUIFragmentActivity.intentOf(context, activity, fragment, bundle); + } else { + intent = new Intent(context, activityCls); } - Class activity = (Class) activityCls; - Class fragment = (Class) fragmentCls; - Bundle bundle = new Bundle(); - getStorage().getAndWriteFragmentArgumentsToBundle(bundle); - intent = QMUIFragmentActivity.intentOf(context, activity, fragment, bundle); - } else { - intent = new Intent(context, activityCls); + getStorage().getAndWriteActivityArgumentsToIntent(intent); + return intent; + }catch (Throwable throwable){ + QMUILog.e(TAG, "getLatestVisitIntent failed.", throwable); + getStorage().clearAll(); } - getStorage().getAndWriteActivityArgumentsToIntent(intent); - return intent; + return null; } diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/record/DefaultLatestVisitStorage.java b/arch/src/main/java/com/qmuiteam/qmui/arch/record/DefaultLatestVisitStorage.java index bcbdeadb..e555e527 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/record/DefaultLatestVisitStorage.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/record/DefaultLatestVisitStorage.java @@ -119,6 +119,13 @@ public class DefaultLatestVisitStorage implements QMUILatestVisitStorage { editor.apply(); } + @Override + public void clearAll() { + SharedPreferences.Editor editor = sp.edit(); + editor.clear(); + editor.apply(); + } + private void clearArgument(SharedPreferences.Editor editor, String prefix) { for (String key : sp.getAll().keySet()) { if (key.startsWith(prefix)) { diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/record/QMUILatestVisitStorage.java b/arch/src/main/java/com/qmuiteam/qmui/arch/record/QMUILatestVisitStorage.java index 5904fa75..e9905a37 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/record/QMUILatestVisitStorage.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/record/QMUILatestVisitStorage.java @@ -30,4 +30,6 @@ public interface QMUILatestVisitStorage { void getAndWriteActivityArgumentsToIntent(@NonNull Intent intent); void clearActivityStorage(); + + void clearAll(); }