diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/InnerBaseActivity.java b/arch/src/main/java/com/qmuiteam/qmui/arch/InnerBaseActivity.java index 57724193..0b738266 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/InnerBaseActivity.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/InnerBaseActivity.java @@ -72,6 +72,7 @@ class InnerBaseActivity extends AppCompatActivity implements LatestVisitArgument private void checkLatestVisitRecord() { Class cls = getClass(); if (!cls.isAnnotationPresent(LatestVisitRecord.class)) { + QMUILatestVisit.getInstance(this).clearActivityLatestVisitRecord(); return; } QMUILatestVisit.getInstance(this).performLatestVisitRecord(this); diff --git a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java index cb100e28..49e2a255 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUIFragment.java @@ -152,9 +152,11 @@ public abstract class QMUIFragment extends Fragment implements private void checkLatestVisitRecord() { Class cls = getClass(); Activity activity = getActivity(); - if (!cls.isAnnotationPresent(LatestVisitRecord.class) - || getParentFragment() != null - || !(activity instanceof QMUIFragmentActivity)) { + if(getParentFragment() != null || !(activity instanceof QMUIFragmentActivity)){ + return; + } + if (!cls.isAnnotationPresent(LatestVisitRecord.class)) { + QMUILatestVisit.getInstance(getContext()).clearFragmentLatestVisitRecord(); return; } if (!activity.getClass().isAnnotationPresent(LatestVisitRecord.class)) { 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 7ae5431c..55574711 100644 --- a/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java +++ b/arch/src/main/java/com/qmuiteam/qmui/arch/QMUILatestVisit.java @@ -172,6 +172,14 @@ public class QMUILatestVisit { return bundle; } + void clearFragmentLatestVisitRecord(){ + getStorage().clearFragmentStorage(); + } + + void clearActivityLatestVisitRecord(){ + getStorage().clearActivityStorage(); + } + void performLatestVisitRecord(QMUIFragment fragment) { getStorage().saveFragmentRecordInfo(getRecordInfo(fragment.getClass(), fragment)); } 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 ca5686ae..25f2a21e 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 @@ -112,6 +112,24 @@ public class DefaultLatestVisitStorage implements QMUILatestVisitStorage { return null; } + @Override + public void clearFragmentStorage() { + mLastFragmentRecord = null; + SharedPreferences.Editor editor = sp.edit(); + editor.remove(SP_FRAGMENT_RECORD_ID); + clearArgument(editor, SP_FRAGMENT_ARG_PREFIX); + editor.apply(); + } + + @Override + public void clearActivityStorage() { + mLastActivityRecord = null; + SharedPreferences.Editor editor = sp.edit(); + editor.remove(SP_ACTIVITY_RECORD_ID); + clearArgument(editor, SP_ACTIVITY_ARG_PREFIX); + editor.apply(); + } + @Override public void saveFragmentRecordInfo(@NonNull RecordInfo recordInfo) { if (mLastFragmentRecord != null && mLastFragmentRecord.equals(recordInfo)) { @@ -138,14 +156,18 @@ public class DefaultLatestVisitStorage implements QMUILatestVisitStorage { editor.apply(); } - private void putArguments(SharedPreferences.Editor editor, - String prefix, RecordInfo.Argument[] arguments) { - // clear first + private void clearArgument(SharedPreferences.Editor editor, String prefix) { for (String key : sp.getAll().keySet()) { if (key.startsWith(prefix)) { editor.remove(key); } } + } + + private void putArguments(SharedPreferences.Editor editor, + String prefix, RecordInfo.Argument[] arguments) { + // clear first + clearArgument(editor, prefix); if (arguments != null && arguments.length > 0) { for (RecordInfo.Argument argument : arguments) { 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 768af0e7..274f9918 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 @@ -21,6 +21,8 @@ public interface QMUILatestVisitStorage { Boolean getFragmentBoolArgument(String key); + void clearFragmentStorage(); + // Activity Stuff void saveActivityRecordInfo(@NonNull RecordInfo recordInfo); @@ -36,4 +38,6 @@ public interface QMUILatestVisitStorage { Float getActivityFloatArgument(String key); Boolean getActivityBoolArgument(String key); + + void clearActivityStorage(); }