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);
}