diff options
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 67d441611e63..453761f5a16e 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -173,7 +173,6 @@ import android.util.UtilConfig; import android.util.proto.ProtoOutputStream; import android.view.Choreographer; import android.view.Display; -import android.view.DisplayAdjustments; import android.view.SurfaceControl; import android.view.ThreadedRenderer; import android.view.View; @@ -244,7 +243,6 @@ import java.util.Objects; import java.util.TimeZone; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Consumer; /** * This manages the execution of the main thread in an @@ -409,7 +407,6 @@ public final class ActivityThread extends ClientTransactionHandler boolean mInstrumentingWithoutRestart; boolean mSystemThread = false; boolean mSomeActivitiesChanged = false; - /* package */ boolean mHiddenApiWarningShown = false; // These can be accessed by multiple threads; mResourcesManager is the lock. // XXX For now we keep around information about all packages we have @@ -438,16 +435,10 @@ public final class ActivityThread extends ClientTransactionHandler @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final ResourcesManager mResourcesManager; - /** The active adjustments that override the {@link DisplayAdjustments} in resources. */ - private ArrayList<Pair<IBinder, Consumer<DisplayAdjustments>>> mActiveRotationAdjustments; - // Registry of remote cancellation transports pending a reply with reply handles. @GuardedBy("this") private @Nullable Map<SafeCancellationTransport, CancellationSignal> mRemoteCancellations; - private final Map<IBinder, Integer> mLastReportedWindowingMode = Collections.synchronizedMap( - new ArrayMap<>()); - private static final class ProviderKey { final String authority; final int userId; @@ -518,8 +509,6 @@ public final class ActivityThread extends ClientTransactionHandler */ private final Object mCoreSettingsLock = new Object(); - boolean mHasImeComponent = false; - private IContentCaptureOptionsCallback.Stub mContentCaptureOptionsCallback = null; /** A client side controller to handle process level configuration changes. */ @@ -599,6 +588,12 @@ public final class ActivityThread extends ClientTransactionHandler /** Whether this activiy was launched from a bubble. */ boolean mLaunchedFromBubble; + /** + * This can be different from the current configuration because a new configuration may not + * always update to activity, e.g. windowing mode change without size change. + */ + int mLastReportedWindowingMode = WINDOWING_MODE_UNDEFINED; + @LifecycleState private int mLifecycleState = PRE_ON_CREATE; @@ -3654,8 +3649,7 @@ public final class ActivityThread extends ClientTransactionHandler "Activity " + r.intent.getComponent().toShortString() + " did not call through to super.onCreate()"); } - mLastReportedWindowingMode.put(activity.getActivityToken(), - config.windowConfiguration.getWindowingMode()); + r.mLastReportedWindowingMode = config.windowConfiguration.getWindowingMode(); } r.setState(ON_CREATE); @@ -5433,7 +5427,6 @@ public final class ActivityThread extends ClientTransactionHandler } } r.setState(ON_DESTROY); - mLastReportedWindowingMode.remove(r.activity.getActivityToken()); schedulePurgeIdler(); synchronized (this) { if (mSplashScreenGlobal != null) { @@ -5865,7 +5858,7 @@ public final class ActivityThread extends ClientTransactionHandler if (r.overrideConfig != null) { r.tmpConfig.updateFrom(r.overrideConfig); } - final Configuration reportedConfig = performActivityConfigurationChanged(r.activity, + final Configuration reportedConfig = performActivityConfigurationChanged(r, r.tmpConfig, r.overrideConfig, displayId, alwaysReportChange); freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(r.tmpConfig)); return reportedConfig; @@ -5873,7 +5866,7 @@ public final class ActivityThread extends ClientTransactionHandler /** * Decides whether to update an Activity's configuration and whether to inform it. - * @param activity The activity to notify of configuration change. + * @param r The activity client record to notify of configuration change. * @param newConfig The new configuration. * @param amOverrideConfig The override config that differentiates the Activity's configuration * from the base global configuration. This is supplied by @@ -5881,29 +5874,29 @@ public final class ActivityThread extends ClientTransactionHandler * @param displayId Id of the display where activity currently resides. * @return Configuration sent to client, null if no changes and not moved to different display. */ - private Configuration performActivityConfigurationChanged(Activity activity, + private Configuration performActivityConfigurationChanged(ActivityClientRecord r, Configuration newConfig, Configuration amOverrideConfig, int displayId, boolean alwaysReportChange) { + final Activity activity = r.activity; final IBinder activityToken = activity.getActivityToken(); // WindowConfiguration differences aren't considered as public, check it separately. // multi-window / pip mode changes, if any, should be sent before the configuration // change callback, see also PinnedStackTests#testConfigurationChangeOrderDuringTransition - handleWindowingModeChangeIfNeeded(activity, newConfig); + handleWindowingModeChangeIfNeeded(r, newConfig); final boolean movedToDifferentDisplay = isDifferentDisplay(activity.getDisplayId(), displayId); final Configuration currentResConfig = activity.getResources().getConfiguration(); final int diff = currentResConfig.diffPublicOnly(newConfig); final boolean hasPublicResConfigChange = diff != 0; - final ActivityClientRecord r = getActivityClient(activityToken); // TODO(b/173090263): Use diff instead after the improvement of AssetManager and // ResourcesImpl constructions. final boolean shouldUpdateResources = hasPublicResConfigChange || shouldUpdateResources(activityToken, currentResConfig, newConfig, amOverrideConfig, movedToDifferentDisplay, hasPublicResConfigChange); final boolean shouldReportChange = shouldReportChange( - activity.mCurrentConfig, newConfig, r != null ? r.mSizeConfigurations : null, + activity.mCurrentConfig, newConfig, r.mSizeConfigurations, activity.mActivityInfo.getRealConfigChanged(), alwaysReportChange); // Nothing significant, don't proceed with updating and reporting. if (!shouldUpdateResources && !shouldReportChange) { @@ -6012,12 +6005,11 @@ public final class ActivityThread extends ClientTransactionHandler * See also {@link Activity#onMultiWindowModeChanged(boolean, Configuration)} and * {@link Activity#onPictureInPictureModeChanged(boolean, Configuration)} */ - private void handleWindowingModeChangeIfNeeded(Activity activity, + private void handleWindowingModeChangeIfNeeded(ActivityClientRecord r, Configuration newConfiguration) { + final Activity activity = r.activity; final int newWindowingMode = newConfiguration.windowConfiguration.getWindowingMode(); - final IBinder token = activity.getActivityToken(); - final int oldWindowingMode = mLastReportedWindowingMode.getOrDefault(token, - WINDOWING_MODE_UNDEFINED); + final int oldWindowingMode = r.mLastReportedWindowingMode; if (oldWindowingMode == newWindowingMode) return; // PiP callback is sent before the MW one. if (newWindowingMode == WINDOWING_MODE_PINNED) { @@ -6032,7 +6024,7 @@ public final class ActivityThread extends ClientTransactionHandler if (wasInMultiWindowMode != nowInMultiWindowMode) { activity.dispatchMultiWindowModeChanged(nowInMultiWindowMode, newConfiguration); } - mLastReportedWindowingMode.put(token, newWindowingMode); + r.mLastReportedWindowingMode = newWindowingMode; } /** |