diff options
| author | 2021-01-26 14:37:16 -0800 | |
|---|---|---|
| committer | 2021-01-29 16:28:16 -0800 | |
| commit | 66209fe3b22885747bcc722e9edab30cdce44030 (patch) | |
| tree | fe80d0b9186118f5de9895761491042dc53c6e72 | |
| parent | 292aa4a173a8e8901c788909173767826e7653ec (diff) | |
Allow multiple device states to be treated as folded.
Allows more than two device states to be treated as folded when it comes
to camera switching and display mapping. For example, one state may be
the closed state, but another may be a tent mode.
Bug: 173428581
Bug: 159401801
Test: Manual, build and verify multiple states trigger fold.
Change-Id: I89770e5fc81c9372e94ff4e5145796c103f6d5f7
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); } } } |