From 2364d624a259aaeb267ca0189686774f44868fe0 Mon Sep 17 00:00:00 2001 From: Heinrich Reimer Date: Tue, 7 Jun 2016 15:05:53 +0200 Subject: [PATCH] Fixed #73 --- .../materialintro/demo/MainIntroActivity.java | 13 +++ app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + .../materialintro/app/IntroActivity.java | 14 ++- .../materialintro/slide/ButtonCtaSlide.java | 6 +- .../materialintro/slide/SimpleSlide.java | 90 ++++++++++++------- 6 files changed, 86 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/heinrichreimersoftware/materialintro/demo/MainIntroActivity.java b/app/src/main/java/com/heinrichreimersoftware/materialintro/demo/MainIntroActivity.java index 26b5d2a..1b68514 100644 --- a/app/src/main/java/com/heinrichreimersoftware/materialintro/demo/MainIntroActivity.java +++ b/app/src/main/java/com/heinrichreimersoftware/materialintro/demo/MainIntroActivity.java @@ -4,7 +4,9 @@ import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; +import android.view.Gravity; import android.view.View; +import android.widget.Toast; import com.heinrichreimersoftware.materialintro.app.IntroActivity; import com.heinrichreimersoftware.materialintro.app.OnNavigationBlockedListener; @@ -65,6 +67,17 @@ protected void onCreate(Bundle savedInstanceState) { .background(R.color.color_material_bold) .backgroundDark(R.color.color_dark_material_bold) .scrollable(scrollable) + .buttonCtaLabel("Hello") + .buttonCtaClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast toast = Toast.makeText(MainIntroActivity.this, R.string.toast_button_cta, Toast.LENGTH_SHORT); + toast.setGravity(Gravity.CENTER, 0, 0); + toast.show(); + + nextSlide(); + } + }) .build()); addSlide(new SimpleSlide.Builder() diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d8009a5..53845bd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,6 +32,9 @@ Diese App braucht die Kamera- und Speicher-Berechtigung.\nDas ist nur, um zu zeigen, wie Berechtigungsanfragen in dieser Bibliothek funktionieren und wir werden nichts mit den Berechtigungen machen. Bitte gewähre die Berechtigungen, um fortzufahren. + Klick mich! + Hey, so funktionieren eigene CTA buttons in material-intro! + Das ist ein eigenes Fragment. Fake Benutzername Fake Password diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2e74214..1c72cf0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,6 +32,9 @@ This app needs the camera and storage permission.\nIt\'s only to show how permission requests work in this library and we won\'t do anything with the granted permissions. Please grant the permissions before proceeding. + Click me! + Hey, that\'s how custom CTA buttons work in material-intro! + This is a custom fragment. Fake username Fake password diff --git a/library/src/main/java/com/heinrichreimersoftware/materialintro/app/IntroActivity.java b/library/src/main/java/com/heinrichreimersoftware/materialintro/app/IntroActivity.java index a4b524d..3f3eb64 100644 --- a/library/src/main/java/com/heinrichreimersoftware/materialintro/app/IntroActivity.java +++ b/library/src/main/java/com/heinrichreimersoftware/materialintro/app/IntroActivity.java @@ -323,7 +323,7 @@ private void finishIfNeeded() { } } - private Pair getButtonCta(int position) { + private Pair getButtonCta(int position) { if (position < getCount() && getSlide(position) instanceof ButtonCtaSlide) { ButtonCtaSlide slide = (ButtonCtaSlide) getSlide(position); if (slide.getButtonCtaClickListener() != null && @@ -332,13 +332,13 @@ private void finishIfNeeded() { return Pair.create(slide.getButtonCtaLabel(), slide.getButtonCtaClickListener()); } else { - return Pair.create(getString(slide.getButtonCtaLabelRes()), + return Pair.create((CharSequence) getString(slide.getButtonCtaLabelRes()), slide.getButtonCtaClickListener()); } } } if (buttonCtaVisible) { - return Pair.create(getString(R.string.mi_label_button_cta), + return Pair.create((CharSequence) getString(R.string.mi_label_button_cta), new ButtonCtaClickListener()); } return null; @@ -579,10 +579,8 @@ private void updateButtonCta() { //Button CTA transition if (position + positionOffset < adapter.getCount()) { //Before fade - Pair button = getButtonCta(position); - Log.i("button cta", "button for position " + position + ": " + (button == null ? null : button.first)); - Pair buttonNext = getButtonCta(position + 1); - Log.i("button cta", "button for position " + (position + 1) + ": " + (buttonNext == null ? null : buttonNext.first)); + Pair button = getButtonCta(position); + Pair buttonNext = getButtonCta(position + 1); if (button == null) { if (buttonNext == null) { @@ -596,7 +594,6 @@ private void updateButtonCta() { buttonCta.setText(buttonNext.first); buttonCta.getChildAt(0).setOnClickListener(buttonNext.second); buttonCta.getChildAt(1).setOnClickListener(buttonNext.second); - Log.i("button cta", "alpha1: " + (positionOffset)); buttonCta.setAlpha(positionOffset); } } @@ -608,7 +605,6 @@ private void updateButtonCta() { buttonCta.setText(button.first); buttonCta.getChildAt(0).setOnClickListener(button.second); buttonCta.getChildAt(1).setOnClickListener(button.second); - Log.i("button cta", "alpha2: " + (1 - positionOffset)); buttonCta.setAlpha(1 - positionOffset); } else { diff --git a/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/ButtonCtaSlide.java b/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/ButtonCtaSlide.java index a7667a5..874c3fa 100644 --- a/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/ButtonCtaSlide.java +++ b/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/ButtonCtaSlide.java @@ -7,12 +7,12 @@ public interface ButtonCtaSlide extends Slide { View.OnClickListener getButtonCtaClickListener(); /** - * Note: you must either define a {@link String} or a {@link StringRes} label + * Note: you must either define a {@link CharSequence} or a {@link StringRes} label */ - String getButtonCtaLabel(); + CharSequence getButtonCtaLabel(); /** - * Note: you must either define a {@link String} or a {@link StringRes} label + * Note: you must either define a {@link CharSequence} or a {@link StringRes} label */ @StringRes int getButtonCtaLabelRes(); diff --git a/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/SimpleSlide.java b/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/SimpleSlide.java index 5c24623..0d527f1 100644 --- a/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/SimpleSlide.java +++ b/library/src/main/java/com/heinrichreimersoftware/materialintro/slide/SimpleSlide.java @@ -1,5 +1,6 @@ package com.heinrichreimersoftware.materialintro.slide; +import android.content.Context; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.ColorInt; @@ -38,8 +39,10 @@ public class SimpleSlide implements Slide, RestorableSlide, ButtonCtaSlide { private final boolean canGoBackward; private String[] permissions; private int permissionsRequestCode; - private View.OnClickListener buttonClickListener = null; - private String buttonLabel; + private CharSequence buttonCtaLabel = null; + @StringRes + private int buttonCtaLabelRes = 0; + private View.OnClickListener buttonCtaClickListener = null; private SimpleSlide(Builder builder) { fragment = SimpleSlideFragment.newInstance(builder.title, builder.titleRes, @@ -51,6 +54,9 @@ private SimpleSlide(Builder builder) { canGoBackward = builder.canGoBackward; permissions = builder.permissions; permissionsRequestCode = builder.permissionsRequestCode; + buttonCtaLabel = builder.buttonCtaLabel; + buttonCtaLabelRes = builder.buttonCtaLabelRes; + buttonCtaClickListener = builder.buttonCtaClickListener; updatePermissions(); } @@ -90,17 +96,38 @@ public boolean canGoBackward() { @Override public View.OnClickListener getButtonCtaClickListener() { updatePermissions(); - return buttonClickListener; + if (permissions == null) { + return buttonCtaClickListener; + } + return new View.OnClickListener() { + @Override + public void onClick(View v) { + if (fragment.getActivity() != null) + ActivityCompat.requestPermissions(fragment.getActivity(), permissions, + permissionsRequestCode); + } + }; } @Override - public String getButtonCtaLabel() { + public CharSequence getButtonCtaLabel() { updatePermissions(); - return buttonLabel; + if (permissions == null) { + return buttonCtaLabel; + } + Context context = fragment.getContext(); + if (context != null) + return context.getResources().getQuantityText( + R.plurals.mi_label_grant_permission, permissions.length); + return null; } @Override public int getButtonCtaLabelRes() { + updatePermissions(); + if (permissions == null) { + return buttonCtaLabelRes; + } return 0; } @@ -118,35 +145,11 @@ private synchronized void updatePermissions() { if (permissionsNotGranted.size() > 0) { permissions = permissionsNotGranted.toArray( new String[permissionsNotGranted.size()]); - if (fragment.getActivity() == null) { - if (permissions.length == 0) { - permissions = null; - buttonLabel = null; - buttonClickListener = null; - } - } - else { - buttonLabel = fragment.getContext().getResources().getQuantityText( - R.plurals.mi_label_grant_permission, permissionsNotGranted.size()) - .toString(); - buttonClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - if (fragment.getActivity() != null) - ActivityCompat.requestPermissions(fragment.getActivity(), permissions, - permissionsRequestCode); - } - }; - } } else { permissions = null; - buttonLabel = null; - buttonClickListener = null; } } else { permissions = null; - buttonLabel = null; - buttonClickListener = null; } } @@ -155,11 +158,9 @@ public static class Builder { private int backgroundRes = 0; @ColorRes private int backgroundDarkRes = 0; - private CharSequence title = null; @StringRes private int titleRes = 0; - private CharSequence description = null; @StringRes private int descriptionRes = 0; @@ -170,6 +171,10 @@ public static class Builder { private boolean canGoForward = true; private boolean canGoBackward = true; private String[] permissions = null; + private CharSequence buttonCtaLabel = null; + @StringRes + private int buttonCtaLabelRes = 0; + private View.OnClickListener buttonCtaClickListener = null; private int permissionsRequestCode = DEFAULT_PERMISSIONS_REQUEST_CODE; @@ -260,6 +265,29 @@ public Builder permissionsRequestCode(int permissionsRequestCode) { return this; } + public Builder buttonCtaLabel(CharSequence buttonCtaLabel) { + this.buttonCtaLabel = buttonCtaLabel; + this.buttonCtaLabelRes = 0; + return this; + } + + public Builder buttonCtaLabelHtml(String buttonCtaLabelHtml) { + this.buttonCtaLabel = Html.fromHtml(buttonCtaLabelHtml); + this.buttonCtaLabelRes = 0; + return this; + } + + public Builder buttonCtaLabel(@StringRes int buttonCtaLabelRes) { + this.buttonCtaLabelRes = buttonCtaLabelRes; + this.buttonCtaLabel = null; + return this; + } + + public Builder buttonCtaClickListener(View.OnClickListener buttonCtaClickListener) { + this.buttonCtaClickListener = buttonCtaClickListener; + return this; + } + public SimpleSlide build() { return new SimpleSlide(this); }