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

Commit 40814bdf authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Add device config for experiment of orientation opt-out

With command: adb shell device_config put window_manager \
  opt_out_ignore_activity_orientation_request_list \
  com.pkg1,com.pkg2,com.pkg3
The activity can keep its fixed orientation if
ignore_activity_orientation_request is enabled.

Flag: EXEMPT disabled code
Test: presubmit
Bug: 357141415
Change-Id: I6534bfcadc8c59a29a96ba12929f1ef9b13f4938
parent d8aa9a2a
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -3201,6 +3201,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        if (!compatEnabled && !mWmService.mConstants.mIgnoreActivityOrientationRequest) {
        if (!compatEnabled && !mWmService.mConstants.mIgnoreActivityOrientationRequest) {
            return false;
            return false;
        }
        }
        if (mWmService.mConstants.isPackageOptOutIgnoreActivityOrientationRequest(packageName)) {
            return false;
        }
        // If the user preference respects aspect ratio, then it becomes non-resizable.
        // If the user preference respects aspect ratio, then it becomes non-resizable.
        return !mAppCompatController.getAppCompatOverrides().getAppCompatAspectRatioOverrides()
        return !mAppCompatController.getAppCompatOverrides().getAppCompatAspectRatioOverrides()
                .shouldApplyUserMinAspectRatioOverride();
                .shouldApplyUserMinAspectRatioOverride();
+36 −0
Original line number Original line Diff line number Diff line
@@ -22,10 +22,12 @@ import static android.provider.AndroidDeviceConfig.KEY_SYSTEM_GESTURE_EXCLUSION_
import android.provider.AndroidDeviceConfig;
import android.provider.AndroidDeviceConfig;
import android.provider.DeviceConfig;
import android.provider.DeviceConfig;
import android.provider.DeviceConfigInterface;
import android.provider.DeviceConfigInterface;
import android.util.ArraySet;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;


import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;


@@ -38,6 +40,10 @@ final class WindowManagerConstants {
    private static final String KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST =
    private static final String KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST =
            "ignore_activity_orientation_request";
            "ignore_activity_orientation_request";


    /** The packages that ignore {@link #KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST}. */
    private static final String KEY_OPT_OUT_IGNORE_ACTIVITY_ORIENTATION_REQUEST_LIST =
            "opt_out_ignore_activity_orientation_request_list";

    /**
    /**
     * The minimum duration between gesture exclusion logging for a given window in
     * The minimum duration between gesture exclusion logging for a given window in
     * milliseconds.
     * milliseconds.
@@ -65,6 +71,9 @@ final class WindowManagerConstants {
    /** @see #KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST */
    /** @see #KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST */
    boolean mIgnoreActivityOrientationRequest;
    boolean mIgnoreActivityOrientationRequest;


    /** @see #KEY_OPT_OUT_IGNORE_ACTIVITY_ORIENTATION_REQUEST_LIST */
    private ArraySet<String> mOptOutIgnoreActivityOrientationRequestPackages;

    private final WindowManagerGlobalLock mGlobalLock;
    private final WindowManagerGlobalLock mGlobalLock;
    private final Runnable mUpdateSystemGestureExclusionCallback;
    private final Runnable mUpdateSystemGestureExclusionCallback;
    private final DeviceConfigInterface mDeviceConfig;
    private final DeviceConfigInterface mDeviceConfig;
@@ -97,6 +106,7 @@ final class WindowManagerConstants {
        updateSystemGestureExclusionLimitDp();
        updateSystemGestureExclusionLimitDp();
        updateSystemGestureExcludedByPreQStickyImmersive();
        updateSystemGestureExcludedByPreQStickyImmersive();
        updateIgnoreActivityOrientationRequest();
        updateIgnoreActivityOrientationRequest();
        updateOptOutIgnoreActivityOrientationRequestList();
    }
    }


    private void onAndroidPropertiesChanged(DeviceConfig.Properties properties) {
    private void onAndroidPropertiesChanged(DeviceConfig.Properties properties) {
@@ -138,6 +148,9 @@ final class WindowManagerConstants {
                    case KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST:
                    case KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST:
                        updateIgnoreActivityOrientationRequest();
                        updateIgnoreActivityOrientationRequest();
                        break;
                        break;
                    case KEY_OPT_OUT_IGNORE_ACTIVITY_ORIENTATION_REQUEST_LIST:
                        updateOptOutIgnoreActivityOrientationRequestList();
                        break;
                    default:
                    default:
                        break;
                        break;
                }
                }
@@ -169,6 +182,25 @@ final class WindowManagerConstants {
                KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST, false);
                KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST, false);
    }
    }


    private void updateOptOutIgnoreActivityOrientationRequestList() {
        final String packageList = mDeviceConfig.getString(
                DeviceConfig.NAMESPACE_WINDOW_MANAGER,
                KEY_OPT_OUT_IGNORE_ACTIVITY_ORIENTATION_REQUEST_LIST, "");
        if (packageList.isEmpty()) {
            mOptOutIgnoreActivityOrientationRequestPackages = null;
            return;
        }
        mOptOutIgnoreActivityOrientationRequestPackages = new ArraySet<>();
        mOptOutIgnoreActivityOrientationRequestPackages.addAll(
                Arrays.asList(packageList.split(",")));
    }

    boolean isPackageOptOutIgnoreActivityOrientationRequest(String packageName) {
        return mIgnoreActivityOrientationRequest
                && mOptOutIgnoreActivityOrientationRequestPackages != null
                && mOptOutIgnoreActivityOrientationRequestPackages.contains(packageName);
    }

    void dump(PrintWriter pw) {
    void dump(PrintWriter pw) {
        pw.println("WINDOW MANAGER CONSTANTS (dumpsys window constants):");
        pw.println("WINDOW MANAGER CONSTANTS (dumpsys window constants):");


@@ -180,6 +212,10 @@ final class WindowManagerConstants {
        pw.print("="); pw.println(mSystemGestureExcludedByPreQStickyImmersive);
        pw.print("="); pw.println(mSystemGestureExcludedByPreQStickyImmersive);
        pw.print("  "); pw.print(KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST);
        pw.print("  "); pw.print(KEY_IGNORE_ACTIVITY_ORIENTATION_REQUEST);
        pw.print("="); pw.println(mIgnoreActivityOrientationRequest);
        pw.print("="); pw.println(mIgnoreActivityOrientationRequest);
        if (mOptOutIgnoreActivityOrientationRequestPackages != null) {
            pw.print("  "); pw.print(KEY_OPT_OUT_IGNORE_ACTIVITY_ORIENTATION_REQUEST_LIST);
            pw.print("="); pw.println(mOptOutIgnoreActivityOrientationRequestPackages);
        }
        pw.println();
        pw.println();
    }
    }
}
}