Merge "aslgen additional on-device to human-readable implementation" into main
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 35ab5f0..443a6c0e 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -4135,7 +4135,6 @@
method @NonNull public static String typeToString(int);
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.window.BackNavigationInfo> CREATOR;
- field public static final String KEY_TRIGGER_BACK = "TriggerBack";
field public static final int TYPE_CALLBACK = 4; // 0x4
field public static final int TYPE_CROSS_ACTIVITY = 2; // 0x2
field public static final int TYPE_CROSS_TASK = 3; // 0x3
diff --git a/core/java/android/window/BackNavigationInfo.java b/core/java/android/window/BackNavigationInfo.java
index 4816f35..b1cf834 100644
--- a/core/java/android/window/BackNavigationInfo.java
+++ b/core/java/android/window/BackNavigationInfo.java
@@ -72,8 +72,17 @@
/**
* Key to access the boolean value passed in {#mOnBackNavigationDone} result bundle
* that represents if back navigation has been triggered.
+ * @hide
*/
- public static final String KEY_TRIGGER_BACK = "TriggerBack";
+ public static final String KEY_NAVIGATION_FINISHED = "NavigationFinished";
+
+ /**
+ * Key to access the boolean value passed in {#mOnBackNavigationDone} result bundle
+ * that represents if back gesture has been triggered.
+ * @hide
+ */
+ public static final String KEY_GESTURE_FINISHED = "GestureFinished";
+
/**
* Defines the type of back destinations a back even can lead to. This is used to define the
@@ -192,7 +201,21 @@
public void onBackNavigationFinished(boolean triggerBack) {
if (mOnBackNavigationDone != null) {
Bundle result = new Bundle();
- result.putBoolean(KEY_TRIGGER_BACK, triggerBack);
+ result.putBoolean(KEY_NAVIGATION_FINISHED, triggerBack);
+ mOnBackNavigationDone.sendResult(result);
+ }
+ }
+
+ /**
+ * Callback to be called when the back gesture is finished in order to notify the server that
+ * it can ask app to start rendering.
+ * @hide
+ * @param triggerBack Boolean indicating if back gesture has been triggered.
+ */
+ public void onBackGestureFinished(boolean triggerBack) {
+ if (mOnBackNavigationDone != null) {
+ Bundle result = new Bundle();
+ result.putBoolean(KEY_GESTURE_FINISHED, triggerBack);
mOnBackNavigationDone.sendResult(result);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
index 73b2656..d3fe4f8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
@@ -837,6 +837,8 @@
// The next callback should be {@link #onBackAnimationFinished}.
if (mCurrentTracker.getTriggerBack()) {
+ // notify gesture finished
+ mBackNavigationInfo.onBackGestureFinished(true);
dispatchOrAnimateOnBackInvoked(mActiveCallback, mCurrentTracker);
} else {
tryDispatchOnBackCancelled(mActiveCallback);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
index 9c623bd..4061763 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
@@ -16,7 +16,7 @@
package com.android.wm.shell.back;
-import static android.window.BackNavigationInfo.KEY_TRIGGER_BACK;
+import static android.window.BackNavigationInfo.KEY_NAVIGATION_FINISHED;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -677,7 +677,7 @@
@Override
public void onResult(@Nullable Bundle result) {
mBackNavigationDone = true;
- mTriggerBack = result.getBoolean(KEY_TRIGGER_BACK);
+ mTriggerBack = result.getBoolean(KEY_NAVIGATION_FINISHED);
}
}
}
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt
index d67c8c2..a75aeaf 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt
@@ -124,7 +124,6 @@
handleGetNavigation(
navController = navController,
state = state,
- onCloseApp = onCloseApp,
selectEntry = selectEntry
)
}
@@ -147,7 +146,6 @@
private fun handleGetNavigation(
navController: NavController,
state: CredentialSelectorUiState.Get,
- onCloseApp: () -> Unit,
selectEntry: (entry: EntryInfo, isAutoSelected: Boolean) -> Unit,
) {
when (state) {
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt
index 437a699..0afef5e 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/components/SignInHeader.kt
@@ -56,6 +56,6 @@
text = title,
)
- Spacer(modifier = Modifier.size(12.dp))
+ Spacer(modifier = Modifier.size(8.dp))
}
}
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt
index a545e48..fb81e73 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt
@@ -27,7 +27,7 @@
import com.android.credentialmanager.FlowEngine
import com.android.credentialmanager.R
import com.android.credentialmanager.common.ui.components.WearButtonText
-import com.android.credentialmanager.common.ui.components.WearDisplayNameText
+import com.android.credentialmanager.common.ui.components.WearSecondaryLabel
import com.android.credentialmanager.model.get.CredentialEntryInfo
import com.android.credentialmanager.ui.components.CredentialsScreenChipSpacer
import com.google.android.horologist.annotations.ExperimentalHorologistApi
@@ -64,10 +64,9 @@
credentialSelectorUiState.accounts.forEach { userNameEntries ->
item {
- WearDisplayNameText(
+ WearSecondaryLabel(
text = userNameEntries.userName,
- modifier = Modifier.padding(top = 16.dp, bottom = 8.dp, start = 14.dp,
- end = 14.dp)
+ modifier = Modifier.padding(top = 12.dp, bottom = 4.dp)
)
}
@@ -86,9 +85,9 @@
}
}
item {
- WearDisplayNameText(
+ WearSecondaryLabel(
text = stringResource(R.string.provider_list_title),
- modifier = Modifier.padding(top = 12.dp, bottom = 8.dp, start = 14.dp, end = 14.dp)
+ modifier = Modifier.padding(top = 12.dp, bottom = 4.dp)
)
}
credentialSelectorUiState.actionEntryList.forEach { actionEntry ->
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt
index 23163d5..7addc74 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt
@@ -61,7 +61,10 @@
val credentials = credentialSelectorUiState.sortedEntries
item {
var title = stringResource(R.string.choose_sign_in_title)
- if (credentials.all{ it.credentialType == CredentialType.PASSKEY }) {
+
+ if (credentials.isEmpty()) {
+ title = stringResource(R.string.choose_sign_in_title)
+ } else if (credentials.all{ it.credentialType == CredentialType.PASSKEY }) {
title = stringResource(R.string.choose_passkey_title)
} else if (credentials.all { it.credentialType == CredentialType.PASSWORD }) {
title = stringResource(R.string.choose_password_title)
@@ -74,16 +77,16 @@
}
credentials.forEach { credential: CredentialEntryInfo ->
- item {
- CredentialsScreenChip(
- label = credential.userName,
- onClick = { selectEntry(credential, false) },
- secondaryLabel = credential.credentialTypeDisplayName,
- icon = credential.icon,
- )
- CredentialsScreenChipSpacer()
- }
+ item {
+ CredentialsScreenChip(
+ label = credential.userName,
+ onClick = { selectEntry(credential, false) },
+ secondaryLabel = credential.credentialTypeDisplayName,
+ icon = credential.icon,
+ )
+ CredentialsScreenChipSpacer()
}
+ }
credentialSelectorUiState.authenticationEntryList.forEach { authenticationEntryInfo ->
item {
@@ -93,10 +96,13 @@
CredentialsScreenChipSpacer()
}
}
+
item {
- Spacer(modifier = Modifier.size(12.dp))
+ Spacer(modifier = Modifier.size(8.dp))
+ }
+
+ item {
SignInOptionsChip { flowEngine.openSecondaryScreen() }
- CredentialsScreenChipSpacer()
}
item {
DismissChip { flowEngine.cancel() }
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/passkey/SinglePasskeyScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/passkey/SinglePasskeyScreen.kt
index de7c1f1..03608a4 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/passkey/SinglePasskeyScreen.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/passkey/SinglePasskeyScreen.kt
@@ -61,10 +61,18 @@
)
},
accountContent = {
- AccountRow(
- primaryText = checkNotNull(entry.displayName),
+ val displayName = entry.displayName
+ if (displayName == null ||
+ entry.displayName.equals(entry.userName, ignoreCase = true)) {
+ AccountRow(
+ primaryText = entry.userName,
+ )
+ } else {
+ AccountRow(
+ primaryText = displayName,
secondaryText = entry.userName,
)
+ }
},
columnState = columnState,
modifier = Modifier.padding(horizontal = 10.dp)
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt
index 884d9f6..34d6e97 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt
@@ -59,14 +59,15 @@
},
accountContent = {
val displayName = entry.displayName
- if (displayName != null) {
+ if (displayName == null ||
+ entry.displayName.equals(entry.userName, ignoreCase = true)) {
AccountRow(
- primaryText = displayName,
- secondaryText = entry.userName,
+ primaryText = entry.userName,
)
} else {
AccountRow(
- primaryText = entry.userName,
+ primaryText = displayName,
+ secondaryText = entry.userName,
)
}
},
diff --git a/packages/SystemUI/src/com/android/systemui/ailabs/OWNERS b/packages/SystemUI/src/com/android/systemui/ailabs/OWNERS
new file mode 100644
index 0000000..b65d29c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/ailabs/OWNERS
@@ -0,0 +1,9 @@
+# Bug component: 1495344
+
+dupin@google.com
+linyuh@google.com
+pauldpong@google.com
+praveenj@google.com
+vicliang@google.com
+mfolkerts@google.com
+yuklimko@google.com
diff --git a/services/core/java/com/android/server/am/AppRestrictionController.java b/services/core/java/com/android/server/am/AppRestrictionController.java
index 8b1300b..ef015ee 100644
--- a/services/core/java/com/android/server/am/AppRestrictionController.java
+++ b/services/core/java/com/android/server/am/AppRestrictionController.java
@@ -2153,9 +2153,12 @@
mRestrictionSettings.update(pkgName, uid, level, reason, subReason);
}
- if (!allowUpdateBucket || curBucket == STANDBY_BUCKET_EXEMPTED) {
+ if (!android.app.Flags.appRestrictionsApi()
+ && (!allowUpdateBucket || curBucket == STANDBY_BUCKET_EXEMPTED)) {
return;
}
+
+ boolean doItNow = true;
if (level >= RESTRICTION_LEVEL_RESTRICTED_BUCKET
&& curLevel < RESTRICTION_LEVEL_RESTRICTED_BUCKET) {
// Moving the app standby bucket to restricted in the meanwhile.
@@ -2168,7 +2171,6 @@
&& (mConstantsObserver.mBgAutoRestrictedBucket
|| level == RESTRICTION_LEVEL_RESTRICTED_BUCKET)) {
// restrict the app if it hasn't done so.
- boolean doIt = true;
synchronized (mSettingsLock) {
final int index = mActiveUids.indexOfKey(uid, pkgName);
if (index >= 0) {
@@ -2182,14 +2184,16 @@
logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level,
localTrackerInfo, localReason);
});
- doIt = false;
+ doItNow = false;
}
}
- if (doIt) {
+ if (doItNow) {
appStandbyInternal.restrictApp(pkgName, UserHandle.getUserId(uid),
reason, subReason);
- logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level, trackerInfo,
- reason);
+ if (!android.app.Flags.appRestrictionsApi()) {
+ logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level, trackerInfo,
+ reason);
+ }
}
}
} else if (curLevel >= RESTRICTION_LEVEL_RESTRICTED_BUCKET
@@ -2204,6 +2208,13 @@
appStandbyInternal.maybeUnrestrictApp(pkgName, UserHandle.getUserId(uid),
prevReason & REASON_MAIN_MASK, prevReason & REASON_SUB_MASK,
reason, subReason);
+ if (!android.app.Flags.appRestrictionsApi()) {
+ logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level, trackerInfo,
+ reason);
+ }
+ }
+
+ if (doItNow && android.app.Flags.appRestrictionsApi()) {
logAppBackgroundRestrictionInfo(pkgName, uid, curLevel, level, trackerInfo,
reason);
}
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 2b43326..e280bdc 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -466,20 +466,17 @@
}
}
- void drawMagnifiedRegionBorderIfNeeded(int displayId) {
- if (Flags.alwaysDrawMagnificationFullscreenBorder()) {
- return;
- }
-
+ void recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded(int displayId) {
if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
mAccessibilityTracing.logTrace(
- TAG + ".drawMagnifiedRegionBorderIfNeeded",
+ TAG + ".recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded",
FLAGS_MAGNIFICATION_CALLBACK,
"displayId=" + displayId);
}
+
final DisplayMagnifier displayMagnifier = mDisplayMagnifiers.get(displayId);
if (displayMagnifier != null) {
- displayMagnifier.drawMagnifiedRegionBorderIfNeeded();
+ displayMagnifier.recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded();
}
// Not relevant for the window observer.
}
@@ -936,11 +933,13 @@
}
}
- void drawMagnifiedRegionBorderIfNeeded() {
+ void recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded() {
if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
- mAccessibilityTracing.logTrace(LOG_TAG + ".drawMagnifiedRegionBorderIfNeeded",
+ mAccessibilityTracing.logTrace(LOG_TAG
+ + ".recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded",
FLAGS_MAGNIFICATION_CALLBACK);
}
+ recomputeBounds();
if (!Flags.alwaysDrawMagnificationFullscreenBorder()) {
mMagnifiedViewport.drawWindowIfNeeded();
@@ -1245,7 +1244,6 @@
}
void drawWindowIfNeeded() {
- recomputeBounds();
mWindow.postDrawIfNeeded();
}
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index b9979adb..d709fa5 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -1762,18 +1762,39 @@
}
private void onBackNavigationDone(Bundle result, int backType) {
- boolean triggerBack = result != null && result.getBoolean(
- BackNavigationInfo.KEY_TRIGGER_BACK);
- ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "onBackNavigationDone backType=%s, "
- + "triggerBack=%b", backType, triggerBack);
+ if (result == null) {
+ return;
+ }
+ if (result.containsKey(BackNavigationInfo.KEY_NAVIGATION_FINISHED)) {
+ final boolean triggerBack = result.getBoolean(
+ BackNavigationInfo.KEY_NAVIGATION_FINISHED);
+ ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "onBackNavigationDone backType=%s, "
+ + "triggerBack=%b", backType, triggerBack);
- synchronized (mWindowManagerService.mGlobalLock) {
- mNavigationMonitor.stopMonitorForRemote();
- mBackAnimationInProgress = false;
- mShowWallpaper = false;
- // All animation should be done, clear any un-send animation.
- mPendingAnimation = null;
- mPendingAnimationBuilder = null;
+ synchronized (mWindowManagerService.mGlobalLock) {
+ mNavigationMonitor.stopMonitorForRemote();
+ mBackAnimationInProgress = false;
+ mShowWallpaper = false;
+ // All animation should be done, clear any un-send animation.
+ mPendingAnimation = null;
+ mPendingAnimationBuilder = null;
+ }
+ }
+ if (result.getBoolean(BackNavigationInfo.KEY_GESTURE_FINISHED)) {
+ synchronized (mWindowManagerService.mGlobalLock) {
+ final AnimationHandler ah = mAnimationHandler;
+ if (!ah.mComposed || ah.mWaitTransition || ah.mOpenActivities == null
+ || (ah.mSwitchType != AnimationHandler.TASK_SWITCH
+ && ah.mSwitchType != AnimationHandler.ACTIVITY_SWITCH)) {
+ return;
+ }
+ for (int i = mAnimationHandler.mOpenActivities.length - 1; i >= 0; --i) {
+ final ActivityRecord preDrawActivity = mAnimationHandler.mOpenActivities[i];
+ if (!preDrawActivity.mLaunchTaskBehind) {
+ setLaunchBehind(preDrawActivity);
+ }
+ }
+ }
}
}
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index b43a454..8afcf0e 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -150,7 +150,9 @@
dc.checkAppWindowsReadyToShow();
}
if (accessibilityController.hasCallbacks()) {
- accessibilityController.drawMagnifiedRegionBorderIfNeeded(dc.mDisplayId);
+ accessibilityController
+ .recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded(
+ dc.mDisplayId);
}
if (dc.isAnimating(animationFlags, ANIMATION_TYPE_ALL)) {
diff --git a/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java b/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java
index fe883e4..8024915 100644
--- a/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java
@@ -772,6 +772,9 @@
@Test
public void testInterceptPowerKeyDown_triggerEmergency_fiveFastTaps_gestureIgnored() {
+ when(mResources.getInteger(
+ com.android.internal.R.integer.config_defaultMinEmergencyGestureTapDurationMillis))
+ .thenReturn(200);
// Trigger emergency by tapping button 5 times
long eventTime = triggerEmergencyGesture(/* tapIntervalMs= */ 1);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index ec2c968..50db99e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -1162,7 +1162,8 @@
invocationOnMock.callRealMethod();
return null;
}).when(surface).lockCanvas(any());
- mWm.mAccessibilityController.drawMagnifiedRegionBorderIfNeeded(displayId);
+ mWm.mAccessibilityController
+ .recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded(displayId);
waitUntilHandlersIdle();
try {
verify(surface).lockCanvas(any());
@@ -1170,7 +1171,8 @@
clearInvocations(surface);
// Invalidate and redraw.
mWm.mAccessibilityController.onDisplaySizeChanged(mDisplayContent);
- mWm.mAccessibilityController.drawMagnifiedRegionBorderIfNeeded(displayId);
+ mWm.mAccessibilityController
+ .recomputeMagnifiedRegionAndDrawMagnifiedRegionBorderIfNeeded(displayId);
// Turn off magnification to release surface.
mWm.mAccessibilityController.setMagnificationCallbacks(displayId, null);
waitUntilHandlersIdle();