Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66209fe3 authored by Darryl L Johnson's avatar Darryl L Johnson
Browse files

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
parent 292aa4a1
Loading
Loading
Loading
Loading
+9 −3
Original line number Original line Diff line number Diff line
@@ -660,9 +660,15 @@
         The default is false. -->
         The default is false. -->
    <bool name="config_lidControlsSleep">false</bool>
    <bool name="config_lidControlsSleep">false</bool>


    <!-- The device state (supplied by DeviceStateManager) that should be treated as folded by the
    <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the
         display fold controller. Default is DeviceStateManager.INVALID_DEVICE_STATE. -->
         display fold controller. Default is empty. -->
    <integer name="config_foldedDeviceState">-1</integer>
    <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. -->
    <!-- Indicate the display area rect for foldable devices in folded state. -->
    <string name="config_foldedArea"></string>
    <string name="config_foldedArea"></string>
+1 −1
Original line number Original line Diff line number Diff line
@@ -3728,7 +3728,7 @@
  <java-symbol type="string" name="config_customCountryDetector" />
  <java-symbol type="string" name="config_customCountryDetector" />


  <!-- For Foldables -->
  <!-- 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="string" name="config_foldedArea" />


  <java-symbol type="array" name="config_disableApksUnlessMatchedSku_apk_list" />
  <java-symbol type="array" name="config_disableApksUnlessMatchedSku_apk_list" />
+11 −4
Original line number Original line Diff line number Diff line
@@ -103,7 +103,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {


    private final DisplayDeviceRepository mDisplayDeviceRepo;
    private final DisplayDeviceRepository mDisplayDeviceRepo;
    private final Listener mListener;
    private final Listener mListener;
    private final int mFoldedDeviceState;
    private final int[] mFoldedDeviceStates;


    LogicalDisplayMapper(Context context, DisplayDeviceRepository repo, Listener listener) {
    LogicalDisplayMapper(Context context, DisplayDeviceRepository repo, Listener listener) {
        mDisplayDeviceRepo = repo;
        mDisplayDeviceRepo = repo;
@@ -111,8 +111,8 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
        mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false);
        mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false);
        mDisplayDeviceRepo.addListener(this);
        mDisplayDeviceRepo.addListener(this);


        mFoldedDeviceState = context.getResources().getInteger(
        mFoldedDeviceStates = context.getResources().getIntArray(
                com.android.internal.R.integer.config_foldedDeviceState);
                com.android.internal.R.array.config_foldedDeviceStates);


        loadFoldedDisplayConfig(context);
        loadFoldedDisplayConfig(context);
    }
    }
@@ -216,7 +216,14 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
    }
    }


    void setDeviceStateLocked(int state) {
    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) {
    void setDeviceFoldedLocked(boolean isFolded) {
+11 −4
Original line number Original line Diff line number Diff line
@@ -209,16 +209,23 @@ class DisplayFoldController {
     * resource.
     * resource.
     */
     */
    private class DeviceStateListener implements DeviceStateManager.DeviceStateListener {
    private class DeviceStateListener implements DeviceStateManager.DeviceStateListener {
        private final int mFoldedDeviceState;
        private final int[] mFoldedDeviceStates;


        DeviceStateListener(Context context) {
        DeviceStateListener(Context context) {
            mFoldedDeviceState = context.getResources().getInteger(
            mFoldedDeviceStates = context.getResources().getIntArray(
                    com.android.internal.R.integer.config_foldedDeviceState);
                    com.android.internal.R.array.config_foldedDeviceStates);
        }
        }


        @Override
        @Override
        public void onDeviceStateChanged(int deviceState) {
        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);
        }
        }
    }
    }
}
}