Bug 1199859 - Add "Next" sliding. r=mfinkle

This commit is contained in:
Chenxia Liu 2015-09-09 17:24:18 -07:00
parent a22ce6d287
commit 0ac70a5384
6 changed files with 52 additions and 28 deletions

View File

@ -2584,7 +2584,7 @@ public class BrowserApp extends GeckoApp
final ViewStub firstrunPagerStub = (ViewStub) findViewById(R.id.firstrun_pager_stub);
mFirstrunPane = (FirstrunPane) firstrunPagerStub.inflate();
mFirstrunPane.load(getApplicationContext(), getSupportFragmentManager());
mFirstrunPane.registerOnFinishListener(new FirstrunPane.PagerNavigation() {
mFirstrunPane.registerOnFinishListener(new FirstrunPane.OnFinishListener() {
@Override
public void onFinish() {
BrowserApp.this.mFirstrunPane = null;

View File

@ -22,8 +22,9 @@ import org.mozilla.gecko.animation.TransitionsTracker;
import java.util.List;
public class FirstrunPager extends ViewPager {
private Context context;
protected FirstrunPane.PagerNavigation listener;
protected FirstrunPanel.PagerNavigation pagerNavigation;
public FirstrunPager(Context context) {
this(context, null);
@ -34,7 +35,7 @@ public class FirstrunPager extends ViewPager {
this.context = context;
}
public void load(Context appContext, FragmentManager fm, FirstrunPane.PagerNavigation listener) {
public void load(Context appContext, FragmentManager fm, final FirstrunPane.OnFinishListener onFinishListener) {
final List<FirstrunPagerConfig.FirstrunPanelConfig> panels;
if (RestrictedProfiles.isUserRestricted(context)) {
@ -44,7 +45,22 @@ public class FirstrunPager extends ViewPager {
}
setAdapter(new ViewPagerAdapter(fm, panels));
this.listener = listener;
this.pagerNavigation = new FirstrunPanel.PagerNavigation() {
@Override
public void next() {
final int currentPage = FirstrunPager.this.getCurrentItem();
if (currentPage < FirstrunPager.this.getChildCount() - 1) {
FirstrunPager.this.setCurrentItem(currentPage + 1);
}
}
@Override
public void finish() {
if (onFinishListener != null) {
onFinishListener.onFinish();
}
}
};
animateLoad();
}
@ -73,17 +89,23 @@ public class FirstrunPager extends ViewPager {
}
private class ViewPagerAdapter extends FragmentPagerAdapter {
private List<FirstrunPagerConfig.FirstrunPanelConfig> panels;
private final List<FirstrunPagerConfig.FirstrunPanelConfig> panels;
private final Fragment[] fragments;
public ViewPagerAdapter(FragmentManager fm, List<FirstrunPagerConfig.FirstrunPanelConfig> panels) {
super(fm);
this.panels = panels;
this.fragments = new Fragment[panels.size()];
}
@Override
public Fragment getItem(int i) {
final Fragment fragment = Fragment.instantiate(context, panels.get(i).getClassname());
((FirstrunPanel) fragment).setPagerNavigation(listener);
Fragment fragment = this.fragments[i];
if (fragment == null) {
fragment = Fragment.instantiate(context, panels.get(i).getClassname());
((FirstrunPanel) fragment).setPagerNavigation(pagerNavigation);
fragments[i] = fragment;
}
return fragment;
}

View File

@ -20,14 +20,13 @@ import org.mozilla.gecko.animation.TransitionsTracker;
public class FirstrunPane extends LinearLayout {
public static final String PREF_FIRSTRUN_ENABLED = "startpane_enabled";
public static interface PagerNavigation {
public void next();
public static interface OnFinishListener {
public void onFinish();
}
private FirstrunPager pager;
private boolean visible;
private PagerNavigation pagerNavigation;
private OnFinishListener onFinishListener;
public FirstrunPane(Context context) {
this(context, null);
@ -39,15 +38,7 @@ public class FirstrunPane extends LinearLayout {
public void load(Context appContext, FragmentManager fm) {
visible = true;
pager = (FirstrunPager) findViewById(R.id.firstrun_pager);
pager.load(appContext, fm, new PagerNavigation() {
@Override
public void next() {
final int currentPage = pager.getCurrentItem();
if (currentPage < pager.getChildCount() - 1) {
pager.setCurrentItem(currentPage + 1);
}
}
pager.load(appContext, fm, new OnFinishListener() {
@Override
public void onFinish() {
hide();
@ -62,8 +53,8 @@ public class FirstrunPane extends LinearLayout {
public void hide() {
visible = false;
pager.hide();
if (pagerNavigation != null) {
pagerNavigation.onFinish();
if (onFinishListener != null) {
onFinishListener.onFinish();
}
animateHide();
}
@ -83,7 +74,7 @@ public class FirstrunPane extends LinearLayout {
alphaAnimator.start();
}
public void registerOnFinishListener(PagerNavigation listener) {
this.pagerNavigation = listener;
public void registerOnFinishListener(OnFinishListener listener) {
this.onFinishListener = listener;
}
}

View File

@ -10,9 +10,13 @@ import android.support.v4.app.Fragment;
public class FirstrunPanel extends Fragment {
public static final int TITLE_RES = -1;
protected FirstrunPane.PagerNavigation pagerNavigation;
public interface PagerNavigation {
void next();
void finish();
}
protected PagerNavigation pagerNavigation;
public void setPagerNavigation(FirstrunPane.PagerNavigation listener) {
public void setPagerNavigation(PagerNavigation listener) {
this.pagerNavigation = listener;
}
@ -24,7 +28,7 @@ public class FirstrunPanel extends Fragment {
protected void close() {
if (pagerNavigation != null) {
pagerNavigation.onFinish();
pagerNavigation.finish();
}
}
}

View File

@ -27,6 +27,7 @@ import java.util.List;
public class ImportPanel extends FirstrunPanel {
public static final String LOGTAG = "GeckoImportPanel";
public static final int TITLE_RES = R.string.firstrun_import_title;
private static final int AUTOADVANCE_DELAY_MS = 1500;
// These match the item positions in R.array.pref_import_android_entries.
private static int BOOKMARKS_INDEX = 0;
@ -121,7 +122,13 @@ public class ImportPanel extends FirstrunPanel {
choiceButton.setVisibility(View.GONE);
dialog.dismiss();
next();
ThreadUtils.postDelayedToUiThread(new Runnable() {
@Override
public void run() {
next();
}
}, AUTOADVANCE_DELAY_MS);
}
});
}

View File

@ -57,7 +57,7 @@
<ImageView android:id="@+id/confirm_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="60dp"
android:visibility="gone"
android:src="@drawable/overlay_check"/>