SetupWizard: Better handling of launching into other activities

Change-Id: I4d8dc4a1b25e45c6ff35042239a0adf4c16458f1
(cherry picked from commit ed5d46703ea6aac1c912be114523688f3f8219e8)
This commit is contained in:
cretin45 2015-03-17 15:18:16 -07:00 committed by Gerrit Code Review
parent 88aba00aa3
commit dbc1ceb8ca
9 changed files with 106 additions and 63 deletions

View File

@ -28,6 +28,7 @@ import android.app.FragmentManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import com.cyanogenmod.setupwizard.R; import com.cyanogenmod.setupwizard.R;
import com.cyanogenmod.setupwizard.SetupWizardApp; import com.cyanogenmod.setupwizard.SetupWizardApp;
@ -83,17 +84,13 @@ public class CyanogenServicesPage extends SetupPage {
if (!SetupWizardUtils.accountExists(mContext, if (!SetupWizardUtils.accountExists(mContext,
mContext.getString(R.string.cm_account_type))) { mContext.getString(R.string.cm_account_type))) {
super.doLoadAction(fragmentManager, action); super.doLoadAction(fragmentManager, action);
launchCyanogenAccountSetup();
} else { } else {
getCallbacks().onNextPage(); getCallbacks().onNextPage();
} }
} }
} }
@Override
public void onFragmentReady() {
launchCyanogenAccountSetup();
}
@Override @Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_CYANOGEN) { if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_CYANOGEN) {
@ -127,6 +124,7 @@ public class CyanogenServicesPage extends SetupPage {
null, new AccountManagerCallback<Bundle>() { null, new AccountManagerCallback<Bundle>() {
@Override @Override
public void run(AccountManagerFuture<Bundle> future) { public void run(AccountManagerFuture<Bundle> future) {
boolean error = false;
try { try {
Bundle result = future.getResult(); Bundle result = future.getResult();
Intent intent = result Intent intent = result
@ -135,24 +133,26 @@ public class CyanogenServicesPage extends SetupPage {
ActivityOptions.makeCustomAnimation(mContext, ActivityOptions.makeCustomAnimation(mContext,
android.R.anim.fade_in, android.R.anim.fade_in,
android.R.anim.fade_out); android.R.anim.fade_out);
if (!mFragment.isDetached()) { SetupStats
SetupStats .addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD,
.addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD, SetupStats.Action.EXTERNAL_PAGE_LAUNCH,
SetupStats.Action.EXTERNAL_PAGE_LAUNCH, SetupStats.Label.PAGE,
SetupStats.Label.PAGE, SetupStats.Label.CYANOGEN_ACCOUNT);
SetupStats.Label.CYANOGEN_ACCOUNT); mFragment.startActivityForResult(intent,
mFragment.startActivityForResult(intent, SetupWizardApp.REQUEST_CODE_SETUP_CYANOGEN,
SetupWizardApp.REQUEST_CODE_SETUP_CYANOGEN, options.toBundle());
options.toBundle());
} else {
if (getCallbacks().
isCurrentPage(CyanogenServicesPage.this)) {
getCallbacks().onNextPage();
}
}
} catch (OperationCanceledException e) { } catch (OperationCanceledException e) {
error = true;
} catch (IOException e) { } catch (IOException e) {
error = true;
} catch (AuthenticatorException e) { } catch (AuthenticatorException e) {
Log.e(TAG, "Error launching cm account", e);
error = true;
} finally {
if (error && getCallbacks().
isCurrentPage(CyanogenServicesPage.this)) {
getCallbacks().onNextPage();
}
} }
} }
}, null); }, null);

View File

@ -114,14 +114,10 @@ public class GmsAccountPage extends SetupPage {
getCallbacks().onPreviousPage(); getCallbacks().onPreviousPage();
} else { } else {
super.doLoadAction(fragmentManager, action); super.doLoadAction(fragmentManager, action);
launchGmsAccountSetup();
} }
} }
@Override
public void onFragmentReady() {
launchGmsAccountSetup();
}
@Override @Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_GMS) { if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_GMS) {
@ -217,6 +213,7 @@ public class GmsAccountPage extends SetupPage {
bundle, null, new AccountManagerCallback<Bundle>() { bundle, null, new AccountManagerCallback<Bundle>() {
@Override @Override
public void run(AccountManagerFuture<Bundle> future) { public void run(AccountManagerFuture<Bundle> future) {
boolean error = false;
try { try {
Bundle result = future.getResult(); Bundle result = future.getResult();
Intent intent = result Intent intent = result
@ -225,20 +222,23 @@ public class GmsAccountPage extends SetupPage {
ActivityOptions.makeCustomAnimation(mContext, ActivityOptions.makeCustomAnimation(mContext,
android.R.anim.fade_in, android.R.anim.fade_in,
android.R.anim.fade_out); android.R.anim.fade_out);
if (!mFragment.isDetached()) { SetupStats.addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD,
SetupStats.addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD, SetupStats.Action.EXTERNAL_PAGE_LAUNCH,
SetupStats.Action.EXTERNAL_PAGE_LAUNCH, SetupStats.Label.PAGE, SetupStats.Label.GMS_ACCOUNT);
SetupStats.Label.PAGE, SetupStats.Label.GMS_ACCOUNT); mFragment.startActivityForResult(intent,
mFragment.startActivityForResult(intent, SetupWizardApp.REQUEST_CODE_SETUP_GMS, options.toBundle());
SetupWizardApp.REQUEST_CODE_SETUP_GMS, options.toBundle());
} else {
if (getCallbacks().isCurrentPage(GmsAccountPage.this)) {
getCallbacks().onNextPage();
}
}
} catch (OperationCanceledException e) { } catch (OperationCanceledException e) {
error = true;
} catch (IOException e) { } catch (IOException e) {
error = true;
} catch (AuthenticatorException e) { } catch (AuthenticatorException e) {
Log.e(TAG, "Error launching gms account", e);
error = true;
} finally {
if (error && getCallbacks().
isCurrentPage(GmsAccountPage.this)) {
getCallbacks().onNextPage();
}
} }
} }
}, null); }, null);

View File

@ -136,18 +136,13 @@ public class OtherSettingsPage extends SetupPage {
} }
}; };
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mContentResolver = getActivity().getContentResolver();
mBackupManager = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE));
}
@Override @Override
protected void initializePage() { protected void initializePage() {
final boolean hasGms = SetupWizardUtils.hasGMS(getActivity()); final boolean hasGms = SetupWizardUtils.hasGMS(getActivity());
final boolean hasTelephony = SetupWizardUtils.hasTelephony(getActivity()); final boolean hasTelephony = SetupWizardUtils.hasTelephony(getActivity());
mContentResolver = getActivity().getContentResolver();
mBackupManager = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE));
TextView summaryView = (TextView) mRootView.findViewById(android.R.id.summary); TextView summaryView = (TextView) mRootView.findViewById(android.R.id.summary);
if (hasGms) { if (hasGms) {
String privacy_policy = getString(R.string.services_privacy_policy); String privacy_policy = getString(R.string.services_privacy_policy);

View File

@ -43,7 +43,6 @@ public interface Page {
public boolean doPreviousAction(); public boolean doPreviousAction();
public boolean doNextAction(); public boolean doNextAction();
public void doLoadAction(FragmentManager fragmentManager, int action); public void doLoadAction(FragmentManager fragmentManager, int action);
public void onFragmentReady();
public void onFinishSetup(); public void onFinishSetup();
public boolean onActivityResult(int requestCode, int resultCode, Intent data); public boolean onActivityResult(int requestCode, int resultCode, Intent data);
public SetupDataCallbacks getCallbacks(); public SetupDataCallbacks getCallbacks();

View File

@ -96,9 +96,6 @@ public abstract class SetupPage implements Page {
} }
} }
@Override
public void onFragmentReady(){}
@Override @Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
return false; return false;

