From 235bb4ab75a42c1780edd8ba52f035d4eb97b3e8 Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Sun, 15 Nov 2020 13:56:30 +0800 Subject: [PATCH] Replace showcaseview with taptargetview --- app/build.gradle | 2 +- .../ehviewer/ui/scene/DownloadsScene.java | 66 ++++++++----------- .../ehviewer/ui/scene/FavoritesScene.java | 43 +++++------- .../ehviewer/ui/scene/GalleryListScene.java | 42 +++++------- app/src/main/res/values/styles.xml | 6 -- 5 files changed, 61 insertions(+), 98 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d011206ed..5eede8ec7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -87,7 +87,7 @@ dependencies { implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0' implementation 'com.google.android.material:material:1.3.0-alpha03' implementation 'com.getkeepsafe.relinker:relinker:1.4.1' - implementation 'com.github.amlcurran.showcaseview:library:5.4.3' + implementation 'com.getkeepsafe.taptargetview:taptargetview:1.13.0' implementation 'com.github.seven332.a7zip:extract-lite:1b21783' implementation 'com.github.seven332:android-resource:0.1.0' implementation 'com.github.seven332:beerbelly:0.1.4' 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 f03a012d8..a08b7dab9 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 @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; @@ -55,10 +56,8 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; import androidx.recyclerview.widget.StaggeredGridLayoutManager; -import com.github.amlcurran.showcaseview.ShowcaseView; -import com.github.amlcurran.showcaseview.SimpleShowcaseEventListener; -import com.github.amlcurran.showcaseview.targets.PointTarget; -import com.github.amlcurran.showcaseview.targets.ViewTarget; +import com.getkeepsafe.taptargetview.TapTarget; +import com.getkeepsafe.taptargetview.TapTargetView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator; @@ -105,6 +104,7 @@ import com.hippo.widget.recyclerview.AutoStaggeredGridLayoutManager; import com.hippo.yorozuya.AssertUtils; import com.hippo.yorozuya.FileUtils; import com.hippo.yorozuya.IOUtils; +import com.hippo.yorozuya.LayoutUtils; import com.hippo.yorozuya.ObjectUtils; import com.hippo.yorozuya.ViewUtils; import com.hippo.yorozuya.collect.LongList; @@ -151,8 +151,6 @@ public class DownloadsScene extends ToolbarScene @Nullable private AutoStaggeredGridLayoutManager mLayoutManager; - private ShowcaseView mShowcaseView; - private int mInitPosition = -1; private DownloadLabelAdapter mLabelAdapter; @@ -432,23 +430,19 @@ public class DownloadsScene extends ToolbarScene return; } - mShowcaseView = new ShowcaseView.Builder(activity) - .withMaterialShowcase() - .setStyle(R.style.Guide) - .setTarget(new ViewTarget(((DownloadHolder) holder).thumb)) - .hideOnTouchOutside() - .setContentTitle(R.string.guide_download_thumb_title) - .setContentText(R.string.guide_download_thumb_text) - .replaceEndButton(R.layout.button_guide) - .setShowcaseEventListener(new SimpleShowcaseEventListener() { + TapTargetView.showFor(requireActivity(), + TapTarget.forView(((DownloadHolder) holder).thumb, + getString(R.string.guide_download_thumb_title), + getString(R.string.guide_download_thumb_text)) + .transparentTarget(true), + new TapTargetView.Listener() { @Override - public void onShowcaseViewDidHide(ShowcaseView showcaseView) { - mShowcaseView = null; - ViewUtils.removeFromParent(showcaseView); + public void onTargetDismissed(TapTargetView view, boolean userInitiated) { + super.onTargetDismissed(view, userInitiated); Settings.putGuideDownloadThumb(false); guideDownloadLabels(); } - }).build(); + }); } private void guideDownloadLabels() { @@ -460,24 +454,24 @@ public class DownloadsScene extends ToolbarScene Display display = activity.getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getSize(point); + Rect bounds = new Rect(point.x + LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 + LayoutUtils.dp2pix(requireContext(), 20), + point.x - LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 - LayoutUtils.dp2pix(requireContext(), 20)); - mShowcaseView = new ShowcaseView.Builder(activity) - .withMaterialShowcase() - .setStyle(R.style.Guide) - .setTarget(new PointTarget(point.x, point.y / 3)) - .hideOnTouchOutside() - .setContentTitle(R.string.guide_download_labels_title) - .setContentText(R.string.guide_download_labels_text) - .replaceEndButton(R.layout.button_guide) - .setShowcaseEventListener(new SimpleShowcaseEventListener() { + TapTargetView.showFor(requireActivity(), + TapTarget.forBounds(bounds, + getString(R.string.guide_download_labels_title), + getString(R.string.guide_download_labels_text)) + .transparentTarget(true), + new TapTargetView.Listener() { @Override - public void onShowcaseViewDidHide(ShowcaseView showcaseView) { - mShowcaseView = null; - ViewUtils.removeFromParent(showcaseView); + public void onTargetDismissed(TapTargetView view, boolean userInitiated) { + super.onTargetClick(view); Settings.puttGuideDownloadLabels(false); openDrawer(Gravity.RIGHT); } - }).build(); + }); } @Override @@ -491,10 +485,6 @@ public class DownloadsScene extends ToolbarScene public void onDestroyView() { super.onDestroyView(); - if (null != mShowcaseView) { - ViewUtils.removeFromParent(mShowcaseView); - mShowcaseView = null; - } if (null != mRecyclerView) { mRecyclerView.stopScroll(); mRecyclerView = null; @@ -677,10 +667,6 @@ 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 cc099fe9c..82a614a87 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 @@ -22,6 +22,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.graphics.Point; +import android.graphics.Rect; import android.os.Bundle; import android.text.InputType; import android.text.TextUtils; @@ -43,9 +44,8 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.github.amlcurran.showcaseview.ShowcaseView; -import com.github.amlcurran.showcaseview.SimpleShowcaseEventListener; -import com.github.amlcurran.showcaseview.targets.PointTarget; +import com.getkeepsafe.taptargetview.TapTarget; +import com.getkeepsafe.taptargetview.TapTargetView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.hippo.android.resource.AttrResources; @@ -82,6 +82,7 @@ import com.hippo.widget.ContentLayout; import com.hippo.widget.FabLayout; import com.hippo.widget.SearchBarMover; import com.hippo.yorozuya.AssertUtils; +import com.hippo.yorozuya.LayoutUtils; import com.hippo.yorozuya.ObjectUtils; import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.ViewUtils; @@ -161,7 +162,6 @@ public class FavoritesScene extends BaseScene implements // For modify action private boolean mModifyAdd; - private ShowcaseView mShowcaseView; private final Runnable showNormalFabsRunnable = new Runnable() { @Override public void run() { @@ -325,24 +325,24 @@ public class FavoritesScene extends BaseScene implements Display display = activity.getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getSize(point); + Rect bounds = new Rect(point.x + LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 + LayoutUtils.dp2pix(requireContext(), 20), + point.x - LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 - LayoutUtils.dp2pix(requireContext(), 20)); - mShowcaseView = new ShowcaseView.Builder(activity) - .withMaterialShowcase() - .setStyle(R.style.Guide) - .setTarget(new PointTarget(point.x, point.y / 3)) - .hideOnTouchOutside() - .setContentTitle(R.string.guide_collections_title) - .setContentText(R.string.guide_collections_text) - .replaceEndButton(R.layout.button_guide) - .setShowcaseEventListener(new SimpleShowcaseEventListener() { + TapTargetView.showFor(requireActivity(), + TapTarget.forBounds(bounds, + getString(R.string.guide_collections_title), + getString(R.string.guide_collections_text)) + .transparentTarget(true), + new TapTargetView.Listener() { @Override - public void onShowcaseViewDidHide(ShowcaseView showcaseView) { - mShowcaseView = null; - ViewUtils.removeFromParent(showcaseView); + public void onTargetDismissed(TapTargetView view, boolean userInitiated) { + super.onTargetClick(view); Settings.putGuideCollections(false); openDrawer(Gravity.RIGHT); } - }).build(); + }); } // keyword of mUrlBuilder, fav cat of mUrlBuilder, mFavCatArray. @@ -390,11 +390,6 @@ public class FavoritesScene extends BaseScene implements public void onDestroyView() { super.onDestroyView(); - if (null != mShowcaseView) { - ViewUtils.removeFromParent(mShowcaseView); - mShowcaseView = null; - } - if (null != mHelper) { mHelper.destroy(); if (1 == mHelper.getShownViewIndex()) { @@ -472,10 +467,6 @@ public class FavoritesScene extends BaseScene implements @Override public void onBackPressed() { - if (null != mShowcaseView) { - return; - } - if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { mRecyclerView.outOfCustomChoiceMode(); } else if (mFabLayout != null && mFabLayout.isExpanded()) { 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 28128125e..0fab89cba 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 @@ -23,6 +23,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Point; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.InputType; @@ -51,9 +52,8 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.github.amlcurran.showcaseview.ShowcaseView; -import com.github.amlcurran.showcaseview.SimpleShowcaseEventListener; -import com.github.amlcurran.showcaseview.targets.PointTarget; +import com.getkeepsafe.taptargetview.TapTarget; +import com.getkeepsafe.taptargetview.TapTargetView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator; @@ -107,6 +107,7 @@ import com.hippo.widget.FabLayout; import com.hippo.widget.SearchBarMover; import com.hippo.yorozuya.AnimationUtils; import com.hippo.yorozuya.AssertUtils; +import com.hippo.yorozuya.LayoutUtils; import com.hippo.yorozuya.MathUtils; import com.hippo.yorozuya.SimpleAnimatorListener; import com.hippo.yorozuya.StringUtils; @@ -217,7 +218,6 @@ public final class GalleryListScene extends BaseScene private long mPressBackTime = 0; private boolean mHasFirstRefresh = false; private int mNavCheckedId = 0; - private ShowcaseView mShowcaseView; private DownloadManager mDownloadManager; private DownloadManager.DownloadInfoListener mDownloadInfoListener; private FavouriteStatusRouter mFavouriteStatusRouter; @@ -635,34 +635,30 @@ public final class GalleryListScene extends BaseScene Display display = activity.getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getSize(point); + Rect bounds = new Rect(point.x + LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 + LayoutUtils.dp2pix(requireContext(), 20), + point.x - LayoutUtils.dp2pix(requireContext(), 20), + point.y / 3 - LayoutUtils.dp2pix(requireContext(), 20)); - mShowcaseView = new ShowcaseView.Builder(activity) - .withMaterialShowcase() - .setStyle(R.style.Guide) - .setTarget(new PointTarget(point.x, point.y / 3)) - .hideOnTouchOutside() - .setContentTitle(R.string.guide_quick_search_title) - .setContentText(R.string.guide_quick_search_text) - .replaceEndButton(R.layout.button_guide) - .setShowcaseEventListener(new SimpleShowcaseEventListener() { + TapTargetView.showFor(requireActivity(), + TapTarget.forBounds(bounds, + getString(R.string.guide_quick_search_title), + getString(R.string.guide_quick_search_text)) + .transparentTarget(true), + new TapTargetView.Listener() { @Override - public void onShowcaseViewDidHide(ShowcaseView showcaseView) { - mShowcaseView = null; - ViewUtils.removeFromParent(showcaseView); + public void onTargetDismissed(TapTargetView view, boolean userInitiated) { + super.onTargetClick(view); Settings.putGuideQuickSearch(false); openDrawer(Gravity.RIGHT); } - }).build(); + }); } @Override public void onDestroyView() { super.onDestroyView(); - if (null != mShowcaseView) { - ViewUtils.removeFromParent(mShowcaseView); - mShowcaseView = null; - } if (null != mSearchBarMover) { mSearchBarMover.cancelAnimation(); mSearchBarMover = null; @@ -845,10 +841,6 @@ public final class GalleryListScene extends BaseScene @Override public void onBackPressed() { - if (null != mShowcaseView) { - return; - } - if (null != mFabLayout && mFabLayout.isExpanded()) { mFabLayout.setExpanded(false); return; diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6db17c30d..28b069355 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -130,12 +130,6 @@ ?attr/guideTextColor - -