Loading core/java/android/content/Intent.java +21 −0 Original line number Diff line number Diff line Loading @@ -1085,6 +1085,27 @@ public class Intent implements Parcelable { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; /** * Activity Action: Setup wizard to launch after a platform update. This * activity should have a string meta-data field associated with it, * {@link #METADATA_SETUP_VERSION}, which defines the current version of * the platform for setup. The activity will be launched only if * {@link android.provider.Settings.Secure#LAST_SETUP_SHOWN} is not the * same value. * <p>Input: Nothing. * <p>Output: Nothing. * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP"; /** * A string associated with a {@link #ACTION_UPGRADE_SETUP} activity * describing the last run version of the platform that was setup. * @hide */ public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent broadcast actions (see action variable). Loading core/java/android/provider/Settings.java +7 −0 Original line number Diff line number Diff line Loading @@ -2260,6 +2260,13 @@ public final class Settings { */ public static final String BACKUP_TRANSPORT = "backup_transport"; /** * Version for which the setup wizard was last shown. Bumped for * each release when there is new setup information to show. * @hide */ public static final String LAST_SETUP_SHOWN = "last_setup_shown"; /** * Helper method for determining if a location provider is enabled. * @param cr the content resolver to use Loading services/java/com/android/server/WindowManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -2332,6 +2332,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo if (!mDisplayFrozen) { if (mNextAppTransition == WindowManagerPolicy.TRANSIT_NONE) { mNextAppTransition = transit; } else if (transit == WindowManagerPolicy.TRANSIT_TASK_OPEN && mNextAppTransition == WindowManagerPolicy.TRANSIT_TASK_CLOSE) { // Opening a new task always supersedes a close for the anim. mNextAppTransition = transit; } else if (transit == WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN && mNextAppTransition == WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE) { // Opening a new activity always supersedes a close for the anim. mNextAppTransition = transit; } mAppTransitionReady = false; mAppTransitionTimeout = false; Loading services/java/com/android/server/am/ActivityManagerService.java +99 −31 Original line number Diff line number Diff line Loading @@ -751,6 +751,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen int mFactoryTest; boolean mCheckedForSetup; /** * The time at which we will allow normal application switches again, * after a call to {@link #stopAppSwitches()}. Loading Loading @@ -1780,6 +1782,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen r.stopped = true; } // Launch the new version setup screen if needed. We do this -after- // launching the initial activity (that is, home), so that it can have // a chance to initialize itself while in the background, making the // switch back to it faster and look better. startSetupActivityLocked(); return true; } Loading Loading @@ -2361,27 +2369,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } } /** * Ensure that the top activity in the stack is resumed. * * @param prev The previously resumed activity, for when in the process * of pausing; can be null to call from elsewhere. * * @return Returns true if something is being resumed, or false if * nothing happened. */ private final boolean resumeTopActivityLocked(HistoryRecord prev) { // Find the first activity that is not finishing. HistoryRecord next = topRunningActivityLocked(null); // Remember how we'll process this pause/resume situation, and ensure // that the state is reset however we wind up proceeding. final boolean userLeaving = mUserLeaving; mUserLeaving = false; if (next == null) { // There are no more activities! Let's just start up the // Launcher... private boolean startHomeActivityLocked() { if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { // We are running in factory test mode, but unable to find Loading Loading @@ -2412,9 +2400,89 @@ public final class ActivityManagerService extends ActivityManagerNative implemen null, null, 0, 0, 0, false, false); } } return true; } /** * Starts the "new version setup screen" if appropriate. */ private void startSetupActivityLocked() { // Only do this once per boot. if (mCheckedForSetup) { return; } // We will show this screen if the current one is a different // version than the last one shown, and we are not running in // low-level factory test mode. final ContentResolver resolver = mContext.getContentResolver(); if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL && Settings.Secure.getInt(resolver, Settings.Secure.DEVICE_PROVISIONED, 0) != 0) { mCheckedForSetup = true; // See if we should be showing the platform update setup UI. Intent intent = new Intent(Intent.ACTION_UPGRADE_SETUP); List<ResolveInfo> ris = mSelf.mContext.getPackageManager() .queryIntentActivities(intent, PackageManager.GET_META_DATA); // We don't allow third party apps to replace this. ResolveInfo ri = null; for (int i=0; ris != null && i<ris.size(); i++) { if ((ris.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { ri = ris.get(i); break; } } if (ri != null) { String vers = ri.activityInfo.metaData != null ? ri.activityInfo.metaData.getString(Intent.METADATA_SETUP_VERSION) : null; if (vers == null && ri.activityInfo.applicationInfo.metaData != null) { vers = ri.activityInfo.applicationInfo.metaData.getString( Intent.METADATA_SETUP_VERSION); } String lastVers = Settings.Secure.getString( resolver, Settings.Secure.LAST_SETUP_SHOWN); if (vers != null && !vers.equals(lastVers)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName( ri.activityInfo.packageName, ri.activityInfo.name)); startActivityLocked(null, intent, null, null, 0, ri.activityInfo, null, null, 0, 0, 0, false, false); } } } } /** * Ensure that the top activity in the stack is resumed. * * @param prev The previously resumed activity, for when in the process * of pausing; can be null to call from elsewhere. * * @return Returns true if something is being resumed, or false if * nothing happened. */ private final boolean resumeTopActivityLocked(HistoryRecord prev) { // Find the first activity that is not finishing. HistoryRecord next = topRunningActivityLocked(null); // Remember how we'll process this pause/resume situation, and ensure // that the state is reset however we wind up proceeding. final boolean userLeaving = mUserLeaving; mUserLeaving = false; if (next == null) { // There are no more activities! Let's just start up the // Launcher... return startHomeActivityLocked(); } next.delayedResume = false; // If the top activity is the resumed one, nothing to do. Loading Loading
core/java/android/content/Intent.java +21 −0 Original line number Diff line number Diff line Loading @@ -1085,6 +1085,27 @@ public class Intent implements Parcelable { @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; /** * Activity Action: Setup wizard to launch after a platform update. This * activity should have a string meta-data field associated with it, * {@link #METADATA_SETUP_VERSION}, which defines the current version of * the platform for setup. The activity will be launched only if * {@link android.provider.Settings.Secure#LAST_SETUP_SHOWN} is not the * same value. * <p>Input: Nothing. * <p>Output: Nothing. * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP"; /** * A string associated with a {@link #ACTION_UPGRADE_SETUP} activity * describing the last run version of the platform that was setup. * @hide */ public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Standard intent broadcast actions (see action variable). Loading
core/java/android/provider/Settings.java +7 −0 Original line number Diff line number Diff line Loading @@ -2260,6 +2260,13 @@ public final class Settings { */ public static final String BACKUP_TRANSPORT = "backup_transport"; /** * Version for which the setup wizard was last shown. Bumped for * each release when there is new setup information to show. * @hide */ public static final String LAST_SETUP_SHOWN = "last_setup_shown"; /** * Helper method for determining if a location provider is enabled. * @param cr the content resolver to use Loading
services/java/com/android/server/WindowManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -2332,6 +2332,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo if (!mDisplayFrozen) { if (mNextAppTransition == WindowManagerPolicy.TRANSIT_NONE) { mNextAppTransition = transit; } else if (transit == WindowManagerPolicy.TRANSIT_TASK_OPEN && mNextAppTransition == WindowManagerPolicy.TRANSIT_TASK_CLOSE) { // Opening a new task always supersedes a close for the anim. mNextAppTransition = transit; } else if (transit == WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN && mNextAppTransition == WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE) { // Opening a new activity always supersedes a close for the anim. mNextAppTransition = transit; } mAppTransitionReady = false; mAppTransitionTimeout = false; Loading
services/java/com/android/server/am/ActivityManagerService.java +99 −31 Original line number Diff line number Diff line Loading @@ -751,6 +751,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen int mFactoryTest; boolean mCheckedForSetup; /** * The time at which we will allow normal application switches again, * after a call to {@link #stopAppSwitches()}. Loading Loading @@ -1780,6 +1782,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen r.stopped = true; } // Launch the new version setup screen if needed. We do this -after- // launching the initial activity (that is, home), so that it can have // a chance to initialize itself while in the background, making the // switch back to it faster and look better. startSetupActivityLocked(); return true; } Loading Loading @@ -2361,27 +2369,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } } /** * Ensure that the top activity in the stack is resumed. * * @param prev The previously resumed activity, for when in the process * of pausing; can be null to call from elsewhere. * * @return Returns true if something is being resumed, or false if * nothing happened. */ private final boolean resumeTopActivityLocked(HistoryRecord prev) { // Find the first activity that is not finishing. HistoryRecord next = topRunningActivityLocked(null); // Remember how we'll process this pause/resume situation, and ensure // that the state is reset however we wind up proceeding. final boolean userLeaving = mUserLeaving; mUserLeaving = false; if (next == null) { // There are no more activities! Let's just start up the // Launcher... private boolean startHomeActivityLocked() { if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { // We are running in factory test mode, but unable to find Loading Loading @@ -2412,9 +2400,89 @@ public final class ActivityManagerService extends ActivityManagerNative implemen null, null, 0, 0, 0, false, false); } } return true; } /** * Starts the "new version setup screen" if appropriate. */ private void startSetupActivityLocked() { // Only do this once per boot. if (mCheckedForSetup) { return; } // We will show this screen if the current one is a different // version than the last one shown, and we are not running in // low-level factory test mode. final ContentResolver resolver = mContext.getContentResolver(); if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL && Settings.Secure.getInt(resolver, Settings.Secure.DEVICE_PROVISIONED, 0) != 0) { mCheckedForSetup = true; // See if we should be showing the platform update setup UI. Intent intent = new Intent(Intent.ACTION_UPGRADE_SETUP); List<ResolveInfo> ris = mSelf.mContext.getPackageManager() .queryIntentActivities(intent, PackageManager.GET_META_DATA); // We don't allow third party apps to replace this. ResolveInfo ri = null; for (int i=0; ris != null && i<ris.size(); i++) { if ((ris.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { ri = ris.get(i); break; } } if (ri != null) { String vers = ri.activityInfo.metaData != null ? ri.activityInfo.metaData.getString(Intent.METADATA_SETUP_VERSION) : null; if (vers == null && ri.activityInfo.applicationInfo.metaData != null) { vers = ri.activityInfo.applicationInfo.metaData.getString( Intent.METADATA_SETUP_VERSION); } String lastVers = Settings.Secure.getString( resolver, Settings.Secure.LAST_SETUP_SHOWN); if (vers != null && !vers.equals(lastVers)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(new ComponentName( ri.activityInfo.packageName, ri.activityInfo.name)); startActivityLocked(null, intent, null, null, 0, ri.activityInfo, null, null, 0, 0, 0, false, false); } } } } /** * Ensure that the top activity in the stack is resumed. * * @param prev The previously resumed activity, for when in the process * of pausing; can be null to call from elsewhere. * * @return Returns true if something is being resumed, or false if * nothing happened. */ private final boolean resumeTopActivityLocked(HistoryRecord prev) { // Find the first activity that is not finishing. HistoryRecord next = topRunningActivityLocked(null); // Remember how we'll process this pause/resume situation, and ensure // that the state is reset however we wind up proceeding. final boolean userLeaving = mUserLeaving; mUserLeaving = false; if (next == null) { // There are no more activities! Let's just start up the // Launcher... return startHomeActivityLocked(); } next.delayedResume = false; // If the top activity is the resumed one, nothing to do. Loading