diff --git a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java index 105facf..edae5c6 100644 --- a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java +++ b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java @@ -135,6 +135,21 @@ public abstract class AbstractSetupData extends BroadcastReceiver implements Set doPreviousNext(runnable); } + @Override + public void setCurrentPage(String key) { + if (mPageList.getPage(key) != null) { + mCurrentPageIndex = mPageList.getPageIndex(key); + } + } + + public Page getNextPage(String key) { + if (mPageList.getPage(key) != null) { + int currentPageIndex = mPageList.getPageIndex(key); + return mPageList.getPage(currentPageIndex + 1); + } + return null; + } + private boolean advanceToNextUnhidden() { while (mCurrentPageIndex < mPageList.size()) { mCurrentPageIndex++; diff --git a/src/com/cyanogenmod/setupwizard/setup/PageList.java b/src/com/cyanogenmod/setupwizard/setup/PageList.java index 6709d47..dcb5bc1 100644 --- a/src/com/cyanogenmod/setupwizard/setup/PageList.java +++ b/src/com/cyanogenmod/setupwizard/setup/PageList.java @@ -16,6 +16,8 @@ package com.cyanogenmod.setupwizard.setup; +import android.text.TextUtils; + import java.util.LinkedHashMap; public class PageList extends LinkedHashMap { @@ -30,6 +32,17 @@ public class PageList extends LinkedHashMap { return get(key); } + public int getPageIndex(String key) { + int i=0; + for (Page page : values()) { + if (TextUtils.equals(page.getKey(), key)) { + return i; + } + i++; + } + return i; + } + public Page getPage(int index) { int i=0; for (Page page : values()) { diff --git a/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java b/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java index 6b4982b..338c838 100644 --- a/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java +++ b/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java @@ -26,5 +26,6 @@ public interface SetupDataCallbacks { boolean isCurrentPage(Page page); Page getPage(String key); Page getPage(int key); + void setCurrentPage(String key); void addFinishRunnable(Runnable runnable); } diff --git a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java index 4a53c17..b3f2db4 100644 --- a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java +++ b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.app.Activity; import android.app.WallpaperManager; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.res.Resources; import android.graphics.Bitmap; @@ -28,7 +29,9 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.UserHandle; +import android.preference.PreferenceManager; import android.provider.Settings; +import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewAnimationUtils; @@ -42,6 +45,7 @@ import com.cyanogenmod.setupwizard.R; import com.cyanogenmod.setupwizard.SetupWizardApp; import com.cyanogenmod.setupwizard.cmstats.SetupStats; import com.cyanogenmod.setupwizard.setup.CMSetupWizardData; +import com.cyanogenmod.setupwizard.setup.GmsAccountPage; import com.cyanogenmod.setupwizard.setup.Page; import com.cyanogenmod.setupwizard.setup.SetupDataCallbacks; import com.cyanogenmod.setupwizard.util.EnableAccessibilityController; @@ -56,6 +60,7 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks, ThemeManager.ThemeChangeListener { private static final String TAG = SetupWizardActivity.class.getSimpleName(); + private static final String KEY_LAST_PAGE_TAG = "last_page_tag"; private static final int UI_FLAGS = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN @@ -143,6 +148,27 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks, if (savedInstanceState != null && savedInstanceState.containsKey("data")) { mSetupData.load(savedInstanceState.getBundle("data")); } + + final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + if (sharedPreferences.contains(KEY_LAST_PAGE_TAG)) { + final String lastPage = sharedPreferences.getString(KEY_LAST_PAGE_TAG, + mSetupData.getCurrentPage().getKey()); + final boolean backupEnabled = (Settings.Secure.getInt(getContentResolver(), + Settings.Secure.BACKUP_AUTO_RESTORE, 0) == 1) || + (Settings.Secure.getInt(getContentResolver(), + Settings.Secure.BACKUP_ENABLED, 0) == 1); + if (TextUtils.equals(lastPage, GmsAccountPage.TAG) && backupEnabled) { + // We probably already restored, skip ahead! + mSetupData.setCurrentPage(mSetupData.getNextPage(lastPage).getKey()); + } else { + // else just restore + mSetupData.setCurrentPage(sharedPreferences.getString(KEY_LAST_PAGE_TAG, + mSetupData.getCurrentPage().getKey())); + } + Page page = mSetupData.getCurrentPage(); + page.doLoadAction(getFragmentManager(), Page.ACTION_NEXT); + } + mEnableAccessibilityController = EnableAccessibilityController.getInstance(getApplicationContext()); mRootView.setOnTouchListener(new View.OnTouchListener() { @@ -190,6 +216,8 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks, protected void onDestroy() { super.onDestroy(); if (mSetupData != null) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + prefs.edit().putString(KEY_LAST_PAGE_TAG, mSetupData.getCurrentPage().getKey()).apply(); mSetupData.onDestroy(); mSetupData.unregisterListener(this); unregisterReceiver(mSetupData); @@ -230,6 +258,14 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks, } } + @Override + public void setCurrentPage(String key) { + Page page = mSetupData.getCurrentPage(); + if (!isFinishing()) { + page.doLoadAction(getFragmentManager(), Page.ACTION_NEXT); + } + } + @Override public void onPageLoaded(Page page) { updateButtonBar();