From 8528cf1348f818612fc88434a9ca74fc7954013f Mon Sep 17 00:00:00 2001 From: Satyarth Sampath Date: Tue, 2 Aug 2016 12:37:55 +0530 Subject: [PATCH] added backpress based dismiss action,fixes #7 --- .../com/wooplr/spotlight/SpotlightConfig.java | 10 +++++ .../com/wooplr/spotlight/SpotlightView.java | 43 +++++++++++++++++-- .../com/example/spotlight/MainActivity.java | 3 +- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightConfig.java b/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightConfig.java index 99d17db..c5f024b 100644 --- a/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightConfig.java +++ b/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightConfig.java @@ -16,6 +16,7 @@ public class SpotlightConfig { private long fadingTextDuration; private int padding; private boolean dismissOnTouch; + private boolean dismissOnBackpress; private boolean isPerformClick; private int headingTvSize; private int headingTvColor; @@ -35,6 +36,7 @@ public SpotlightConfig() { this.fadingTextDuration = 400; this.padding = 20; this.dismissOnTouch = true; + this.dismissOnBackpress=true; this.isPerformClick = true; this.headingTvSize = 24; this.headingTvColor = Color.parseColor("#eb273f"); @@ -182,4 +184,12 @@ public Typeface getmTypeface() { public void setmTypeface(Typeface mTypeface) { this.mTypeface = mTypeface; } + + public boolean isDismissOnBackpress() { + return dismissOnBackpress; + } + + public void setDismissOnBackpress(boolean dismissOnBackpress) { + this.dismissOnBackpress = dismissOnBackpress; + } } diff --git a/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightView.java b/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightView.java index f09d041..e54a7ac 100755 --- a/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightView.java +++ b/Spotlight-library/src/main/java/com/wooplr/spotlight/SpotlightView.java @@ -20,7 +20,9 @@ import android.support.v4.content.ContextCompat; import android.support.v7.widget.AppCompatImageView; import android.util.AttributeSet; +import android.util.Log; import android.view.Gravity; +import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewAnimationUtils; @@ -116,6 +118,7 @@ public class SpotlightView extends FrameLayout { * Dismiss layout on touch */ private boolean dismissOnTouch; + private boolean dismissOnBackPress; private PreferencesManager preferencesManager; private String usageId; @@ -170,6 +173,7 @@ public class SpotlightView extends FrameLayout { private Typeface mTypeface = null; + public SpotlightView(Context context) { super(context); init(context); @@ -200,11 +204,9 @@ private void init(Context context) { isRevealAnimationEnabled = true; dismissOnTouch = false; isPerformClick = false; - + dismissOnBackPress = false; handler = new Handler(); - preferencesManager = new PreferencesManager(context); - eraser = new Paint(); eraser.setColor(0xFFFFFFFF); eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); @@ -596,6 +598,7 @@ public void onAnimationStart(Animation animation) { @Override public void onAnimationEnd(Animation animation) { dismissOnTouch = true; + dismissOnBackPress = true; } @Override @@ -796,6 +799,9 @@ public void setDismissOnTouch(boolean dismissOnTouch) { this.dismissOnTouch = dismissOnTouch; } + public void setDismissOnBackPress(boolean dismissOnBackPress) { + this.dismissOnBackPress = dismissOnBackPress; + } public void setPerformClick(boolean performClick) { isPerformClick = performClick; @@ -809,6 +815,7 @@ public void setIntroAnimationDuration(long introAnimationDuration) { this.introAnimationDuration = introAnimationDuration; } + public void setRevealAnimationEnabled(boolean revealAnimationEnabled) { isRevealAnimationEnabled = revealAnimationEnabled; } @@ -878,6 +885,7 @@ public void setConfiguration(SpotlightConfig configuration) { this.fadingTextDuration = configuration.getFadingTextDuration(); this.padding = configuration.getPadding(); this.dismissOnTouch = configuration.isDismissOnTouch(); + this.dismissOnBackPress = configuration.isDismissOnBackpress(); this.isPerformClick = configuration.isPerformClick(); this.headingTvSize = configuration.getHeadingTvSize(); this.headingTvColor = configuration.getHeadingTvColor(); @@ -938,6 +946,11 @@ public Builder dismissOnTouch(boolean dismissOnTouch) { return this; } + public Builder dismissOnBackPress(boolean dismissOnBackPress) { + spotlightView.setDismissOnBackPress(dismissOnBackPress); + return this; + } + public Builder usageId(String usageId) { spotlightView.setUsageId(usageId); return this; @@ -1005,8 +1018,10 @@ public Builder lineAnimDuration(long duration) { } public Builder enableDismissAfterShown(boolean enable) { - if (enable) + if (enable) { spotlightView.setDismissOnTouch(false); + spotlightView.setDismissOnBackPress(false); + } return this; } @@ -1025,6 +1040,11 @@ public SpotlightView build() { spotlightView.targetView, spotlightView.padding); spotlightView.setCircleShape(circle); + if (spotlightView.dismissOnBackPress) { + spotlightView.setFocusableInTouchMode(true); + spotlightView.setFocusable(true); + spotlightView.requestFocus(); + } return spotlightView; } @@ -1035,4 +1055,19 @@ public SpotlightView show() { } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (dismissOnBackPress) { + if (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { + dismiss(); + return true; + } + } + return super.dispatchKeyEvent(event); + } + + public void logger(String s) { + Log.d("Spotlight", s); + } } diff --git a/app/src/main/java/com/example/spotlight/MainActivity.java b/app/src/main/java/com/example/spotlight/MainActivity.java index 35939c2..e18a339 100644 --- a/app/src/main/java/com/example/spotlight/MainActivity.java +++ b/app/src/main/java/com/example/spotlight/MainActivity.java @@ -129,7 +129,8 @@ private void showIntro(View view, String usageId) { .lineAnimDuration(400) .lineAndArcColor(Color.parseColor("#eb273f")) .dismissOnTouch(true) - .enableDismissAfterShown(true) + .dismissOnBackPress(true) + //.enableDismissAfterShown(true) .usageId(usageId) //UNIQUE ID .show(); }