Merge "Create API for WM to send letterbox info to SysUI." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fb27457c53
@@ -33,6 +33,7 @@ import android.view.InsetsVisibilities;
|
||||
|
||||
import com.android.internal.statusbar.IAddTileResultCallback;
|
||||
import com.android.internal.statusbar.IUndoMediaTransferCallback;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.statusbar.StatusBarIcon;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
|
||||
@@ -202,10 +203,12 @@ oneway interface IStatusBar
|
||||
* @param behavior the behavior of the focused window.
|
||||
* @param requestedVisibilities the collection of the requested visibilities of system insets.
|
||||
* @param packageName the package name of the focused app.
|
||||
* @param letterboxDetails a set of letterbox details of apps visible on the screen.
|
||||
*/
|
||||
void onSystemBarAttributesChanged(int displayId, int appearance,
|
||||
in AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
int behavior, in InsetsVisibilities requestedVisibilities, String packageName);
|
||||
int behavior, in InsetsVisibilities requestedVisibilities, String packageName,
|
||||
in LetterboxDetails[] letterboxDetails);
|
||||
|
||||
/**
|
||||
* Notifies System UI to show transient bars. The transient bars are system bars, e.g., status
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.internal.statusbar;
|
||||
|
||||
parcelable LetterboxDetails;
|
||||
243
core/java/com/android/internal/statusbar/LetterboxDetails.java
Normal file
243
core/java/com/android/internal/statusbar/LetterboxDetails.java
Normal file
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.internal.statusbar;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.view.InsetsFlags;
|
||||
import android.view.ViewDebug;
|
||||
import android.view.WindowInsetsController.Appearance;
|
||||
|
||||
import com.android.internal.util.DataClass;
|
||||
|
||||
/**
|
||||
* Details about the letterbox state of an app.
|
||||
*/
|
||||
@DataClass(
|
||||
genParcelable = true,
|
||||
genAidl = true,
|
||||
genToString = true,
|
||||
genGetters = false,
|
||||
genEqualsHashCode = true
|
||||
)
|
||||
public class LetterboxDetails implements Parcelable {
|
||||
|
||||
@NonNull
|
||||
private final Rect mLetterboxInnerBounds;
|
||||
@NonNull
|
||||
private final Rect mLetterboxFullBounds;
|
||||
private final int mAppAppearance;
|
||||
|
||||
/**
|
||||
* Returns the bounds of the inner letterbox (app content).
|
||||
*
|
||||
* <p>When an app is letterboxed, it is not using the full bounds of its window. Here we return
|
||||
* the bounds that are being used for the app content.
|
||||
*
|
||||
* <pre>
|
||||
* +-------+---------+-------+
|
||||
* | | | |
|
||||
* | | | |
|
||||
* | Outer | Inner | Outer |
|
||||
* | | | |
|
||||
* | | | |
|
||||
* +-------+-------- +-------+
|
||||
* <pre>
|
||||
*/
|
||||
@NonNull
|
||||
public Rect getLetterboxInnerBounds() {
|
||||
return mLetterboxInnerBounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the full bounds of the letterbox.
|
||||
*
|
||||
* <p>These are the entire bounds of the window where the app is placed. We cannot assume that
|
||||
* the full bounds are the bounds of the screen, as the app can be in split-screen, or can have
|
||||
* some margin due to display cutouts.
|
||||
*
|
||||
* <pre>
|
||||
* ---- Full bounds width ----
|
||||
* +-------+---------+-------+ |
|
||||
* | | | | |
|
||||
* | | | | |
|
||||
* | Outer | Inner | Outer | + Full bounds height
|
||||
* | | | | |
|
||||
* | | | | |
|
||||
* +-------+-------- +-------+ |
|
||||
* </pre>
|
||||
*/
|
||||
@NonNull
|
||||
public Rect getLetterboxFullBounds() {
|
||||
return mLetterboxFullBounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link Appearance} of the inner letterbox (app content).
|
||||
*/
|
||||
@Appearance
|
||||
public int getAppAppearance() {
|
||||
return mAppAppearance;
|
||||
}
|
||||
|
||||
/** Returns a string representation of the {@link #getAppAppearance()} property. */
|
||||
public String appAppearanceToString() {
|
||||
return ViewDebug.flagsToString(InsetsFlags.class, "appearance", mAppAppearance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
//
|
||||
// To regenerate run:
|
||||
// $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/statusbar/LetterboxDetails.java
|
||||
//
|
||||
// To exclude the generated code from IntelliJ auto-formatting enable (one-time):
|
||||
// Settings > Editor > Code Style > Formatter Control
|
||||
//@formatter:off
|
||||
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public LetterboxDetails(
|
||||
@NonNull Rect letterboxInnerBounds,
|
||||
@NonNull Rect letterboxFullBounds,
|
||||
int appAppearance) {
|
||||
this.mLetterboxInnerBounds = letterboxInnerBounds;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mLetterboxInnerBounds);
|
||||
this.mLetterboxFullBounds = letterboxFullBounds;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mLetterboxFullBounds);
|
||||
this.mAppAppearance = appAppearance;
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public String toString() {
|
||||
// You can override field toString logic by defining methods like:
|
||||
// String fieldNameToString() { ... }
|
||||
|
||||
return "LetterboxDetails { " +
|
||||
"letterboxInnerBounds = " + mLetterboxInnerBounds + ", " +
|
||||
"letterboxFullBounds = " + mLetterboxFullBounds + ", " +
|
||||
"appAppearance = " + appAppearanceToString() +
|
||||
" }";
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public boolean equals(@Nullable Object o) {
|
||||
// You can override field equality logic by defining either of the methods like:
|
||||
// boolean fieldNameEquals(LetterboxDetails other) { ... }
|
||||
// boolean fieldNameEquals(FieldType otherValue) { ... }
|
||||
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
@SuppressWarnings("unchecked")
|
||||
LetterboxDetails that = (LetterboxDetails) o;
|
||||
//noinspection PointlessBooleanExpression
|
||||
return true
|
||||
&& java.util.Objects.equals(mLetterboxInnerBounds, that.mLetterboxInnerBounds)
|
||||
&& java.util.Objects.equals(mLetterboxFullBounds, that.mLetterboxFullBounds)
|
||||
&& mAppAppearance == that.mAppAppearance;
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public int hashCode() {
|
||||
// You can override field hashCode logic by defining methods like:
|
||||
// int fieldNameHashCode() { ... }
|
||||
|
||||
int _hash = 1;
|
||||
_hash = 31 * _hash + java.util.Objects.hashCode(mLetterboxInnerBounds);
|
||||
_hash = 31 * _hash + java.util.Objects.hashCode(mLetterboxFullBounds);
|
||||
_hash = 31 * _hash + mAppAppearance;
|
||||
return _hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
// You can override field parcelling by defining methods like:
|
||||
// void parcelFieldName(Parcel dest, int flags) { ... }
|
||||
|
||||
dest.writeTypedObject(mLetterboxInnerBounds, flags);
|
||||
dest.writeTypedObject(mLetterboxFullBounds, flags);
|
||||
dest.writeInt(mAppAppearance);
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public int describeContents() { return 0; }
|
||||
|
||||
/** @hide */
|
||||
@SuppressWarnings({"unchecked", "RedundantCast"})
|
||||
@DataClass.Generated.Member
|
||||
protected LetterboxDetails(@NonNull Parcel in) {
|
||||
// You can override field unparcelling by defining methods like:
|
||||
// static FieldType unparcelFieldName(Parcel in) { ... }
|
||||
|
||||
Rect letterboxInnerBounds = (Rect) in.readTypedObject(Rect.CREATOR);
|
||||
Rect letterboxFullBounds = (Rect) in.readTypedObject(Rect.CREATOR);
|
||||
int appAppearance = in.readInt();
|
||||
|
||||
this.mLetterboxInnerBounds = letterboxInnerBounds;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mLetterboxInnerBounds);
|
||||
this.mLetterboxFullBounds = letterboxFullBounds;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mLetterboxFullBounds);
|
||||
this.mAppAppearance = appAppearance;
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public static final @NonNull Parcelable.Creator<LetterboxDetails> CREATOR
|
||||
= new Parcelable.Creator<LetterboxDetails>() {
|
||||
@Override
|
||||
public LetterboxDetails[] newArray(int size) {
|
||||
return new LetterboxDetails[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public LetterboxDetails createFromParcel(@NonNull Parcel in) {
|
||||
return new LetterboxDetails(in);
|
||||
}
|
||||
};
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1656941109526L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/core/java/com/android/internal/statusbar/LetterboxDetails.java",
|
||||
inputSignatures = "private final @android.annotation.NonNull android.graphics.Rect mLetterboxInnerBounds\nprivate final @android.annotation.NonNull android.graphics.Rect mLetterboxFullBounds\nprivate final int mAppAppearance\npublic @android.annotation.NonNull android.graphics.Rect getLetterboxInnerBounds()\npublic @android.annotation.NonNull android.graphics.Rect getLetterboxFullBounds()\npublic @android.view.WindowInsetsController.Appearance int getAppAppearance()\npublic java.lang.String appAppearanceToString()\nclass LetterboxDetails extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genToString=true, genGetters=false, genEqualsHashCode=true)")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
//@formatter:on
|
||||
// End of generated code
|
||||
|
||||
}
|
||||
@@ -43,12 +43,14 @@ public final class RegisterStatusBarResult implements Parcelable {
|
||||
public final InsetsVisibilities mRequestedVisibilities;
|
||||
public final String mPackageName;
|
||||
public final int[] mTransientBarTypes;
|
||||
public final LetterboxDetails[] mLetterboxDetails;
|
||||
|
||||
public RegisterStatusBarResult(ArrayMap<String, StatusBarIcon> icons, int disabledFlags1,
|
||||
int appearance, AppearanceRegion[] appearanceRegions, int imeWindowVis,
|
||||
int imeBackDisposition, boolean showImeSwitcher, int disabledFlags2, IBinder imeToken,
|
||||
boolean navbarColorManagedByIme, int behavior, InsetsVisibilities requestedVisibilities,
|
||||
String packageName, @NonNull int[] transientBarTypes) {
|
||||
String packageName, @NonNull int[] transientBarTypes,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
mIcons = new ArrayMap<>(icons);
|
||||
mDisabledFlags1 = disabledFlags1;
|
||||
mAppearance = appearance;
|
||||
@@ -63,6 +65,7 @@ public final class RegisterStatusBarResult implements Parcelable {
|
||||
mRequestedVisibilities = requestedVisibilities;
|
||||
mPackageName = packageName;
|
||||
mTransientBarTypes = transientBarTypes;
|
||||
mLetterboxDetails = letterboxDetails;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -86,6 +89,7 @@ public final class RegisterStatusBarResult implements Parcelable {
|
||||
dest.writeTypedObject(mRequestedVisibilities, 0);
|
||||
dest.writeString(mPackageName);
|
||||
dest.writeIntArray(mTransientBarTypes);
|
||||
dest.writeParcelableArray(mLetterboxDetails, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,10 +116,13 @@ public final class RegisterStatusBarResult implements Parcelable {
|
||||
source.readTypedObject(InsetsVisibilities.CREATOR);
|
||||
final String packageName = source.readString();
|
||||
final int[] transientBarTypes = source.createIntArray();
|
||||
final LetterboxDetails[] letterboxDetails =
|
||||
source.readParcelableArray(null, LetterboxDetails.class);
|
||||
return new RegisterStatusBarResult(icons, disabledFlags1, appearance,
|
||||
appearanceRegions, imeWindowVis, imeBackDisposition, showImeSwitcher,
|
||||
disabledFlags2, imeToken, navbarColorManagedByIme, behavior,
|
||||
requestedVisibilities, packageName, transientBarTypes);
|
||||
requestedVisibilities, packageName, transientBarTypes,
|
||||
letterboxDetails);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,6 +20,7 @@ import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_B
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Binder;
|
||||
import android.os.Parcel;
|
||||
import android.os.UserHandle;
|
||||
@@ -48,7 +49,11 @@ public class RegisterStatusBarResultTest {
|
||||
final ArrayMap<String, StatusBarIcon> iconMap = new ArrayMap<>();
|
||||
iconMap.put(dumyIconKey, new StatusBarIcon("com.android.internal.statusbar.test",
|
||||
UserHandle.of(100), 123, 1, 2, "dummyIconDescription"));
|
||||
|
||||
final LetterboxDetails letterboxDetails = new LetterboxDetails(
|
||||
/* letterboxInnerBounds= */ new Rect(1, 2, 3, 4),
|
||||
/* letterboxFullBounds= */ new Rect(5, 6, 7, 8),
|
||||
/* appAppearance= */ 321
|
||||
);
|
||||
final RegisterStatusBarResult original = new RegisterStatusBarResult(iconMap,
|
||||
0x2 /* disabledFlags1 */,
|
||||
0x4 /* appearance */,
|
||||
@@ -62,7 +67,8 @@ public class RegisterStatusBarResultTest {
|
||||
BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
|
||||
new InsetsVisibilities() /* requestedVisibilities */,
|
||||
"test" /* packageName */,
|
||||
new int[0] /* transientBarTypes */);
|
||||
new int[0] /* transientBarTypes */,
|
||||
new LetterboxDetails[] {letterboxDetails});
|
||||
|
||||
final RegisterStatusBarResult copy = clone(original);
|
||||
|
||||
@@ -84,6 +90,7 @@ public class RegisterStatusBarResultTest {
|
||||
assertThat(copy.mRequestedVisibilities).isEqualTo(original.mRequestedVisibilities);
|
||||
assertThat(copy.mPackageName).isEqualTo(original.mPackageName);
|
||||
assertThat(copy.mTransientBarTypes).isEqualTo(original.mTransientBarTypes);
|
||||
assertThat(copy.mLetterboxDetails).isEqualTo(original.mLetterboxDetails);
|
||||
}
|
||||
|
||||
private RegisterStatusBarResult clone(RegisterStatusBarResult original) {
|
||||
|
||||
@@ -105,6 +105,7 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEvent;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.systemui.Gefingerpoken;
|
||||
@@ -1069,7 +1070,8 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
||||
@Override
|
||||
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
if (displayId != mDisplayId) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ import android.view.WindowInsetsController.Behavior;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
@@ -357,7 +358,8 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
@Override
|
||||
public void onSystemBarAttributesChanged(int displayId, int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
|
||||
InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
|
||||
boolean nbModeChanged = false;
|
||||
if (mAppearance != appearance) {
|
||||
|
||||
@@ -66,6 +66,7 @@ import com.android.internal.os.SomeArgs;
|
||||
import com.android.internal.statusbar.IAddTileResultCallback;
|
||||
import com.android.internal.statusbar.IStatusBar;
|
||||
import com.android.internal.statusbar.IUndoMediaTransferCallback;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.statusbar.StatusBarIcon;
|
||||
import com.android.internal.util.GcUtils;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
@@ -361,7 +362,7 @@ public class CommandQueue extends IStatusBar.Stub implements
|
||||
default void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities,
|
||||
String packageName) { }
|
||||
String packageName, LetterboxDetails[] letterboxDetails) { }
|
||||
|
||||
/**
|
||||
* @see IStatusBar#showTransient(int, int[], boolean).
|
||||
@@ -1090,7 +1091,8 @@ public class CommandQueue extends IStatusBar.Stub implements
|
||||
@Override
|
||||
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
synchronized (mLock) {
|
||||
SomeArgs args = SomeArgs.obtain();
|
||||
args.argi1 = displayId;
|
||||
@@ -1100,6 +1102,7 @@ public class CommandQueue extends IStatusBar.Stub implements
|
||||
args.argi4 = behavior;
|
||||
args.arg2 = requestedVisibilities;
|
||||
args.arg3 = packageName;
|
||||
args.arg4 = letterboxDetails;
|
||||
mHandler.obtainMessage(MSG_SYSTEM_BAR_CHANGED, args).sendToTarget();
|
||||
}
|
||||
}
|
||||
@@ -1561,7 +1564,8 @@ public class CommandQueue extends IStatusBar.Stub implements
|
||||
for (int i = 0; i < mCallbacks.size(); i++) {
|
||||
mCallbacks.get(i).onSystemBarAttributesChanged(args.argi1, args.argi2,
|
||||
(AppearanceRegion[]) args.arg1, args.argi3 == 1, args.argi4,
|
||||
(InsetsVisibilities) args.arg2, (String) args.arg3);
|
||||
(InsetsVisibilities) args.arg2, (String) args.arg3,
|
||||
(LetterboxDetails[]) args.arg4);
|
||||
}
|
||||
args.recycle();
|
||||
break;
|
||||
|
||||
@@ -45,6 +45,7 @@ import android.view.WindowInsetsController.Behavior;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.systemui.R;
|
||||
@@ -463,7 +464,8 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba
|
||||
@Override
|
||||
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
if (displayId != mDisplayId) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -974,7 +974,7 @@ public class CentralSurfacesImpl extends CoreStartable implements
|
||||
}
|
||||
mCommandQueueCallbacks.onSystemBarAttributesChanged(mDisplayId, result.mAppearance,
|
||||
result.mAppearanceRegions, result.mNavbarColorManagedByIme, result.mBehavior,
|
||||
result.mRequestedVisibilities, result.mPackageName);
|
||||
result.mRequestedVisibilities, result.mPackageName, result.mLetterboxDetails);
|
||||
|
||||
// StatusBarManagerService has a back up of IME token and it's restored here.
|
||||
mCommandQueueCallbacks.setImeWindowStatus(mDisplayId, result.mImeToken,
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.view.animation.AccelerateInterpolator;
|
||||
import androidx.lifecycle.Observer;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
|
||||
@@ -144,7 +145,7 @@ public class LightsOutNotifController extends ViewController<View> {
|
||||
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities,
|
||||
String packageName) {
|
||||
String packageName, LetterboxDetails[] letterboxDetails) {
|
||||
if (displayId != mDisplayId) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ import android.view.WindowInsetsController.Behavior;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.statusbar.StatusBarIcon;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
@@ -53,6 +54,13 @@ import org.junit.Test;
|
||||
@SmallTest
|
||||
public class CommandQueueTest extends SysuiTestCase {
|
||||
|
||||
private static final LetterboxDetails[] TEST_LETTERBOX_DETAILS = new LetterboxDetails[] {
|
||||
new LetterboxDetails(
|
||||
/* letterboxInnerBounds= */ new Rect(100, 0, 200, 500),
|
||||
/* letterboxFullBounds= */ new Rect(0, 0, 500, 100),
|
||||
/* appAppearance= */ 123)
|
||||
};
|
||||
|
||||
private CommandQueue mCommandQueue;
|
||||
private Callbacks mCallbacks;
|
||||
private static final int SECONDARY_DISPLAY = 1;
|
||||
@@ -127,25 +135,27 @@ public class CommandQueueTest extends SysuiTestCase {
|
||||
public void testOnSystemBarAttributesChanged() {
|
||||
doTestOnSystemBarAttributesChanged(DEFAULT_DISPLAY, 1,
|
||||
new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
|
||||
BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test");
|
||||
BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test", TEST_LETTERBOX_DETAILS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnSystemBarAttributesChangedForSecondaryDisplay() {
|
||||
doTestOnSystemBarAttributesChanged(SECONDARY_DISPLAY, 1,
|
||||
new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
|
||||
BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test");
|
||||
BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test", TEST_LETTERBOX_DETAILS);
|
||||
}
|
||||
|
||||
private void doTestOnSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
mCommandQueue.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
|
||||
letterboxDetails);
|
||||
waitForIdleSync();
|
||||
verify(mCallbacks).onSystemBarAttributesChanged(eq(displayId), eq(appearance),
|
||||
eq(appearanceRegions), eq(navbarColorManagedByIme), eq(behavior),
|
||||
eq(requestedVisibilities), eq(packageName));
|
||||
eq(requestedVisibilities), eq(packageName), eq(letterboxDetails));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -108,7 +108,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
|
||||
false /* navbarColorManagedByIme */,
|
||||
BEHAVIOR_DEFAULT,
|
||||
null /* requestedVisibilities */,
|
||||
null /* packageName */);
|
||||
null /* packageName */,
|
||||
null /* letterboxDetails */);
|
||||
assertTrue(mLightsOutNotifController.areLightsOut());
|
||||
}
|
||||
|
||||
@@ -121,7 +122,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
|
||||
false /* navbarColorManagedByIme */,
|
||||
BEHAVIOR_DEFAULT,
|
||||
null /* requestedVisibilities */,
|
||||
null /* packageName */);
|
||||
null /* packageName */,
|
||||
null /* letterboxDetails */);
|
||||
assertFalse(mLightsOutNotifController.areLightsOut());
|
||||
}
|
||||
|
||||
@@ -152,7 +154,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
|
||||
false /* navbarColorManagedByIme */,
|
||||
BEHAVIOR_DEFAULT,
|
||||
null /* requestedVisibilities */,
|
||||
null /* packageName */);
|
||||
null /* packageName */,
|
||||
null /* letterboxDetails */);
|
||||
|
||||
// THEN we should show dot
|
||||
assertTrue(mLightsOutNotifController.shouldShowDot());
|
||||
@@ -172,7 +175,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
|
||||
false /* navbarColorManagedByIme */,
|
||||
BEHAVIOR_DEFAULT,
|
||||
null /* requestedVisibilities */,
|
||||
null /* packageName */);
|
||||
null /* packageName */,
|
||||
null /* letterboxDetails */);
|
||||
|
||||
// THEN we shouldn't show the dot
|
||||
assertFalse(mLightsOutNotifController.shouldShowDot());
|
||||
@@ -192,7 +196,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
|
||||
false /* navbarColorManagedByIme */,
|
||||
BEHAVIOR_DEFAULT,
|
||||
null /* requestedVisibilities */,
|
||||
null /* packageName */);
|
||||
null /* packageName */,
|
||||
null /* letterboxDetails */);
|
||||
|
||||
// THEN we shouldn't show the dot
|
||||
assertFalse(mLightsOutNotifController.shouldShowDot());
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.view.InsetsVisibilities;
|
||||
import android.view.WindowInsetsController.Appearance;
|
||||
import android.view.WindowInsetsController.Behavior;
|
||||
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.server.notification.NotificationDelegate;
|
||||
|
||||
@@ -133,7 +134,8 @@ public interface StatusBarManagerInternal {
|
||||
/** @see com.android.internal.statusbar.IStatusBar#onSystemBarAttributesChanged */
|
||||
void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName);
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
|
||||
LetterboxDetails[] letterboxDetails);
|
||||
|
||||
/** @see com.android.internal.statusbar.IStatusBar#showTransient */
|
||||
void showTransient(int displayId, @InternalInsetsType int[] types,
|
||||
|
||||
@@ -96,6 +96,7 @@ import com.android.internal.statusbar.ISessionListener;
|
||||
import com.android.internal.statusbar.IStatusBar;
|
||||
import com.android.internal.statusbar.IStatusBarService;
|
||||
import com.android.internal.statusbar.IUndoMediaTransferCallback;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.statusbar.NotificationVisibility;
|
||||
import com.android.internal.statusbar.RegisterStatusBarResult;
|
||||
import com.android.internal.statusbar.StatusBarIcon;
|
||||
@@ -596,13 +597,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
|
||||
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities,
|
||||
String packageName) {
|
||||
String packageName, LetterboxDetails[] letterboxDetails) {
|
||||
getUiState(displayId).setBarAttributes(appearance, appearanceRegions,
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
|
||||
letterboxDetails);
|
||||
if (mBar != null) {
|
||||
try {
|
||||
mBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
|
||||
navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
|
||||
letterboxDetails);
|
||||
} catch (RemoteException ex) { }
|
||||
}
|
||||
}
|
||||
@@ -1204,17 +1207,20 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
|
||||
private int mImeBackDisposition = 0;
|
||||
private boolean mShowImeSwitcher = false;
|
||||
private IBinder mImeToken = null;
|
||||
private LetterboxDetails[] mLetterboxDetails;
|
||||
|
||||
private void setBarAttributes(@Appearance int appearance,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
|
||||
@Behavior int behavior, InsetsVisibilities requestedVisibilities,
|
||||
String packageName) {
|
||||
String packageName,
|
||||
LetterboxDetails[] letterboxDetails) {
|
||||
mAppearance = appearance;
|
||||
mAppearanceRegions = appearanceRegions;
|
||||
mNavbarColorManagedByIme = navbarColorManagedByIme;
|
||||
mBehavior = behavior;
|
||||
mRequestedVisibilities = requestedVisibilities;
|
||||
mPackageName = packageName;
|
||||
mLetterboxDetails = letterboxDetails;
|
||||
}
|
||||
|
||||
private void showTransient(@InternalInsetsType int[] types) {
|
||||
@@ -1341,7 +1347,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
|
||||
state.mImeBackDisposition, state.mShowImeSwitcher,
|
||||
gatherDisableActionsLocked(mCurrentUserId, 2), state.mImeToken,
|
||||
state.mNavbarColorManagedByIme, state.mBehavior, state.mRequestedVisibilities,
|
||||
state.mPackageName, transientBarTypes);
|
||||
state.mPackageName, transientBarTypes, state.mLetterboxDetails);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -145,6 +145,7 @@ import com.android.internal.policy.GestureNavigationSettingsObserver;
|
||||
import com.android.internal.policy.ScreenDecorationsUtils;
|
||||
import com.android.internal.policy.SystemBarUtils;
|
||||
import com.android.internal.protolog.common.ProtoLog;
|
||||
import com.android.internal.statusbar.LetterboxDetails;
|
||||
import com.android.internal.util.ScreenshotHelper;
|
||||
import com.android.internal.util.function.TriConsumer;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
@@ -2399,7 +2400,7 @@ public class DisplayPolicy {
|
||||
mLastStatusBarAppearanceRegions = statusBarAppearanceRegions;
|
||||
callStatusBarSafely(statusBar -> statusBar.onSystemBarAttributesChanged(displayId,
|
||||
appearance, statusBarAppearanceRegions, isNavbarColorManagedByIme, behavior,
|
||||
requestedVisibilities, focusedApp));
|
||||
requestedVisibilities, focusedApp, new LetterboxDetails[]{}));
|
||||
}
|
||||
|
||||
private void callStatusBarSafely(Consumer<StatusBarManagerInternal> consumer) {
|
||||
|
||||
Reference in New Issue
Block a user