diff --git a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java index d78da8e..c15900f 100644 --- a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java +++ b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java @@ -191,6 +191,13 @@ public abstract class AbstractSetupData extends BroadcastReceiver implements Set } } + @Override + public void addFinishRunnable(Runnable runnable) { + for (int i = 0; i < mListeners.size(); i++) { + mListeners.get(i).addFinishRunnable(runnable); + } + } + public Bundle save() { Bundle bundle = new Bundle(); for (Page page : mPageList.values()) { diff --git a/src/com/cyanogenmod/setupwizard/setup/CyanogenSettingsPage.java b/src/com/cyanogenmod/setupwizard/setup/CyanogenSettingsPage.java index 2ff4afa..49b04ee 100644 --- a/src/com/cyanogenmod/setupwizard/setup/CyanogenSettingsPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/CyanogenSettingsPage.java @@ -123,9 +123,14 @@ public class CyanogenSettingsPage extends SetupPage { @Override public void onFinishSetup() { - if (getData().containsKey(KEY_ENABLE_NAV_KEYS)) { - writeDisableNavkeysOption(mContext, getData().getBoolean(KEY_ENABLE_NAV_KEYS)); - } + getCallbacks().addFinishRunnable(new Runnable() { + @Override + public void run() { + if (getData().containsKey(KEY_ENABLE_NAV_KEYS)) { + writeDisableNavkeysOption(mContext, getData().getBoolean(KEY_ENABLE_NAV_KEYS)); + } + } + }); handleWhisperPushRegistration(); handleEnableMetrics(); handleDefaultThemeSetup(); diff --git a/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java b/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java index b4127a6..6b4982b 100644 --- a/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java +++ b/src/com/cyanogenmod/setupwizard/setup/SetupDataCallbacks.java @@ -26,4 +26,5 @@ public interface SetupDataCallbacks { boolean isCurrentPage(Page page); Page getPage(String key); Page getPage(int key); + void addFinishRunnable(Runnable runnable); } diff --git a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java index 7434cad..3f0d6d6 100644 --- a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java +++ b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java @@ -47,6 +47,8 @@ import com.cyanogenmod.setupwizard.setup.SetupDataCallbacks; import com.cyanogenmod.setupwizard.util.EnableAccessibilityController; import com.cyanogenmod.setupwizard.util.SetupWizardUtils; +import java.util.ArrayList; + public class SetupWizardActivity extends Activity implements SetupDataCallbacks { @@ -69,6 +71,8 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks private volatile boolean mIsFinishing = false; + private final ArrayList mFinishRunnables = new ArrayList(); + private ThemeManager.ThemeChangeListener mThemeChangeListener = new ThemeManager.ThemeChangeListener() { @Override public void onProgress(int progress) { @@ -273,6 +277,11 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks return mSetupData.isCurrentPage(page); } + @Override + public void addFinishRunnable(Runnable runnable) { + mFinishRunnables.add(runnable); + } + @Override public void onFinish() { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); @@ -313,6 +322,9 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks @Override public void finish() { super.finish(); + for (Runnable runnable : mFinishRunnables) { + runnable.run(); + } overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } @@ -390,21 +402,28 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks } private void finalizeSetup() { - Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); - Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1); + mFinishRunnables.add(new Runnable() { + @Override + public void run() { + Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.USER_SETUP_COMPLETE, 1); + if (mEnableAccessibilityController != null) { + mEnableAccessibilityController.onDestroy(); + } + SetupWizardUtils.disableGMSSetupWizard(SetupWizardActivity.this); + SetupWizardUtils.disableSetupWizard(SetupWizardActivity.this); + final ThemeManager tm = + (ThemeManager) SetupWizardActivity.this.getSystemService(THEME_SERVICE); + tm.removeClient(mThemeChangeListener); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + startActivity(intent); + final WallpaperManager wallpaperManager = + WallpaperManager.getInstance(SetupWizardActivity.this); + wallpaperManager.forgetLoadedWallpaper(); + } + }); finish(); - if (mEnableAccessibilityController != null) { - mEnableAccessibilityController.onDestroy(); - } - SetupWizardUtils.disableGMSSetupWizard(this); - SetupWizardUtils.disableSetupWizard(this); - final ThemeManager tm = (ThemeManager) this.getSystemService(THEME_SERVICE); - tm.removeClient(mThemeChangeListener); - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_HOME); - startActivity(intent); - final WallpaperManager wallpaperManager = - WallpaperManager.getInstance(SetupWizardActivity.this); - wallpaperManager.forgetLoadedWallpaper(); } }