Loading core/java/android/app/ActivityThread.java +7 −7 Original line number Diff line number Diff line Loading @@ -3552,6 +3552,13 @@ public final class ActivityThread extends ClientTransactionHandler + ", comp=" + r.intent.getComponent().toShortString() + ", dir=" + r.packageInfo.getAppDir()); // updatePendingActivityConfiguration() reads from mActivities to update // ActivityClientRecord which runs in a different thread. Protect modifications to // mActivities to avoid race. synchronized (mResourcesManager) { mActivities.put(r.token, r); } if (activity != null) { CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager()); Configuration config = Loading Loading @@ -3613,13 +3620,6 @@ public final class ActivityThread extends ClientTransactionHandler } r.setState(ON_CREATE); // updatePendingActivityConfiguration() reads from mActivities to update // ActivityClientRecord which runs in a different thread. Protect modifications to // mActivities to avoid race. synchronized (mResourcesManager) { mActivities.put(r.token, r); } } catch (SuperNotCalledException e) { throw e; Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/SampleExtensionImpl.java +32 −0 Original line number Diff line number Diff line Loading @@ -23,15 +23,19 @@ import static androidx.window.util.ExtensionHelper.transformToWindowSpaceRect; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.common.DeviceStateManagerPostureProducer; import androidx.window.common.DisplayFeature; import androidx.window.common.ResourceConfigDisplayFeatureProducer; import androidx.window.common.SettingsDevicePostureProducer; import androidx.window.common.SettingsDisplayFeatureProducer; import androidx.window.extensions.organizer.SplitController; import androidx.window.util.DataProducer; import androidx.window.util.PriorityDataProducer; Loading @@ -56,6 +60,8 @@ class SampleExtensionImpl extends StubExtension { private final SettingsDisplayFeatureProducer mSettingsDisplayFeatureProducer; private final DataProducer<List<DisplayFeature>> mDisplayFeatureProducer; private final SplitController mSplitController; SampleExtensionImpl(Context context) { mSettingsDevicePostureProducer = new SettingsDevicePostureProducer(context); mDevicePostureProducer = new PriorityDataProducer<>(List.of( Loading @@ -71,6 +77,8 @@ class SampleExtensionImpl extends StubExtension { mDevicePostureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); mDisplayFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); mSplitController = new SplitController(); } private int getFeatureState(DisplayFeature feature) { Loading Loading @@ -134,4 +142,28 @@ class SampleExtensionImpl extends StubExtension { onDisplayFeaturesChanged(); } @Override public void setSplitRules(@NonNull List<ExtensionSplitRule> splitRules) { mSplitController.setSplitRules(splitRules); } @Override @NonNull public List<ExtensionSplitRule> getSplitRules() { return new ArrayList<>(mSplitController.getSplitRules()); } @Override public void setSplitOrganizerCallback(@Nullable SplitOrganizerCallback callback) { mSplitController.setSplitOrganizerCallback(callback); } @Override public void startActivityToSide(@NonNull Activity launchingActivity, @NonNull Intent intent, @Nullable Bundle options, @NonNull ExtensionSplitPairRule splitPairRule, int startRequestId) { mSplitController.startActivityToSide(launchingActivity, intent, options, splitPairRule, startRequestId); } } libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitContainer.java 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package androidx.window.extensions.organizer; import android.annotation.NonNull; import android.app.Activity; import androidx.window.extensions.ExtensionSplitPairRule; /** * Client-side descriptor of a split that holds two containers. */ class SplitContainer { private final TaskFragmentContainer mPrimaryContainer; private final TaskFragmentContainer mSecondaryContainer; private final ExtensionSplitPairRule mSplitPairRule; SplitContainer(@NonNull TaskFragmentContainer primaryContainer, @NonNull Activity primaryActivity, @NonNull TaskFragmentContainer secondaryContainer, @NonNull ExtensionSplitPairRule splitPairRule) { mPrimaryContainer = primaryContainer; mSecondaryContainer = secondaryContainer; mSplitPairRule = splitPairRule; if (mSplitPairRule.finishPrimaryWithSecondary || mSplitPairRule.useAsPlaceholder) { mSecondaryContainer.addActivityToFinishOnExit(primaryActivity); } if (mSplitPairRule.finishSecondaryWithPrimary || mSplitPairRule.useAsPlaceholder) { mPrimaryContainer.addContainerToFinishOnExit(mSecondaryContainer); } } @NonNull TaskFragmentContainer getPrimaryContainer() { return mPrimaryContainer; } @NonNull TaskFragmentContainer getSecondaryContainer() { return mSecondaryContainer; } @NonNull ExtensionSplitPairRule getSplitPairRule() { return mSplitPairRule; } } Loading
core/java/android/app/ActivityThread.java +7 −7 Original line number Diff line number Diff line Loading @@ -3552,6 +3552,13 @@ public final class ActivityThread extends ClientTransactionHandler + ", comp=" + r.intent.getComponent().toShortString() + ", dir=" + r.packageInfo.getAppDir()); // updatePendingActivityConfiguration() reads from mActivities to update // ActivityClientRecord which runs in a different thread. Protect modifications to // mActivities to avoid race. synchronized (mResourcesManager) { mActivities.put(r.token, r); } if (activity != null) { CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager()); Configuration config = Loading Loading @@ -3613,13 +3620,6 @@ public final class ActivityThread extends ClientTransactionHandler } r.setState(ON_CREATE); // updatePendingActivityConfiguration() reads from mActivities to update // ActivityClientRecord which runs in a different thread. Protect modifications to // mActivities to avoid race. synchronized (mResourcesManager) { mActivities.put(r.token, r); } } catch (SuperNotCalledException e) { throw e; Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/SampleExtensionImpl.java +32 −0 Original line number Diff line number Diff line Loading @@ -23,15 +23,19 @@ import static androidx.window.util.ExtensionHelper.transformToWindowSpaceRect; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.window.common.DeviceStateManagerPostureProducer; import androidx.window.common.DisplayFeature; import androidx.window.common.ResourceConfigDisplayFeatureProducer; import androidx.window.common.SettingsDevicePostureProducer; import androidx.window.common.SettingsDisplayFeatureProducer; import androidx.window.extensions.organizer.SplitController; import androidx.window.util.DataProducer; import androidx.window.util.PriorityDataProducer; Loading @@ -56,6 +60,8 @@ class SampleExtensionImpl extends StubExtension { private final SettingsDisplayFeatureProducer mSettingsDisplayFeatureProducer; private final DataProducer<List<DisplayFeature>> mDisplayFeatureProducer; private final SplitController mSplitController; SampleExtensionImpl(Context context) { mSettingsDevicePostureProducer = new SettingsDevicePostureProducer(context); mDevicePostureProducer = new PriorityDataProducer<>(List.of( Loading @@ -71,6 +77,8 @@ class SampleExtensionImpl extends StubExtension { mDevicePostureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); mDisplayFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged); mSplitController = new SplitController(); } private int getFeatureState(DisplayFeature feature) { Loading Loading @@ -134,4 +142,28 @@ class SampleExtensionImpl extends StubExtension { onDisplayFeaturesChanged(); } @Override public void setSplitRules(@NonNull List<ExtensionSplitRule> splitRules) { mSplitController.setSplitRules(splitRules); } @Override @NonNull public List<ExtensionSplitRule> getSplitRules() { return new ArrayList<>(mSplitController.getSplitRules()); } @Override public void setSplitOrganizerCallback(@Nullable SplitOrganizerCallback callback) { mSplitController.setSplitOrganizerCallback(callback); } @Override public void startActivityToSide(@NonNull Activity launchingActivity, @NonNull Intent intent, @Nullable Bundle options, @NonNull ExtensionSplitPairRule splitPairRule, int startRequestId) { mSplitController.startActivityToSide(launchingActivity, intent, options, splitPairRule, startRequestId); } }
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitContainer.java 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package androidx.window.extensions.organizer; import android.annotation.NonNull; import android.app.Activity; import androidx.window.extensions.ExtensionSplitPairRule; /** * Client-side descriptor of a split that holds two containers. */ class SplitContainer { private final TaskFragmentContainer mPrimaryContainer; private final TaskFragmentContainer mSecondaryContainer; private final ExtensionSplitPairRule mSplitPairRule; SplitContainer(@NonNull TaskFragmentContainer primaryContainer, @NonNull Activity primaryActivity, @NonNull TaskFragmentContainer secondaryContainer, @NonNull ExtensionSplitPairRule splitPairRule) { mPrimaryContainer = primaryContainer; mSecondaryContainer = secondaryContainer; mSplitPairRule = splitPairRule; if (mSplitPairRule.finishPrimaryWithSecondary || mSplitPairRule.useAsPlaceholder) { mSecondaryContainer.addActivityToFinishOnExit(primaryActivity); } if (mSplitPairRule.finishSecondaryWithPrimary || mSplitPairRule.useAsPlaceholder) { mPrimaryContainer.addContainerToFinishOnExit(mSecondaryContainer); } } @NonNull TaskFragmentContainer getPrimaryContainer() { return mPrimaryContainer; } @NonNull TaskFragmentContainer getSecondaryContainer() { return mSecondaryContainer; } @NonNull ExtensionSplitPairRule getSplitPairRule() { return mSplitPairRule; } }