Merge "Don't send configuration that app doesn't support to it." into oc-dev
am: 22c1275c89
Change-Id: Ib7b3b945c476fae59800421c6075397d8bb6352c
This commit is contained in:
@@ -988,10 +988,18 @@ public class ActivityInfo extends ComponentInfo
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
boolean isFixedOrientationLandscape() {
|
boolean isFixedOrientationLandscape() {
|
||||||
return screenOrientation == SCREEN_ORIENTATION_LANDSCAPE
|
return isFixedOrientationLandscape(screenOrientation);
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
}
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_REVERSE_LANDSCAPE
|
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_USER_LANDSCAPE;
|
/**
|
||||||
|
* Returns true if the activity's orientation is fixed to landscape.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static boolean isFixedOrientationLandscape(@ScreenOrientation int orientation) {
|
||||||
|
return orientation == SCREEN_ORIENTATION_LANDSCAPE
|
||||||
|
|| orientation == SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
||||||
|
|| orientation == SCREEN_ORIENTATION_REVERSE_LANDSCAPE
|
||||||
|
|| orientation == SCREEN_ORIENTATION_USER_LANDSCAPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -999,10 +1007,18 @@ public class ActivityInfo extends ComponentInfo
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
boolean isFixedOrientationPortrait() {
|
boolean isFixedOrientationPortrait() {
|
||||||
return screenOrientation == SCREEN_ORIENTATION_PORTRAIT
|
return isFixedOrientationPortrait(screenOrientation);
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_SENSOR_PORTRAIT
|
}
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_REVERSE_PORTRAIT
|
|
||||||
|| screenOrientation == SCREEN_ORIENTATION_USER_PORTRAIT;
|
/**
|
||||||
|
* Returns true if the activity's orientation is fixed to portrait.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static boolean isFixedOrientationPortrait(@ScreenOrientation int orientation) {
|
||||||
|
return orientation == SCREEN_ORIENTATION_PORTRAIT
|
||||||
|
|| orientation == SCREEN_ORIENTATION_SENSOR_PORTRAIT
|
||||||
|
|| orientation == SCREEN_ORIENTATION_REVERSE_PORTRAIT
|
||||||
|
|| orientation == SCREEN_ORIENTATION_USER_PORTRAIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
|
|||||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
|
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
|
||||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
|
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
|
||||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
|
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
|
||||||
|
import static android.content.pm.ActivityInfo.isFixedOrientationLandscape;
|
||||||
|
import static android.content.pm.ActivityInfo.isFixedOrientationPortrait;
|
||||||
import static android.content.res.Configuration.EMPTY;
|
import static android.content.res.Configuration.EMPTY;
|
||||||
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
|
||||||
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
|
||||||
@@ -2222,15 +2224,19 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void onOverrideConfigurationChanged(Configuration overrideConfiguration) {
|
void onOverrideConfigurationChanged(Configuration newConfig) {
|
||||||
super.onOverrideConfigurationChanged(overrideConfiguration);
|
final Configuration currentConfig = getOverrideConfiguration();
|
||||||
if (mWindowContainerController != null) {
|
if (currentConfig.equals(newConfig)) {
|
||||||
mWindowContainerController.onOverrideConfigurationChanged(
|
return;
|
||||||
overrideConfiguration, mBounds);
|
|
||||||
// TODO(b/36505427): Can we consolidate the call points of onOverrideConfigurationSent()
|
|
||||||
// to just use this method instead?
|
|
||||||
onOverrideConfigurationSent();
|
|
||||||
}
|
}
|
||||||
|
super.onOverrideConfigurationChanged(newConfig);
|
||||||
|
if (mWindowContainerController == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mWindowContainerController.onOverrideConfigurationChanged(newConfig, mBounds);
|
||||||
|
// TODO(b/36505427): Can we consolidate the call points of onOverrideConfigurationSent()
|
||||||
|
// to just use this method instead?
|
||||||
|
onOverrideConfigurationSent();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
|
// TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
|
||||||
@@ -2238,6 +2244,26 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
|||||||
mTmpConfig.unset();
|
mTmpConfig.unset();
|
||||||
computeBounds(mTmpBounds);
|
computeBounds(mTmpBounds);
|
||||||
if (mTmpBounds.equals(mBounds)) {
|
if (mTmpBounds.equals(mBounds)) {
|
||||||
|
final ActivityStack stack = getStack();
|
||||||
|
if (!mBounds.isEmpty() || task == null || stack == null || !task.mFullscreen) {
|
||||||
|
// We don't want to influence the override configuration here if our task is in
|
||||||
|
// multi-window mode or there is a bounds specified to calculate the override
|
||||||
|
// config. In both of this cases the app should be compatible with whatever the
|
||||||
|
// current configuration is or will be.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Currently limited to the top activity for now to avoid situations where non-top
|
||||||
|
// visible activity and top might have conflicting requests putting the non-top activity
|
||||||
|
// windows in an odd state.
|
||||||
|
final ActivityRecord top = mStackSupervisor.topRunningActivityLocked();
|
||||||
|
final Configuration parentConfig = getParent().getConfiguration();
|
||||||
|
if (top != this || isConfigurationCompatible(parentConfig)) {
|
||||||
|
onOverrideConfigurationChanged(mTmpConfig);
|
||||||
|
} else if (isConfigurationCompatible(
|
||||||
|
mLastReportedConfiguration.getMergedConfiguration())) {
|
||||||
|
onOverrideConfigurationChanged(mLastReportedConfiguration.getMergedConfiguration());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2250,6 +2276,21 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
|||||||
onOverrideConfigurationChanged(mTmpConfig);
|
onOverrideConfigurationChanged(mTmpConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns true if the configuration is compatible with this activity. */
|
||||||
|
private boolean isConfigurationCompatible(Configuration config) {
|
||||||
|
final int orientation = mWindowContainerController != null
|
||||||
|
? mWindowContainerController.getOrientation() : info.screenOrientation;
|
||||||
|
if (isFixedOrientationPortrait(orientation)
|
||||||
|
&& config.orientation != ORIENTATION_PORTRAIT) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isFixedOrientationLandscape(orientation)
|
||||||
|
&& config.orientation != ORIENTATION_LANDSCAPE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the bounds to fit the Activity within the bounds of the {@link Configuration}.
|
* Computes the bounds to fit the Activity within the bounds of the {@link Configuration}.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user