From 3ac64cd97328a7a7241ad647e097766e6452d4d5 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 20 Mar 2016 19:51:26 +0800 Subject: [PATCH] Make ShowcaseView safe --- .../hippo/ehviewer/ui/scene/DownloadsScene.java | 17 +++++++++++++++-- .../hippo/ehviewer/ui/scene/FavoritesScene.java | 14 +++++++++++++- .../ehviewer/ui/scene/GalleryListScene.java | 14 +++++++++++++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index 5419bf17b..bbf805572 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -131,6 +131,8 @@ public class DownloadsScene extends ToolbarScene @Nullable private LinearLayoutManager mLayoutManager; + private ShowcaseView mShowcaseView; + @Override public int getNavCheckedItem() { return R.id.nav_downloads; @@ -321,7 +323,7 @@ public class DownloadsScene extends ToolbarScene return; } - new ShowcaseView.Builder(activity) + mShowcaseView = new ShowcaseView.Builder(activity) .withMaterialShowcase() .setStyle(R.style.Guide) .setTarget(new ViewTarget(((DownloadHolder) holder).thumb)) @@ -332,6 +334,7 @@ public class DownloadsScene extends ToolbarScene .setShowcaseEventListener(new SimpleShowcaseEventListener() { @Override public void onShowcaseViewDidHide(ShowcaseView showcaseView) { + mShowcaseView = null; ViewUtils.removeFromParent(showcaseView); Settings.putGuideDownloadThumb(false); guideDownloadLabels(); @@ -349,7 +352,7 @@ public class DownloadsScene extends ToolbarScene Point point = new Point(); display.getSize(point); - new ShowcaseView.Builder(activity) + mShowcaseView = new ShowcaseView.Builder(activity) .withMaterialShowcase() .setStyle(R.style.Guide) .setTarget(new PointTarget(point.x, point.y / 3)) @@ -360,6 +363,7 @@ public class DownloadsScene extends ToolbarScene .setShowcaseEventListener(new SimpleShowcaseEventListener() { @Override public void onShowcaseViewDidHide(ShowcaseView showcaseView) { + mShowcaseView = null; ViewUtils.removeFromParent(showcaseView); Settings.puttGuideDownloadLabels(false); openDrawer(Gravity.RIGHT); @@ -378,6 +382,11 @@ public class DownloadsScene extends ToolbarScene public void onDestroyView() { super.onDestroyView(); + if (null != mShowcaseView) { + ViewUtils.removeFromParent(mShowcaseView); + mShowcaseView = null; + } + mRecyclerView = null; mFabLayout = null; mViewTransition = null; @@ -522,6 +531,10 @@ public class DownloadsScene extends ToolbarScene @Override public void onBackPressed() { + if (null != mShowcaseView) { + return; + } + if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { mRecyclerView.outOfCustomChoiceMode(); } else { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index b52a97af2..b3ef3c7be 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -174,6 +174,8 @@ public class FavoritesScene extends BaseScene implements } }; + private ShowcaseView mShowcaseView; + @Override public int getNavCheckedItem() { return R.id.nav_favourite; @@ -323,7 +325,7 @@ public class FavoritesScene extends BaseScene implements Point point = new Point(); display.getSize(point); - new ShowcaseView.Builder(activity) + mShowcaseView = new ShowcaseView.Builder(activity) .withMaterialShowcase() .setStyle(R.style.Guide) .setTarget(new PointTarget(point.x, point.y / 3)) @@ -334,6 +336,7 @@ public class FavoritesScene extends BaseScene implements .setShowcaseEventListener(new SimpleShowcaseEventListener() { @Override public void onShowcaseViewDidHide(ShowcaseView showcaseView) { + mShowcaseView = null; ViewUtils.removeFromParent(showcaseView); Settings.putGuideCollections(false); openDrawer(Gravity.RIGHT); @@ -394,6 +397,11 @@ public class FavoritesScene extends BaseScene implements public void onDestroyView() { super.onDestroyView(); + if (null != mShowcaseView) { + ViewUtils.removeFromParent(mShowcaseView); + mShowcaseView = null; + } + if (null != mAdapter) { mAdapter.unregister(); mAdapter = null; @@ -497,6 +505,10 @@ public class FavoritesScene extends BaseScene implements @Override public void onBackPressed() { + if (null != mShowcaseView) { + return; + } + if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { mRecyclerView.outOfCustomChoiceMode(); } else if (mSearchMode) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index c6b12dbd8..559985547 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -171,6 +171,8 @@ public final class GalleryListScene extends BaseScene } }; + private ShowcaseView mShowcaseView; + @Override public int getNavCheckedItem() { return mNavCheckedId; @@ -425,7 +427,7 @@ public final class GalleryListScene extends BaseScene Point point = new Point(); display.getSize(point); - new ShowcaseView.Builder(activity) + mShowcaseView = new ShowcaseView.Builder(activity) .withMaterialShowcase() .setStyle(R.style.Guide) .setTarget(new PointTarget(point.x, point.y / 3)) @@ -436,6 +438,7 @@ public final class GalleryListScene extends BaseScene .setShowcaseEventListener(new SimpleShowcaseEventListener() { @Override public void onShowcaseViewDidHide(ShowcaseView showcaseView) { + mShowcaseView = null; ViewUtils.removeFromParent(showcaseView); Settings.putGuideQuickSearch(false); openDrawer(Gravity.RIGHT); @@ -447,6 +450,11 @@ public final class GalleryListScene extends BaseScene public void onDestroyView() { super.onDestroyView(); + if (null != mShowcaseView) { + ViewUtils.removeFromParent(mShowcaseView); + mShowcaseView = null; + } + if (null != mSearchBarMover) { mSearchBarMover.cancelAnimation(); mSearchBarMover = null; @@ -598,6 +606,10 @@ public final class GalleryListScene extends BaseScene @Override public void onBackPressed() { + if (null != mShowcaseView) { + return; + } + boolean handle; switch (mState) { default: