SetupWizard: Fix scenario where GMS setup disables its components
Change-Id: Ia8edd39645f83625ff06fb61903b672b774257d6
This commit is contained in:
parent
77c129f8b9
commit
79840ecb4e
|
@ -125,6 +125,7 @@ public class GmsAccountPage extends SetupPage {
|
||||||
}
|
}
|
||||||
} else if (requestCode == SetupWizardApp.REQUEST_CODE_RESTORE_GMS) {
|
} else if (requestCode == SetupWizardApp.REQUEST_CODE_RESTORE_GMS) {
|
||||||
handleResult(resultCode);
|
handleResult(resultCode);
|
||||||
|
setHidden(true);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -150,6 +151,8 @@ public class GmsAccountPage extends SetupPage {
|
||||||
|
|
||||||
private static void launchGmsRestorePage(final Activity activity) {
|
private static void launchGmsRestorePage(final Activity activity) {
|
||||||
try {
|
try {
|
||||||
|
// GMS can disable this after logging in sometimes
|
||||||
|
SetupWizardUtils.enableGMSSetupWizard(activity);
|
||||||
Intent intent = new Intent(ACTION_RESTORE);
|
Intent intent = new Intent(ACTION_RESTORE);
|
||||||
intent.putExtra(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
intent.putExtra(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
||||||
intent.putExtra(SetupWizardApp.EXTRA_USE_IMMERSIVE, true);
|
intent.putExtra(SetupWizardApp.EXTRA_USE_IMMERSIVE, true);
|
||||||
|
@ -169,7 +172,7 @@ public class GmsAccountPage extends SetupPage {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
// XXX: In open source, we don't know what gms version a user has.
|
// XXX: In open source, we don't know what gms version a user has.
|
||||||
// Bail if the restore activity is not found.
|
// Bail if the restore activity is not found.
|
||||||
((SetupWizardActivity)activity).onNextPage();
|
((SetupWizardActivity) activity).onNextPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ package com.cyanogenmod.setupwizard.ui;
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AppGlobals;
|
|
||||||
import android.app.WallpaperManager;
|
import android.app.WallpaperManager;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
@ -305,18 +304,23 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks
|
||||||
}
|
}
|
||||||
|
|
||||||
private void finishSetup() {
|
private void finishSetup() {
|
||||||
|
SetupWizardApp setupWizardApp = (SetupWizardApp)getApplication();
|
||||||
if (!mIsGuestUser) {
|
if (!mIsGuestUser) {
|
||||||
getApplication().sendBroadcastAsUser(new Intent(SetupWizardApp.ACTION_FINISHED),
|
setupWizardApp.sendBroadcastAsUser(new Intent(SetupWizardApp.ACTION_FINISHED),
|
||||||
UserHandle.getCallingUserHandle());
|
UserHandle.getCallingUserHandle());
|
||||||
}
|
}
|
||||||
mSetupData.finishPages();
|
mSetupData.finishPages();
|
||||||
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
|
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
|
||||||
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
|
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
|
||||||
((SetupWizardApp)AppGlobals.getInitialApplication()).enableStatusBar();
|
setupWizardApp.enableStatusBar();
|
||||||
finish();
|
finish();
|
||||||
if (mEnableAccessibilityController != null) {
|
if (mEnableAccessibilityController != null) {
|
||||||
mEnableAccessibilityController.onDestroy();
|
mEnableAccessibilityController.onDestroy();
|
||||||
}
|
}
|
||||||
SetupWizardUtils.disableSetupWizards(this);
|
SetupWizardUtils.disableGMSSetupWizard(this);
|
||||||
|
SetupWizardUtils.disableSetupWizard(this);
|
||||||
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||||
|
intent.addCategory(Intent.CATEGORY_HOME);
|
||||||
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,9 @@ import android.app.ActivityOptions;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ComponentInfo;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
|
@ -31,14 +32,13 @@ import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.cyanogenmod.setupwizard.SetupWizardApp;
|
import com.cyanogenmod.setupwizard.SetupWizardApp;
|
||||||
|
|
||||||
import com.google.android.gms.common.ConnectionResult;
|
import com.google.android.gms.common.ConnectionResult;
|
||||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
import com.google.android.gms.common.GooglePlayServicesUtil;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SetupWizardUtils {
|
public class SetupWizardUtils {
|
||||||
|
|
||||||
private static final String TAG = SetupWizardUtils.class.getSimpleName();
|
private static final String TAG = SetupWizardUtils.class.getSimpleName();
|
||||||
|
@ -160,24 +160,72 @@ public class SetupWizardUtils {
|
||||||
return AccountManager.get(context).getAccountsByType(accountType).length > 0;
|
return AccountManager.get(context).getAccountsByType(accountType).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void disableSetupWizards(Activity context) {
|
public static void disableSetupWizard(Activity context) {
|
||||||
Intent intent = new Intent(Intent.ACTION_MAIN);
|
disableComponent(context, context.getPackageName(),
|
||||||
intent.addCategory(Intent.CATEGORY_HOME);
|
"com.cyanogenmod.setupwizard.ui.SetupWizardActivity");
|
||||||
final PackageManager pm = context.getPackageManager();
|
}
|
||||||
final List<ResolveInfo> resolveInfos =
|
|
||||||
pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
|
public static void disableGMSSetupWizard(Activity context) {
|
||||||
for (ResolveInfo info : resolveInfos) {
|
try {
|
||||||
if (GOOGLE_SETUPWIZARD_PACKAGE.equals(info.activityInfo.packageName)) {
|
PackageInfo packageInfo = context.getPackageManager()
|
||||||
final ComponentName componentName =
|
.getPackageInfo(GOOGLE_SETUPWIZARD_PACKAGE,
|
||||||
new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
|
PackageManager.GET_ACTIVITIES |
|
||||||
pm.setComponentEnabledSetting(componentName,
|
PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES);
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
disableComponentArray(context, packageInfo.activities);
|
||||||
0);
|
disableComponentArray(context, packageInfo.services);
|
||||||
|
disableComponentArray(context, packageInfo.receivers);
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
Log.e(TAG, "Enable to disable GMS");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enableGMSSetupWizard(Activity context) {
|
||||||
|
try {
|
||||||
|
PackageInfo packageInfo = context.getPackageManager()
|
||||||
|
.getPackageInfo(GOOGLE_SETUPWIZARD_PACKAGE,
|
||||||
|
PackageManager.GET_ACTIVITIES |
|
||||||
|
PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES);
|
||||||
|
enableComponentArray(context, packageInfo.activities);
|
||||||
|
enableComponentArray(context, packageInfo.services);
|
||||||
|
enableComponentArray(context, packageInfo.receivers);
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
Log.e(TAG, "Unable to disable GMS");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void disableComponentArray(Activity context, ComponentInfo[] components) {
|
||||||
|
if(components != null) {
|
||||||
|
ComponentInfo[] componentInfos = components;
|
||||||
|
for(int i = 0; i < componentInfos.length; i++) {
|
||||||
|
disableComponent(context, componentInfos[i].packageName, componentInfos[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pm.setComponentEnabledSetting(context.getComponentName(),
|
}
|
||||||
|
|
||||||
|
private static void disableComponent(Activity context, String packageName, String name) {
|
||||||
|
disableComponent(context, new ComponentName(packageName, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void disableComponent(Activity context, ComponentName component) {
|
||||||
|
context.getPackageManager().setComponentEnabledSetting(component,
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
|
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
}
|
||||||
context.startActivity(intent);
|
|
||||||
|
private static void enableComponentArray(Activity context, ComponentInfo[] components) {
|
||||||
|
if(components != null) {
|
||||||
|
ComponentInfo[] componentInfos = components;
|
||||||
|
for(int i = 0; i < componentInfos.length; i++) {
|
||||||
|
enableComponent(context, componentInfos[i].packageName, componentInfos[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void enableComponent(Activity context, String packageName, String name) {
|
||||||
|
enableComponent(context, new ComponentName(packageName, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void enableComponent(Activity context, ComponentName component) {
|
||||||
|
context.getPackageManager().setComponentEnabledSetting(component,
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,10 @@ package com.cyanogenmod.setupwizard.tests;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ComponentInfo;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
@ -58,13 +61,19 @@ public class ManualTestActivity extends Activity {
|
||||||
Intent intent = new Intent("android.intent.action.MAIN");
|
Intent intent = new Intent("android.intent.action.MAIN");
|
||||||
intent.addCategory("android.intent.category.HOME");
|
intent.addCategory("android.intent.category.HOME");
|
||||||
final PackageManager pm = getPackageManager();
|
final PackageManager pm = getPackageManager();
|
||||||
ComponentName componentName = new ComponentName("com.cyanogenmod.setupwizard", "com.cyanogenmod.setupwizard.ui.SetupWizardActivity");
|
ComponentName componentName = new ComponentName("com.cyanogenmod.setupwizard",
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
"com.cyanogenmod.setupwizard.ui.SetupWizardActivity");
|
||||||
|
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||||
|
PackageManager.DONT_KILL_APP);
|
||||||
|
pm.clearApplicationUserData("com.cyanogenmod.setupwizard", null);
|
||||||
try {
|
try {
|
||||||
componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.SetupWizardActivity");
|
PackageInfo packageInfo = getPackageManager()
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
.getPackageInfo("com.google.android.setupwizard",
|
||||||
componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.WizardManager");
|
PackageManager.GET_ACTIVITIES |
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES);
|
||||||
|
enableComponentArray(packageInfo.activities);
|
||||||
|
enableComponentArray(packageInfo.services);
|
||||||
|
enableComponentArray(packageInfo.receivers);
|
||||||
pm.clearApplicationUserData("com.google.android.setupwizard", null);
|
pm.clearApplicationUserData("com.google.android.setupwizard", null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Toast.makeText(this, "GMS not installed", Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, "GMS not installed", Toast.LENGTH_SHORT).show();
|
||||||
|
@ -82,10 +91,13 @@ public class ManualTestActivity extends Activity {
|
||||||
Intent intent = new Intent("android.intent.action.MAIN");
|
Intent intent = new Intent("android.intent.action.MAIN");
|
||||||
intent.addCategory("android.intent.category.HOME");
|
intent.addCategory("android.intent.category.HOME");
|
||||||
final PackageManager pm = getPackageManager();
|
final PackageManager pm = getPackageManager();
|
||||||
ComponentName componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.SetupWizardActivity");
|
PackageInfo packageInfo = this.getPackageManager()
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
.getPackageInfo("com.google.android.setupwizard",
|
||||||
componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.WizardManager");
|
PackageManager.GET_ACTIVITIES |
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES);
|
||||||
|
enableComponentArray(packageInfo.activities);
|
||||||
|
enableComponentArray(packageInfo.services);
|
||||||
|
enableComponentArray(packageInfo.receivers);
|
||||||
pm.clearApplicationUserData("com.google.android.setupwizard", null);
|
pm.clearApplicationUserData("com.google.android.setupwizard", null);
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | intent.getFlags());
|
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | intent.getFlags());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
@ -102,13 +114,19 @@ public class ManualTestActivity extends Activity {
|
||||||
Intent intent = new Intent("android.intent.action.MAIN");
|
Intent intent = new Intent("android.intent.action.MAIN");
|
||||||
intent.addCategory("android.intent.category.HOME");
|
intent.addCategory("android.intent.category.HOME");
|
||||||
final PackageManager pm = getPackageManager();
|
final PackageManager pm = getPackageManager();
|
||||||
ComponentName componentName = new ComponentName("com.cyanogenmod.setupwizard", "com.cyanogenmod.setupwizard.ui.SetupWizardActivity");
|
ComponentName componentName = new ComponentName("com.cyanogenmod.setupwizard",
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
"com.cyanogenmod.setupwizard.ui.SetupWizardActivity");
|
||||||
|
pm.setComponentEnabledSetting(componentName,
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
||||||
try {
|
try {
|
||||||
componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.SetupWizardActivity");
|
PackageInfo packageInfo = this.getPackageManager()
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
.getPackageInfo("com.google.android.setupwizard",
|
||||||
componentName = new ComponentName("com.google.android.setupwizard", "com.google.android.setupwizard.WizardManager");
|
PackageManager.GET_ACTIVITIES |
|
||||||
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
|
PackageManager.GET_RECEIVERS | PackageManager.GET_SERVICES);
|
||||||
|
enableComponentArray(packageInfo.activities);
|
||||||
|
enableComponentArray(packageInfo.services);
|
||||||
|
enableComponentArray(packageInfo.receivers);
|
||||||
|
pm.clearApplicationUserData("com.google.android.setupwizard", null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Toast.makeText(this, "GMS not installed", Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, "GMS not installed", Toast.LENGTH_SHORT).show();
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -118,4 +136,22 @@ public class ManualTestActivity extends Activity {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void enableComponentArray(ComponentInfo[] components) {
|
||||||
|
if(components != null) {
|
||||||
|
ComponentInfo[] componentInfos = components;
|
||||||
|
for(int i = 0; i < componentInfos.length; i++) {
|
||||||
|
enableComponent(componentInfos[i].packageName, componentInfos[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableComponent(String packageName, String name) {
|
||||||
|
enableComponent(new ComponentName(packageName, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableComponent(ComponentName component) {
|
||||||
|
getPackageManager().setComponentEnabledSetting(component,
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 1);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue