Loading core/java/android/content/res/Configuration.java +82 −3 Original line number Diff line number Diff line Loading @@ -16,10 +16,7 @@ package android.content.res; import android.graphics.Point; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.Display; import android.view.DisplayInfo; import com.android.internal.util.XmlUtils; Loading @@ -45,6 +42,12 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Locale; import static android.view.Surface.ROTATION_UNDEFINED; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_90; import static android.view.Surface.ROTATION_180; import static android.view.Surface.ROTATION_270; /** * This class describes all device configuration information that can * impact the resources the application retrieves. This includes both Loading Loading @@ -600,6 +603,13 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int orientation; /** * The rotation used at the time orientation was determined. * TODO(b/36812336): Move rotation out of {@link Configuration}. * {@hide} */ private int rotation; /** Constant for {@link #uiMode}: bits that encode the mode type. */ public static final int UI_MODE_TYPE_MASK = 0x0f; /** Constant for {@link #uiMode}: a {@link #UI_MODE_TYPE_MASK} Loading Loading @@ -887,6 +897,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = o.navigation; navigationHidden = o.navigationHidden; orientation = o.orientation; rotation = o.rotation; screenLayout = o.screenLayout; colorMode = o.colorMode; uiMode = o.uiMode; Loading Loading @@ -990,6 +1001,14 @@ public final class Configuration implements Parcelable, Comparable<Configuration case ORIENTATION_PORTRAIT: sb.append(" port"); break; default: sb.append(" orien="); sb.append(orientation); break; } switch (rotation) { case ROTATION_UNDEFINED: sb.append(" ?rotation"); break; case ROTATION_0: sb.append(" rot0"); break; case ROTATION_90: sb.append(" rot90"); break; case ROTATION_180: sb.append(" rot180"); break; case ROTATION_270: sb.append(" rot270"); break; default: sb.append(" rot="); sb.append(rotation); break; } switch ((uiMode&UI_MODE_TYPE_MASK)) { case UI_MODE_TYPE_UNDEFINED: sb.append(" ?uimode"); break; case UI_MODE_TYPE_NORMAL: /* normal is not interesting to print */ break; Loading Loading @@ -1077,6 +1096,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = NAVIGATION_UNDEFINED; navigationHidden = NAVIGATIONHIDDEN_UNDEFINED; orientation = ORIENTATION_UNDEFINED; rotation = ROTATION_UNDEFINED; screenLayout = SCREENLAYOUT_UNDEFINED; colorMode = COLOR_MODE_UNDEFINED; uiMode = UI_MODE_TYPE_UNDEFINED; Loading Loading @@ -1185,6 +1205,11 @@ public final class Configuration implements Parcelable, Comparable<Configuration changed |= ActivityInfo.CONFIG_ORIENTATION; orientation = delta.orientation; } if (delta.rotation != ROTATION_UNDEFINED && rotation != delta.rotation) { changed |= ActivityInfo.CONFIG_ORIENTATION; rotation = delta.rotation; } if (((delta.screenLayout & SCREENLAYOUT_SIZE_MASK) != SCREENLAYOUT_SIZE_UNDEFINED) && (delta.screenLayout & SCREENLAYOUT_SIZE_MASK) Loading Loading @@ -1379,6 +1404,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration && orientation != delta.orientation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } if ((compareUndefined || delta.rotation != ROTATION_UNDEFINED) && rotation != delta.rotation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } if ((compareUndefined || getScreenLayoutNoDirection(delta.screenLayout) != (SCREENLAYOUT_SIZE_UNDEFINED | SCREENLAYOUT_LONG_UNDEFINED)) && getScreenLayoutNoDirection(screenLayout) != Loading Loading @@ -1515,6 +1544,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration dest.writeInt(navigation); dest.writeInt(navigationHidden); dest.writeInt(orientation); dest.writeInt(rotation); dest.writeInt(screenLayout); dest.writeInt(colorMode); dest.writeInt(uiMode); Loading Loading @@ -1551,6 +1581,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = source.readInt(); navigationHidden = source.readInt(); orientation = source.readInt(); rotation = source.readInt(); screenLayout = source.readInt(); colorMode = source.readInt(); uiMode = source.readInt(); Loading Loading @@ -1635,6 +1666,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration if (n != 0) return n; n = this.orientation - that.orientation; if (n != 0) return n; n = this.rotation - that.rotation; if (n != 0) return n; n = this.colorMode - that.colorMode; if (n != 0) return n; n = this.screenLayout - that.screenLayout; Loading Loading @@ -1763,6 +1796,24 @@ public final class Configuration implements Parcelable, Comparable<Configuration appBounds.set(left, top, right, bottom); } /** * @hide * * Setter for orientation converts from {@link Surface} values to internal representation. */ public void setRotation(int rotation) { this.rotation = rotation; } /** * @hide * * Getter for orientation. Converts from internal representation to {@link Surface} values. */ public int getRotation() { return rotation != ROTATION_UNDEFINED ? rotation : ROTATION_0; } /** * @hide * Loading Loading @@ -2000,6 +2051,23 @@ public final class Configuration implements Parcelable, Comparable<Configuration break; } switch (config.rotation) { case ROTATION_0: parts.add("rot0"); break; case ROTATION_90: parts.add("rot90"); break; case ROTATION_180: parts.add("rot180"); break; case ROTATION_270: parts.add("rot270"); break; default: break; } switch (config.uiMode & Configuration.UI_MODE_TYPE_MASK) { case Configuration.UI_MODE_TYPE_APPLIANCE: parts.add("appliance"); Loading Loading @@ -2194,6 +2262,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration delta.orientation = change.orientation; } if (base.rotation != change.rotation) { base.rotation = change.rotation; } if ((base.screenLayout & SCREENLAYOUT_SIZE_MASK) != (change.screenLayout & SCREENLAYOUT_SIZE_MASK)) { delta.screenLayout |= change.screenLayout & SCREENLAYOUT_SIZE_MASK; Loading Loading @@ -2265,6 +2337,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration private static final String XML_ATTR_NAVIGATION = "nav"; private static final String XML_ATTR_NAVIGATION_HIDDEN = "navHid"; private static final String XML_ATTR_ORIENTATION = "ori"; private static final String XML_ATTR_ROTATION = "rot"; private static final String XML_ATTR_SCREEN_LAYOUT = "scrLay"; private static final String XML_ATTR_COLOR_MODE = "clrMod"; private static final String XML_ATTR_UI_MODE = "ui"; Loading Loading @@ -2324,6 +2397,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration DENSITY_DPI_UNDEFINED); configOut.appBounds = Rect.unflattenFromString(XmlUtils.readStringAttribute(parser, XML_ATTR_APP_BOUNDS)); configOut.rotation = XmlUtils.readIntAttribute(parser, XML_ATTR_ROTATION, ROTATION_UNDEFINED); // For persistence, we don't care about assetsSeq, so do not read it out. } Loading Loading @@ -2400,6 +2475,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration config.appBounds.flattenToString()); } if (config.rotation != ROTATION_UNDEFINED) { XmlUtils.writeIntAttribute(xml, XML_ATTR_ROTATION, config.rotation); } // For persistence, we do not care about assetsSeq, so do not write it out. } } core/java/android/view/IWindowSession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ interface IWindowSession { int flags, out Rect outFrame, out Rect outOverscanInsets, out Rect outContentInsets, out Rect outVisibleInsets, out Rect outStableInsets, out Rect outOutsets, out Rect outBackdropFrame, out MergedConfiguration outMergedConfiguration, out Surface outSurface); inout MergedConfiguration mergedConfiguration, out Surface outSurface); /* * Notify the window manager that an application is relaunching and Loading core/java/android/view/Surface.java +7 −1 Original line number Diff line number Diff line Loading @@ -129,10 +129,16 @@ public class Surface implements Parcelable { public static final int SCALING_MODE_NO_SCALE_CROP = 3; /** @hide */ @IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @IntDef({ROTATION_UNDEFINED, ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @Retention(RetentionPolicy.SOURCE) public @interface Rotation {} /** * Rotation constant: undefined * @hide */ public static final int ROTATION_UNDEFINED = -1; /** * Rotation constant: 0 degree rotation (natural orientation) */ Loading core/java/android/view/ViewRootImpl.java +17 −3 Original line number Diff line number Diff line Loading @@ -1850,8 +1850,12 @@ public final class ViewRootImpl implements ViewParent, final boolean isViewVisible = viewVisibility == View.VISIBLE; final boolean windowRelayoutWasForced = mForceNextWindowRelayout; if (mFirst || windowShouldResize || insetsChanged || viewVisibilityChanged || params != null || mForceNextWindowRelayout) { final int contextConfigSeq = mContext.getResources().getConfiguration().seq; final int lastConfigSeq = mLastReportedMergedConfiguration.getMergedConfiguration().seq; final boolean staleConfig = lastConfigSeq != 0 && contextConfigSeq != lastConfigSeq; if (mFirst || windowShouldResize || insetsChanged || staleConfig || viewVisibilityChanged || params != null || mForceNextWindowRelayout) { mForceNextWindowRelayout = false; if (isViewVisible) { Loading Loading @@ -6088,7 +6092,13 @@ public final class ViewRootImpl implements ViewParent, if (params != null) { if (DBG) Log.d(mTag, "WindowLayout in layoutWindow:" + params); } mPendingMergedConfiguration.getMergedConfiguration().seq = 0; if (mPendingMergedConfiguration.getMergedConfiguration().seq == 0) { mPendingMergedConfiguration.setTo(mLastReportedMergedConfiguration); } int initialConfigSeq = mPendingMergedConfiguration.getMergedConfiguration().seq; //Log.d(mTag, ">>>>>> CALLING relayout"); if (params != null && mOrigWindowType != params.type) { // For compatibility with old apps, don't crash here. Loading @@ -6107,6 +6117,10 @@ public final class ViewRootImpl implements ViewParent, mPendingStableInsets, mPendingOutsets, mPendingBackDropFrame, mPendingMergedConfiguration, mSurface); if (initialConfigSeq == mPendingMergedConfiguration.getMergedConfiguration().seq) { mPendingMergedConfiguration.getMergedConfiguration().seq = 0; } mPendingAlwaysConsumeNavBar = (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR) != 0; Loading services/core/java/com/android/server/wm/DisplayContent.java +2 −0 Original line number Diff line number Diff line Loading @@ -1162,6 +1162,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int dh = displayInfo.logicalHeight; config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; config.setRotation(displayInfo.rotation); config.screenWidthDp = (int)(mService.mPolicy.getConfigDisplayWidth(dw, dh, displayInfo.rotation, config.uiMode, mDisplayId) / mDisplayMetrics.density); Loading Loading
core/java/android/content/res/Configuration.java +82 −3 Original line number Diff line number Diff line Loading @@ -16,10 +16,7 @@ package android.content.res; import android.graphics.Point; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.Display; import android.view.DisplayInfo; import com.android.internal.util.XmlUtils; Loading @@ -45,6 +42,12 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Locale; import static android.view.Surface.ROTATION_UNDEFINED; import static android.view.Surface.ROTATION_0; import static android.view.Surface.ROTATION_90; import static android.view.Surface.ROTATION_180; import static android.view.Surface.ROTATION_270; /** * This class describes all device configuration information that can * impact the resources the application retrieves. This includes both Loading Loading @@ -600,6 +603,13 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int orientation; /** * The rotation used at the time orientation was determined. * TODO(b/36812336): Move rotation out of {@link Configuration}. * {@hide} */ private int rotation; /** Constant for {@link #uiMode}: bits that encode the mode type. */ public static final int UI_MODE_TYPE_MASK = 0x0f; /** Constant for {@link #uiMode}: a {@link #UI_MODE_TYPE_MASK} Loading Loading @@ -887,6 +897,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = o.navigation; navigationHidden = o.navigationHidden; orientation = o.orientation; rotation = o.rotation; screenLayout = o.screenLayout; colorMode = o.colorMode; uiMode = o.uiMode; Loading Loading @@ -990,6 +1001,14 @@ public final class Configuration implements Parcelable, Comparable<Configuration case ORIENTATION_PORTRAIT: sb.append(" port"); break; default: sb.append(" orien="); sb.append(orientation); break; } switch (rotation) { case ROTATION_UNDEFINED: sb.append(" ?rotation"); break; case ROTATION_0: sb.append(" rot0"); break; case ROTATION_90: sb.append(" rot90"); break; case ROTATION_180: sb.append(" rot180"); break; case ROTATION_270: sb.append(" rot270"); break; default: sb.append(" rot="); sb.append(rotation); break; } switch ((uiMode&UI_MODE_TYPE_MASK)) { case UI_MODE_TYPE_UNDEFINED: sb.append(" ?uimode"); break; case UI_MODE_TYPE_NORMAL: /* normal is not interesting to print */ break; Loading Loading @@ -1077,6 +1096,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = NAVIGATION_UNDEFINED; navigationHidden = NAVIGATIONHIDDEN_UNDEFINED; orientation = ORIENTATION_UNDEFINED; rotation = ROTATION_UNDEFINED; screenLayout = SCREENLAYOUT_UNDEFINED; colorMode = COLOR_MODE_UNDEFINED; uiMode = UI_MODE_TYPE_UNDEFINED; Loading Loading @@ -1185,6 +1205,11 @@ public final class Configuration implements Parcelable, Comparable<Configuration changed |= ActivityInfo.CONFIG_ORIENTATION; orientation = delta.orientation; } if (delta.rotation != ROTATION_UNDEFINED && rotation != delta.rotation) { changed |= ActivityInfo.CONFIG_ORIENTATION; rotation = delta.rotation; } if (((delta.screenLayout & SCREENLAYOUT_SIZE_MASK) != SCREENLAYOUT_SIZE_UNDEFINED) && (delta.screenLayout & SCREENLAYOUT_SIZE_MASK) Loading Loading @@ -1379,6 +1404,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration && orientation != delta.orientation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } if ((compareUndefined || delta.rotation != ROTATION_UNDEFINED) && rotation != delta.rotation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } if ((compareUndefined || getScreenLayoutNoDirection(delta.screenLayout) != (SCREENLAYOUT_SIZE_UNDEFINED | SCREENLAYOUT_LONG_UNDEFINED)) && getScreenLayoutNoDirection(screenLayout) != Loading Loading @@ -1515,6 +1544,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration dest.writeInt(navigation); dest.writeInt(navigationHidden); dest.writeInt(orientation); dest.writeInt(rotation); dest.writeInt(screenLayout); dest.writeInt(colorMode); dest.writeInt(uiMode); Loading Loading @@ -1551,6 +1581,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = source.readInt(); navigationHidden = source.readInt(); orientation = source.readInt(); rotation = source.readInt(); screenLayout = source.readInt(); colorMode = source.readInt(); uiMode = source.readInt(); Loading Loading @@ -1635,6 +1666,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration if (n != 0) return n; n = this.orientation - that.orientation; if (n != 0) return n; n = this.rotation - that.rotation; if (n != 0) return n; n = this.colorMode - that.colorMode; if (n != 0) return n; n = this.screenLayout - that.screenLayout; Loading Loading @@ -1763,6 +1796,24 @@ public final class Configuration implements Parcelable, Comparable<Configuration appBounds.set(left, top, right, bottom); } /** * @hide * * Setter for orientation converts from {@link Surface} values to internal representation. */ public void setRotation(int rotation) { this.rotation = rotation; } /** * @hide * * Getter for orientation. Converts from internal representation to {@link Surface} values. */ public int getRotation() { return rotation != ROTATION_UNDEFINED ? rotation : ROTATION_0; } /** * @hide * Loading Loading @@ -2000,6 +2051,23 @@ public final class Configuration implements Parcelable, Comparable<Configuration break; } switch (config.rotation) { case ROTATION_0: parts.add("rot0"); break; case ROTATION_90: parts.add("rot90"); break; case ROTATION_180: parts.add("rot180"); break; case ROTATION_270: parts.add("rot270"); break; default: break; } switch (config.uiMode & Configuration.UI_MODE_TYPE_MASK) { case Configuration.UI_MODE_TYPE_APPLIANCE: parts.add("appliance"); Loading Loading @@ -2194,6 +2262,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration delta.orientation = change.orientation; } if (base.rotation != change.rotation) { base.rotation = change.rotation; } if ((base.screenLayout & SCREENLAYOUT_SIZE_MASK) != (change.screenLayout & SCREENLAYOUT_SIZE_MASK)) { delta.screenLayout |= change.screenLayout & SCREENLAYOUT_SIZE_MASK; Loading Loading @@ -2265,6 +2337,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration private static final String XML_ATTR_NAVIGATION = "nav"; private static final String XML_ATTR_NAVIGATION_HIDDEN = "navHid"; private static final String XML_ATTR_ORIENTATION = "ori"; private static final String XML_ATTR_ROTATION = "rot"; private static final String XML_ATTR_SCREEN_LAYOUT = "scrLay"; private static final String XML_ATTR_COLOR_MODE = "clrMod"; private static final String XML_ATTR_UI_MODE = "ui"; Loading Loading @@ -2324,6 +2397,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration DENSITY_DPI_UNDEFINED); configOut.appBounds = Rect.unflattenFromString(XmlUtils.readStringAttribute(parser, XML_ATTR_APP_BOUNDS)); configOut.rotation = XmlUtils.readIntAttribute(parser, XML_ATTR_ROTATION, ROTATION_UNDEFINED); // For persistence, we don't care about assetsSeq, so do not read it out. } Loading Loading @@ -2400,6 +2475,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration config.appBounds.flattenToString()); } if (config.rotation != ROTATION_UNDEFINED) { XmlUtils.writeIntAttribute(xml, XML_ATTR_ROTATION, config.rotation); } // For persistence, we do not care about assetsSeq, so do not write it out. } }
core/java/android/view/IWindowSession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ interface IWindowSession { int flags, out Rect outFrame, out Rect outOverscanInsets, out Rect outContentInsets, out Rect outVisibleInsets, out Rect outStableInsets, out Rect outOutsets, out Rect outBackdropFrame, out MergedConfiguration outMergedConfiguration, out Surface outSurface); inout MergedConfiguration mergedConfiguration, out Surface outSurface); /* * Notify the window manager that an application is relaunching and Loading
core/java/android/view/Surface.java +7 −1 Original line number Diff line number Diff line Loading @@ -129,10 +129,16 @@ public class Surface implements Parcelable { public static final int SCALING_MODE_NO_SCALE_CROP = 3; /** @hide */ @IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @IntDef({ROTATION_UNDEFINED, ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @Retention(RetentionPolicy.SOURCE) public @interface Rotation {} /** * Rotation constant: undefined * @hide */ public static final int ROTATION_UNDEFINED = -1; /** * Rotation constant: 0 degree rotation (natural orientation) */ Loading
core/java/android/view/ViewRootImpl.java +17 −3 Original line number Diff line number Diff line Loading @@ -1850,8 +1850,12 @@ public final class ViewRootImpl implements ViewParent, final boolean isViewVisible = viewVisibility == View.VISIBLE; final boolean windowRelayoutWasForced = mForceNextWindowRelayout; if (mFirst || windowShouldResize || insetsChanged || viewVisibilityChanged || params != null || mForceNextWindowRelayout) { final int contextConfigSeq = mContext.getResources().getConfiguration().seq; final int lastConfigSeq = mLastReportedMergedConfiguration.getMergedConfiguration().seq; final boolean staleConfig = lastConfigSeq != 0 && contextConfigSeq != lastConfigSeq; if (mFirst || windowShouldResize || insetsChanged || staleConfig || viewVisibilityChanged || params != null || mForceNextWindowRelayout) { mForceNextWindowRelayout = false; if (isViewVisible) { Loading Loading @@ -6088,7 +6092,13 @@ public final class ViewRootImpl implements ViewParent, if (params != null) { if (DBG) Log.d(mTag, "WindowLayout in layoutWindow:" + params); } mPendingMergedConfiguration.getMergedConfiguration().seq = 0; if (mPendingMergedConfiguration.getMergedConfiguration().seq == 0) { mPendingMergedConfiguration.setTo(mLastReportedMergedConfiguration); } int initialConfigSeq = mPendingMergedConfiguration.getMergedConfiguration().seq; //Log.d(mTag, ">>>>>> CALLING relayout"); if (params != null && mOrigWindowType != params.type) { // For compatibility with old apps, don't crash here. Loading @@ -6107,6 +6117,10 @@ public final class ViewRootImpl implements ViewParent, mPendingStableInsets, mPendingOutsets, mPendingBackDropFrame, mPendingMergedConfiguration, mSurface); if (initialConfigSeq == mPendingMergedConfiguration.getMergedConfiguration().seq) { mPendingMergedConfiguration.getMergedConfiguration().seq = 0; } mPendingAlwaysConsumeNavBar = (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR) != 0; Loading
services/core/java/com/android/server/wm/DisplayContent.java +2 −0 Original line number Diff line number Diff line Loading @@ -1162,6 +1162,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int dh = displayInfo.logicalHeight; config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; config.setRotation(displayInfo.rotation); config.screenWidthDp = (int)(mService.mPolicy.getConfigDisplayWidth(dw, dh, displayInfo.rotation, config.uiMode, mDisplayId) / mDisplayMetrics.density); Loading