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

Commit 92edc518 authored by Galia Peycheva's avatar Galia Peycheva
Browse files

Add WMS support for keep-clear areas

Test: atest DisplayContentTests#testKeepClearAreasMultipleWindows
Test: atest WindowStateTests#testKeepClearAreas
Bug: 183746978
Change-Id: I974bf4254003467c8aa9a4f7aa618ab96985dd38
parent dfc53ff2
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

package android.view;

import android.graphics.Rect;
import android.content.res.Configuration;

import java.util.List;

/**
 * Interface to listen for changes to display window-containers.
 *
@@ -56,4 +59,9 @@ oneway interface IDisplayWindowListener {
     * Called when the previous fixed rotation on a display is finished.
     */
    void onFixedRotationFinished(int displayId);

    /**
     * Called when the keep clear ares on a display have changed.
     */
    void onKeepClearAreasChanged(int displayId, in List<Rect> keepClearAreas);
}
+2 −0
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ message DisplayContentProto {
    repeated InsetsSourceProviderProto insets_source_providers = 35;
    optional bool is_sleeping = 36;
    repeated string sleep_tokens = 37;
    repeated .android.graphics.RectProto keep_clear_areas = 38;

}

@@ -443,6 +444,7 @@ message WindowStateProto {
    optional bool force_seamless_rotation = 42;
    optional bool has_compat_scale = 43;
    optional float global_scale = 44;
    repeated .android.graphics.RectProto keep_clear_areas = 45;
}

message IdentifierProto {
+6 −6
Original line number Diff line number Diff line
@@ -2761,6 +2761,12 @@
      "group": "WM_SHOW_SURFACE_ALLOC",
      "at": "com\/android\/server\/wm\/WindowStateAnimator.java"
    },
    "751854538": {
      "message": "DisplayArea keep clear rects changed name =%s",
      "level": "VERBOSE",
      "group": "WM_DEBUG_WINDOW_ORGANIZER",
      "at": "com\/android\/server\/wm\/DisplayAreaOrganizerController.java"
    },
    "765395228": {
      "message": "onAnimationFinished(): controller=%s reorderMode=%d",
      "level": "DEBUG",
@@ -3691,12 +3697,6 @@
      "group": "WM_DEBUG_WINDOW_ORGANIZER",
      "at": "com\/android\/server\/wm\/DisplayAreaPolicyBuilder.java"
    },
    "1884961873": {
      "message": "Sleep still need to stop %d activities",
      "level": "VERBOSE",
      "group": "WM_DEBUG_STATES",
      "at": "com\/android\/server\/wm\/Task.java"
    },
    "1891501279": {
      "message": "cancelAnimation(): reason=%s",
      "level": "DEBUG",
+27 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.wm.shell.common;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
import android.os.RemoteException;
import android.util.Slog;
@@ -34,6 +35,7 @@ import com.android.wm.shell.common.DisplayChangeController.OnDisplayChangingList
import com.android.wm.shell.common.annotations.ShellMainThread;

import java.util.ArrayList;
import java.util.List;

/**
 * This module deals with display rotations coming from WM. When WM starts a rotation: after it has
@@ -243,6 +245,19 @@ public class DisplayController {
        }
    }

    private void onKeepClearAreasChanged(int displayId, List<Rect> keepClearAreas) {
        synchronized (mDisplays) {
            if (mDisplays.get(displayId) == null || getDisplay(displayId) == null) {
                Slog.w(TAG, "Skipping onKeepClearAreasChanged on unknown"
                        + " display, displayId=" + displayId);
                return;
            }
            for (int i = mDisplayChangedListeners.size() - 1; i >= 0; --i) {
                mDisplayChangedListeners.get(i).onKeepClearAreasChanged(displayId, keepClearAreas);
            }
        }
    }

    private static class DisplayRecord {
        private int mDisplayId;
        private Context mContext;
@@ -301,6 +316,13 @@ public class DisplayController {
                DisplayController.this.onFixedRotationFinished(displayId);
            });
        }

        @Override
        public void onKeepClearAreasChanged(int displayId, List<Rect> keepClearAreas) {
            mMainExecutor.execute(() -> {
                DisplayController.this.onKeepClearAreasChanged(displayId, keepClearAreas);
            });
        }
    }

    /**
@@ -335,5 +357,10 @@ public class DisplayController {
         * Called when fixed rotation on a display is finished.
         */
        default void onFixedRotationFinished(int displayId) {}

        /**
         * Called when keep-clear areas on a display have changed.
         */
        default void onKeepClearAreasChanged(int displayId, List<Rect> keepClearAreas) {}
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.hardware.CameraSessionStats;
import android.hardware.CameraStreamStats;
import android.hardware.ICameraService;
@@ -305,6 +306,9 @@ public class CameraServiceProxy extends SystemService

        @Override
        public void onFixedRotationFinished(int displayId) { }

        @Override
        public void onKeepClearAreasChanged(int displayId, List<Rect> keepClearArea) { }
    }


Loading