diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java index 7be92341f2d0..dfbaf99b0076 100644 --- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java +++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java @@ -109,6 +109,9 @@ public class FirstrunPager extends ViewPager { }); animateLoad(); + + // Record telemetry for first onboarding panel, for baseline. + Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.PANEL, "onboarding.0"); } public void cleanup() { @@ -155,7 +158,8 @@ public class FirstrunPager extends ViewPager { public Fragment getItem(int i) { Fragment fragment = this.fragments[i]; if (fragment == null) { - fragment = Fragment.instantiate(context, panels.get(i).getClassname()); + FirstrunPagerConfig.FirstrunPanelConfig panelConfig = panels.get(i); + fragment = Fragment.instantiate(context, panelConfig.getClassname(), panelConfig.getArgs()); ((FirstrunPanel) fragment).setPagerNavigation(pagerNavigation); fragments[i] = fragment; } diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java index 801451367814..88dbe2bc4eca 100644 --- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java +++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java @@ -6,9 +6,11 @@ package org.mozilla.gecko.firstrun; import android.content.Context; +import android.os.Bundle; import android.util.Log; import com.keepsafe.switchboard.SwitchBoard; import org.mozilla.gecko.AppConstants; +import org.mozilla.gecko.R; import org.mozilla.gecko.Telemetry; import org.mozilla.gecko.TelemetryContract; @@ -17,6 +19,11 @@ import java.util.List; public class FirstrunPagerConfig { public static final String LOGTAG = "FirstrunPagerConfig"; + + public static final String KEY_IMAGE = "imageRes"; + public static final String KEY_TEXT = "textRes"; + public static final String KEY_SUBTEXT = "subtextRes"; + public static final String ONBOARDING_A = "onboarding-a"; public static final String ONBOARDING_B = "onboarding-b"; public static final String ONBOARDING_C = "onboarding-c"; @@ -28,7 +35,10 @@ public class FirstrunPagerConfig { panels.add(new FirstrunPanelConfig(WelcomePanel.class.getName(), WelcomePanel.TITLE_RES)); Telemetry.startUISession(TelemetryContract.Session.EXPERIMENT, ONBOARDING_A); } else if (isInExperimentLocal(context, ONBOARDING_B)) { - // TODO: Add new static onboarding flow. + panels.add(SimplePanelConfigs.urlbarPanelConfig); + panels.add(SimplePanelConfigs.bookmarksPanelConfig); + panels.add(SimplePanelConfigs.syncPanelConfig); + panels.add(new FirstrunPanelConfig(SyncPanel.class.getName(), SyncPanel.TITLE_RES)); Telemetry.startUISession(TelemetryContract.Session.EXPERIMENT, ONBOARDING_B); } else if (isInExperimentLocal(context, ONBOARDING_C)) { // TODO: Add new interactive onboarding flow. @@ -65,12 +75,29 @@ public class FirstrunPagerConfig { } public static class FirstrunPanelConfig { + private String classname; private int titleRes; + private Bundle args; public FirstrunPanelConfig(String resource, int titleRes) { - this.classname= resource; + this(resource, titleRes, -1, -1, -1, true); + } + + public FirstrunPanelConfig(String classname, int titleRes, int imageRes, int textRes, int subtextRes) { + this(classname, titleRes, imageRes, textRes, subtextRes, false); + } + + private FirstrunPanelConfig(String classname, int titleRes, int imageRes, int textRes, int subtextRes, boolean isCustom) { + this.classname = classname; this.titleRes = titleRes; + + if (!isCustom) { + this.args = new Bundle(); + this.args.putInt(KEY_IMAGE, imageRes); + this.args.putInt(KEY_TEXT, textRes); + this.args.putInt(KEY_SUBTEXT, subtextRes); + } } public String getClassname() { @@ -81,5 +108,14 @@ public class FirstrunPagerConfig { return this.titleRes; } + public Bundle getArgs() { + return args; + } + } + + protected static class SimplePanelConfigs { + public static final FirstrunPanelConfig urlbarPanelConfig = new FirstrunPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_panel_title_welcome, R.drawable.firstrun_urlbar, R.string.firstrun_urlbar_message, R.string.firstrun_urlbar_subtext); + public static final FirstrunPanelConfig bookmarksPanelConfig = new FirstrunPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_bookmarks_title, R.drawable.firstrun_bookmarks, R.string.firstrun_bookmarks_message, R.string.firstrun_bookmarks_subtext); + public static final FirstrunPanelConfig syncPanelConfig = new FirstrunPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_sync_title, R.drawable.firstrun_sync, R.string.firstrun_sync_message, R.string.firstrun_sync_subtext); } } diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java index 2f4e7acb63db..e7a9a13a80be 100644 --- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java +++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java @@ -5,7 +5,16 @@ package org.mozilla.gecko.firstrun; +import android.os.Bundle; import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import org.mozilla.gecko.R; +import org.mozilla.gecko.Telemetry; +import org.mozilla.gecko.TelemetryContract; /** * Base class for our first run pages. We call these FirstrunPanel for consistency @@ -18,6 +27,31 @@ public class FirstrunPanel extends Fragment { public static final int TITLE_RES = -1; protected boolean showBrowserHint = true; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) { + final ViewGroup root = (ViewGroup) inflater.inflate(R.layout.firstrun_basepanel_fragment, container, false); + Bundle args = getArguments(); + if (args != null) { + final int imageRes = args.getInt(FirstrunPagerConfig.KEY_IMAGE); + final int textRes = args.getInt(FirstrunPagerConfig.KEY_TEXT); + final int subtextRes = args.getInt(FirstrunPagerConfig.KEY_SUBTEXT); + + ((ImageView) root.findViewById(R.id.firstrun_image)).setImageResource(imageRes); + ((TextView) root.findViewById(R.id.firstrun_text)).setText(textRes); + ((TextView) root.findViewById(R.id.firstrun_subtext)).setText(subtextRes); + } + + root.findViewById(R.id.firstrun_link).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "firstrun-next"); + pagerNavigation.next(); + } + }); + + return root; + } + public interface PagerNavigation { void next(); void finish(); diff --git a/mobile/android/base/locales/en-US/android_strings.dtd b/mobile/android/base/locales/en-US/android_strings.dtd index 36e0e9067360..e0d5e19ce8f7 100644 --- a/mobile/android/base/locales/en-US/android_strings.dtd +++ b/mobile/android/base/locales/en-US/android_strings.dtd @@ -9,7 +9,17 @@ - + + + + + + + + + + + diff --git a/mobile/android/base/resources/drawable-nodpi/firstrun_background_devices.png b/mobile/android/base/resources/drawable-nodpi/firstrun_background_devices.png deleted file mode 100644 index 6cffbae14f13..000000000000 Binary files a/mobile/android/base/resources/drawable-nodpi/firstrun_background_devices.png and /dev/null differ diff --git a/mobile/android/base/resources/drawable-nodpi/firstrun_bookmarks.png b/mobile/android/base/resources/drawable-nodpi/firstrun_bookmarks.png new file mode 100644 index 000000000000..ecab8a84e5ee Binary files /dev/null and b/mobile/android/base/resources/drawable-nodpi/firstrun_bookmarks.png differ diff --git a/mobile/android/base/resources/drawable-nodpi/firstrun_signin.png b/mobile/android/base/resources/drawable-nodpi/firstrun_signin.png new file mode 100644 index 000000000000..104d2a84e8cc Binary files /dev/null and b/mobile/android/base/resources/drawable-nodpi/firstrun_signin.png differ diff --git a/mobile/android/base/resources/drawable-nodpi/firstrun_sync.png b/mobile/android/base/resources/drawable-nodpi/firstrun_sync.png new file mode 100644 index 000000000000..ac6707a60e8d Binary files /dev/null and b/mobile/android/base/resources/drawable-nodpi/firstrun_sync.png differ diff --git a/mobile/android/base/resources/drawable-nodpi/firstrun_urlbar.png b/mobile/android/base/resources/drawable-nodpi/firstrun_urlbar.png new file mode 100644 index 000000000000..72561436bcad Binary files /dev/null and b/mobile/android/base/resources/drawable-nodpi/firstrun_urlbar.png differ diff --git a/mobile/android/base/resources/layout/firstrun_animation_container.xml b/mobile/android/base/resources/layout/firstrun_animation_container.xml index 555dd5cd46ea..2c7a411ad0c4 100644 --- a/mobile/android/base/resources/layout/firstrun_animation_container.xml +++ b/mobile/android/base/resources/layout/firstrun_animation_container.xml @@ -14,17 +14,16 @@ android:id="@+id/firstrun_pager" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/firstrun_pager_background"> + android:background="@android:color/white"> + gecko:activeTextColor="@color/placeholder_grey" + gecko:inactiveTextColor="@color/tab_text_color" /> diff --git a/mobile/android/base/resources/layout/firstrun_basepanel_fragment.xml b/mobile/android/base/resources/layout/firstrun_basepanel_fragment.xml new file mode 100644 index 000000000000..ccff7a3ad70a --- /dev/null +++ b/mobile/android/base/resources/layout/firstrun_basepanel_fragment.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + diff --git a/mobile/android/base/resources/layout/firstrun_sync_fragment.xml b/mobile/android/base/resources/layout/firstrun_sync_fragment.xml index 3fc5b667dedb..cb4f1e61183d 100644 --- a/mobile/android/base/resources/layout/firstrun_sync_fragment.xml +++ b/mobile/android/base/resources/layout/firstrun_sync_fragment.xml @@ -13,52 +13,41 @@ - - - - - + - - + android:text="@string/firstrun_signin_message"/>