diff options
4 files changed, 32 insertions, 12 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index a928408f68ed..34a148c07e37 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -660,9 +660,15 @@ The default is false. --> <bool name="config_lidControlsSleep">false</bool> - <!-- The device state (supplied by DeviceStateManager) that should be treated as folded by the - display fold controller. Default is DeviceStateManager.INVALID_DEVICE_STATE. --> - <integer name="config_foldedDeviceState">-1</integer> + <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the + display fold controller. Default is empty. --> + <integer-array name="config_foldedDeviceStates"> + <!-- Example: + <item>0</item> + <item>1</item> + <item>2</item> + --> + </integer-array> <!-- Indicate the display area rect for foldable devices in folded state. --> <string name="config_foldedArea"></string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index bcef68072079..dfef3ebc8323 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3728,7 +3728,7 @@ <java-symbol type="string" name="config_customCountryDetector" /> <!-- For Foldables --> - <java-symbol type="integer" name="config_foldedDeviceState" /> + <java-symbol type="array" name="config_foldedDeviceStates" /> <java-symbol type="string" name="config_foldedArea" /> <java-symbol type="array" name="config_disableApksUnlessMatchedSku_apk_list" /> diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java index e7388787ecf9..282d595e0d6c 100644 --- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java +++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java @@ -103,7 +103,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { private final DisplayDeviceRepository mDisplayDeviceRepo; private final Listener mListener; - private final int mFoldedDeviceState; + private final int[] mFoldedDeviceStates; LogicalDisplayMapper(Context context, DisplayDeviceRepository repo, Listener listener) { mDisplayDeviceRepo = repo; @@ -111,8 +111,8 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false); mDisplayDeviceRepo.addListener(this); - mFoldedDeviceState = context.getResources().getInteger( - com.android.internal.R.integer.config_foldedDeviceState); + mFoldedDeviceStates = context.getResources().getIntArray( + com.android.internal.R.array.config_foldedDeviceStates); loadFoldedDisplayConfig(context); } @@ -216,7 +216,14 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { } void setDeviceStateLocked(int state) { - setDeviceFoldedLocked(state == mFoldedDeviceState); + boolean folded = false; + for (int i = 0; i < mFoldedDeviceStates.length; i++) { + if (state == mFoldedDeviceStates[i]) { + folded = true; + break; + } + } + setDeviceFoldedLocked(folded); } void setDeviceFoldedLocked(boolean isFolded) { diff --git a/services/core/java/com/android/server/policy/DisplayFoldController.java b/services/core/java/com/android/server/policy/DisplayFoldController.java index ff51237a900a..c10e828d8c3d 100644 --- a/services/core/java/com/android/server/policy/DisplayFoldController.java +++ b/services/core/java/com/android/server/policy/DisplayFoldController.java @@ -209,16 +209,23 @@ class DisplayFoldController { * resource. */ private class DeviceStateListener implements DeviceStateManager.DeviceStateListener { - private final int mFoldedDeviceState; + private final int[] mFoldedDeviceStates; DeviceStateListener(Context context) { - mFoldedDeviceState = context.getResources().getInteger( - com.android.internal.R.integer.config_foldedDeviceState); + mFoldedDeviceStates = context.getResources().getIntArray( + com.android.internal.R.array.config_foldedDeviceStates); } @Override public void onDeviceStateChanged(int deviceState) { - setDeviceFolded(deviceState == mFoldedDeviceState); + boolean folded = false; + for (int i = 0; i < mFoldedDeviceStates.length; i++) { + if (deviceState == mFoldedDeviceStates[i]) { + folded = true; + break; + } + } + setDeviceFolded(folded); } } } |