View File

@ -136,8 +136,10 @@ public class WifiSetupPage extends SetupPage {
return R.string.loading; return R.string.loading;
} }
@Override @Override
public void onFragmentReady() { public void doLoadAction(FragmentManager fragmentManager, int action) {
super.doLoadAction(fragmentManager, action);
launchWifiSetup(); launchWifiSetup();
} }

View File

@ -16,9 +16,39 @@
package com.cyanogenmod.setupwizard.ui; package com.cyanogenmod.setupwizard.ui;
import android.content.Intent;
import android.os.Bundle;
import com.cyanogenmod.setupwizard.R; import com.cyanogenmod.setupwizard.R;
public class LoadingFragment extends SetupPageFragment { public class LoadingFragment extends SetupPageFragment {
private StartActivityForResultRunnable mStartActivityForResultRunnable;
@Override
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
if (isResumed()) {
super.startActivityForResult(intent, requestCode, options);
} else {
mStartActivityForResultRunnable =
new StartActivityForResultRunnable(this, intent, requestCode, options);
}
}
@Override
public void onResume() {
super.onResume();
if (mStartActivityForResultRunnable != null) {
mStartActivityForResultRunnable.run();
}
}
@Override
public void onPause() {
super.onPause();
mStartActivityForResultRunnable = null;
}
@Override @Override
protected void initializePage() {} protected void initializePage() {}
@ -26,4 +56,26 @@ public class LoadingFragment extends SetupPageFragment {
protected int getLayoutResource() { protected int getLayoutResource() {
return R.layout.setup_loading_page; return R.layout.setup_loading_page;
} }
private static class StartActivityForResultRunnable implements Runnable {
private final LoadingFragment mLoadingFragment;
private final Intent mIntent;
private final int mRequestCode;
private final Bundle mOptions;
private StartActivityForResultRunnable(LoadingFragment loadingFragment,
Intent intent, int requestCode, Bundle options) {
mLoadingFragment = loadingFragment;
mIntent = intent;
mRequestCode = requestCode;
mOptions = options;
}
@Override
public void run() {
mLoadingFragment.startActivityForResult(mIntent, mRequestCode, mOptions);
mLoadingFragment.mStartActivityForResultRunnable = null;
}
}
} }

View File

@ -58,22 +58,9 @@ public abstract class SetupPageFragment extends Fragment {
mRootView = inflater.inflate(getLayoutResource(), container, false); mRootView = inflater.inflate(getLayoutResource(), container, false);
mTitleView = (TextView) mRootView.findViewById(android.R.id.title); mTitleView = (TextView) mRootView.findViewById(android.R.id.title);
mHeaderView = (ViewGroup ) mRootView.findViewById(R.id.header); mHeaderView = (ViewGroup ) mRootView.findViewById(R.id.header);
getActivity().startPostponedEnterTransition();
return mRootView; return mRootView;
} }
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mPage = mCallbacks.getPage(mKey);
if (mTitleView != null) {
mTitleView.setText(mPage.getTitleResId());
}
initializePage();
mPage.onFragmentReady();
mCallbacks.onPageLoaded(mPage);
}
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
@ -89,6 +76,18 @@ public abstract class SetupPageFragment extends Fragment {
mCallbacks = null; mCallbacks = null;
} }
@Override
public void onResume() {
super.onResume();
mPage = mCallbacks.getPage(mKey);
if (mTitleView != null) {
mTitleView.setText(mPage.getTitleResId());
}
initializePage();
mCallbacks.onPageLoaded(mPage);
getActivity().startPostponedEnterTransition();
}
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
mPage.onActivityResult(requestCode, resultCode, data); mPage.onActivityResult(requestCode, resultCode, data);

View File

@ -27,7 +27,6 @@ import android.net.NetworkInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;