From cd2e9bf5c7632e468f0913037373694dae59f7d8 Mon Sep 17 00:00:00 2001 From: Behnam Mabodi Date: Sun, 1 May 2016 11:30:07 +0430 Subject: [PATCH 1/3] Added listener for skipped showcase --- .../IShowcaseListener.java | 4 ++++ .../MaterialShowcaseView.java | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/IShowcaseListener.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/IShowcaseListener.java index c527b092..4f2fb8f0 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/IShowcaseListener.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/IShowcaseListener.java @@ -4,4 +4,8 @@ public interface IShowcaseListener { void onShowcaseDisplayed(MaterialShowcaseView showcaseView); void onShowcaseDismissed(MaterialShowcaseView showcaseView); + /** + * Notify when singleUse is enabled and showcase has been fired before + */ + void onShowcaseSkipped(MaterialShowcaseView showcaseView); } diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java index 07bc982d..71d9db6c 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java @@ -226,6 +226,28 @@ private void notifyOnDisplayed() { } } + /** + * Notify when {@link #singleUse(String)} is enabled and showcase has been fired before + * @see #singleUse(String) + */ + private void notifyOnSkipped() { + + if(mListeners != null){ + for (IShowcaseListener listener : mListeners) { + listener.onShowcaseSkipped(this); + } + mListeners.clear(); + mListeners = null; + } + + /** + * internal listener used by sequence for storing progress within the sequence + */ + if (mDetachedListener != null) { + mDetachedListener.onShowcaseDetached(this, mWasDismissed); + } + } + private void notifyOnDismissed() { if (mListeners != null) { for (IShowcaseListener listener : mListeners) { @@ -738,6 +760,7 @@ public boolean show(final Activity activity) { */ if (mSingleUse) { if (mPrefsManager.hasFired()) { + notifyOnSkipped(); return false; } else { mPrefsManager.setFired(); From af37e7ef651293741fd2b6015fe14a67ac3d3ddc Mon Sep 17 00:00:00 2001 From: Behnam Mabodi Date: Mon, 2 May 2016 13:50:41 +0430 Subject: [PATCH 2/3] Automatically hide title text view if no title is set. This will remove unnecessary space between target and content text. --- .../co/deanwild/materialshowcaseview/MaterialShowcaseView.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java index 71d9db6c..02efa205 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java @@ -704,6 +704,8 @@ public MaterialShowcaseView build() { throw new IllegalArgumentException("Unsupported shape type: " + shapeType); } } + if(showcaseView.mTitleTextView != null && showcaseView.mTitleTextView.getText().equals("")) + showcaseView.mTitleTextView.setVisibility(GONE); return showcaseView; } From 04c365f8169957fdf78d27d6e0ebaa42cb952b54 Mon Sep 17 00:00:00 2001 From: Behnam Mabodi Date: Wed, 6 Jul 2016 00:02:58 +0430 Subject: [PATCH 3/3] Update MaterialShowcaseView.java --- .../MaterialShowcaseView.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java index 02efa205..28889baf 100644 --- a/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java +++ b/library/src/main/java/uk/co/deanwild/materialshowcaseview/MaterialShowcaseView.java @@ -70,6 +70,7 @@ public class MaterialShowcaseView extends FrameLayout implements View.OnTouchLis private Handler mHandler; private long mDelayInMillis = ShowcaseConfig.DEFAULT_DELAY; private int mBottomMargin = 0; + private int mRightMargin = 0; private boolean mSingleUse = false; // should display only once private PrefsManager mPrefsManager; // used to store state doe single use mode List mListeners; // external listeners who want to observe when we show and dismiss @@ -296,10 +297,16 @@ public void setTarget(Target target) { */ if (!mRenderOverNav && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mBottomMargin = getSoftButtonsBarSizePort((Activity) getContext()); + mRightMargin = getSoftButtonsBarHorizontalSizePort((Activity) getContext()); + FrameLayout.LayoutParams contentLP = (LayoutParams) getLayoutParams(); - if (contentLP != null && contentLP.bottomMargin != mBottomMargin) - contentLP.bottomMargin = mBottomMargin; + if (contentLP != null) { + if (contentLP.bottomMargin != mBottomMargin) + contentLP.bottomMargin = mBottomMargin; + if (contentLP.rightMargin != mRightMargin) + contentLP.rightMargin = mRightMargin; + } } // apply the target position @@ -870,6 +877,23 @@ public static int getSoftButtonsBarSizePort(Activity activity) { } return 0; } + + public static int getSoftButtonsBarHorizontalSizePort(Activity activity) { + // getRealMetrics is only available with API 17 and + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + + DisplayMetrics metrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + int usableWidth = metrics.widthPixels; + activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); + int realWidth = metrics.widthPixels; + if (realWidth > usableWidth) + return realWidth - usableWidth; + else + return 0; + } + return 0; + } private void setRenderOverNavigationBar(boolean mRenderOverNav) { this.mRenderOverNav = mRenderOverNav;