Merge "Added a GTS test flag for BICS." into main
diff --git a/apct-tests/perftests/core/src/android/os/TracePerfTest.java b/apct-tests/perftests/core/src/android/os/TracePerfTest.java
index d905124..00e1c1f 100644
--- a/apct-tests/perftests/core/src/android/os/TracePerfTest.java
+++ b/apct-tests/perftests/core/src/android/os/TracePerfTest.java
@@ -147,7 +147,7 @@
.addField(1 /* sending_thread_name */, "foo")
.endNested()
.endProto()
- .addTerminatingFlow(5)
+ .setTerminatingFlow(5)
.emit();
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
@@ -158,7 +158,7 @@
.addField(1 /* sending_thread_name */, "foo")
.endNested()
.endProto()
- .addTerminatingFlow(5)
+ .setTerminatingFlow(5)
.emit();
}
}
diff --git a/apct-tests/perftests/healthconnect/OWNERS b/apct-tests/perftests/healthconnect/OWNERS
index acfe799..7c9e769 100644
--- a/apct-tests/perftests/healthconnect/OWNERS
+++ b/apct-tests/perftests/healthconnect/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 1219472
-arkivanov@google.com
jstembridge@google.com
itsleo@google.com
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
index 0298c1e6..251776e 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -2995,6 +2995,8 @@
pw.print(Flags.FLAG_START_USER_BEFORE_SCHEDULED_ALARMS,
Flags.startUserBeforeScheduledAlarms());
pw.println();
+ pw.print(Flags.FLAG_ACQUIRE_WAKELOCK_BEFORE_SEND, Flags.acquireWakelockBeforeSend());
+ pw.println();
pw.decreaseIndent();
pw.println();
diff --git a/api/OWNERS b/api/OWNERS
index f2bcf13..31ffa8c 100644
--- a/api/OWNERS
+++ b/api/OWNERS
@@ -1,4 +1,3 @@
-hansson@google.com
# Modularization team
file:platform/packages/modules/common:/OWNERS
diff --git a/boot/boot-image-profile.txt b/boot/boot-image-profile.txt
index 8f987c2..d7c409f 100644
--- a/boot/boot-image-profile.txt
+++ b/boot/boot-image-profile.txt
@@ -120,9 +120,9 @@
HSPLandroid/accounts/IAccountManagerResponse$Stub;->getMaxTransactionId()I
HSPLandroid/accounts/IAccountManagerResponse$Stub;->getTransactionName(I)Ljava/lang/String;
HSPLandroid/accounts/IAccountManagerResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-SPLandroid/adpf/FeatureFlagsImpl;-><init>()V
-SPLandroid/adpf/FeatureFlagsImpl;->adpfViewrootimplActionDownBoost()Z
-SPLandroid/adpf/Flags;-><clinit>()V
+HSPLandroid/adpf/FeatureFlagsImpl;-><init>()V
+HSPLandroid/adpf/FeatureFlagsImpl;->adpfViewrootimplActionDownBoost()Z
+HSPLandroid/adpf/Flags;-><clinit>()V
HSPLandroid/adpf/Flags;->adpfViewrootimplActionDownBoost()Z
HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;-><init>(Landroid/animation/AnimationHandler;)V
HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;->doFrame(J)V
@@ -166,7 +166,7 @@
HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Landroid/animation/Animator;
HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Ljava/lang/Object;
HSPLandroid/animation/Animator$AnimatorListener;->onAnimationEnd(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types
-HSPLandroid/animation/Animator$AnimatorListener;->onAnimationStart(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types
+HSPLandroid/animation/Animator$AnimatorListener;->onAnimationStart(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
HSPLandroid/animation/Animator;-><init>()V
HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
HSPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
@@ -240,6 +240,7 @@
HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z
HSPLandroid/animation/AnimatorSet;->end()V
HSPLandroid/animation/AnimatorSet;->endAnimation()V
+HSPLandroid/animation/AnimatorSet;->endAnimation(Z)V+]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLandroid/animation/AnimatorSet;->ensureChildStartAndEndTimes()[J
HSPLandroid/animation/AnimatorSet;->findLatestEventIdForTime(J)I
HSPLandroid/animation/AnimatorSet;->findNextIndex(J[J)I
@@ -552,7 +553,7 @@
HSPLandroid/app/Activity$HostCallbacks;->onUseFragmentManagerInflaterFactory()Z
HSPLandroid/app/Activity;-><init>()V
HSPLandroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;Landroid/os/IBinder;Landroid/os/IBinder;)V
-HSPLandroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/os/IBinder;)V
+HSPLandroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/os/IBinder;)V+]Landroid/app/FragmentController;Landroid/app/FragmentController;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/view/Window;Lcom/android/internal/policy/PhoneWindow;
HSPLandroid/app/Activity;->attachBaseContext(Landroid/content/Context;)V
HSPLandroid/app/Activity;->cancelInputsAndStartExitTransition(Landroid/os/Bundle;)V
HSPLandroid/app/Activity;->collectActivityLifecycleCallbacks()[Ljava/lang/Object;
@@ -715,7 +716,7 @@
HSPLandroid/app/ActivityManager$$ExternalSyntheticLambda2;->fetchValue()Ljava/lang/Object;
HSPLandroid/app/ActivityManager$2;-><init>(Landroid/app/ActivityManager;)V
HSPLandroid/app/ActivityManager$4;->create()Landroid/app/IActivityManager;
-SPLandroid/app/ActivityManager$4;->create()Ljava/lang/Object;
+HSPLandroid/app/ActivityManager$4;->create()Ljava/lang/Object;
HSPLandroid/app/ActivityManager$AppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
HSPLandroid/app/ActivityManager$MemoryInfo;-><init>()V
HSPLandroid/app/ActivityManager$MemoryInfo;->copyTo(Landroid/app/ActivityManager$MemoryInfo;)V
@@ -765,7 +766,7 @@
HSPLandroid/app/ActivityManager$TaskDescription;->setPrimaryColor(I)V
HSPLandroid/app/ActivityManager$TaskDescription;->setStatusBarColor(I)V
HSPLandroid/app/ActivityManager$TaskDescription;->writeToParcel(Landroid/os/Parcel;I)V
-SPLandroid/app/ActivityManager;->$r8$lambda$KfaWjLSz8MRDCTZ5k_6RKNsGfys(Landroid/app/ActivityManager;)Ljava/util/List;
+HSPLandroid/app/ActivityManager;->$r8$lambda$KfaWjLSz8MRDCTZ5k_6RKNsGfys(Landroid/app/ActivityManager;)Ljava/util/List;
HSPLandroid/app/ActivityManager;->$r8$lambda$ZuQeTlxj3UIhJqa0jkPJ3FavvSc(Landroid/app/ActivityManager;)Landroid/app/ActivityManager$MemoryInfo;
HSPLandroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
HSPLandroid/app/ActivityManager;->addOnUidImportanceListener(Landroid/app/ActivityManager$OnUidImportanceListener;I)V
@@ -794,7 +795,7 @@
HSPLandroid/app/ActivityManager;->isLowMemoryKillReportSupported()Z
HSPLandroid/app/ActivityManager;->isLowRamDevice()Z
HSPLandroid/app/ActivityManager;->isLowRamDeviceStatic()Z
-SPLandroid/app/ActivityManager;->isProcStateCached(I)Z
+HSPLandroid/app/ActivityManager;->isProcStateCached(I)Z
HSPLandroid/app/ActivityManager;->isProcStateJankPerceptible(I)Z
HSPLandroid/app/ActivityManager;->isRunningInTestHarness()Z
HSPLandroid/app/ActivityManager;->isRunningInUserTestHarness()Z
@@ -803,7 +804,7 @@
HSPLandroid/app/ActivityManager;->isUserRunning(I)Z
HSPLandroid/app/ActivityManager;->lambda$getMemoryInfo$0()Landroid/app/ActivityManager$MemoryInfo;
HSPLandroid/app/ActivityManager;->lambda$getMyMemoryState$3()Landroid/app/ActivityManager$RunningAppProcessInfo;
-SPLandroid/app/ActivityManager;->lambda$getRunningAppProcesses$2()Ljava/util/List;
+HSPLandroid/app/ActivityManager;->lambda$getRunningAppProcesses$2()Ljava/util/List;
HSPLandroid/app/ActivityManager;->staticGetLargeMemoryClass()I
HSPLandroid/app/ActivityManager;->staticGetMemoryClass()I
HSPLandroid/app/ActivityOptions$SourceInfo;-><init>(IJ)V
@@ -830,12 +831,13 @@
HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda1;-><init>()V
HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda4;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/app/ActivityThread$2;-><init>(Landroid/app/ActivityThread;Landroid/app/IActivityManager;)V
-HSPLandroid/app/ActivityThread$3;-><init>(Landroid/app/ActivityThread;)V
+SPLandroid/app/ActivityThread$3;-><init>(Landroid/app/ActivityThread;Landroid/app/IActivityManager;)V
HSPLandroid/app/ActivityThread$4;-><init>(Landroid/app/ActivityThread;)V
-SPLandroid/app/ActivityThread$4;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
-SPLandroid/app/ActivityThread$5;-><init>(Landroid/app/ActivityThread;)V
-SPLandroid/app/ActivityThread$5;->run()V
+HSPLandroid/app/ActivityThread$4;->run()V
+HSPLandroid/app/ActivityThread$5;-><init>(Landroid/app/ActivityThread;)V
+SPLandroid/app/ActivityThread$5;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
+SPLandroid/app/ActivityThread$6;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$6;->run()V
HSPLandroid/app/ActivityThread$ActivityClientRecord$1;-><init>(Landroid/app/ActivityThread$ActivityClientRecord;)V
HSPLandroid/app/ActivityThread$ActivityClientRecord;->-$$Nest$misPreHoneycomb(Landroid/app/ActivityThread$ActivityClientRecord;)Z
HSPLandroid/app/ActivityThread$ActivityClientRecord;-><init>(Landroid/os/IBinder;Landroid/content/Intent;ILandroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/util/List;Ljava/util/List;Landroid/app/ActivityOptions$SceneTransitionInfo;ZLandroid/app/ProfilerInfo;Landroid/app/ClientTransactionHandler;Landroid/os/IBinder;Landroid/os/IBinder;ZLandroid/os/IBinder;Landroid/os/IBinder;Landroid/window/ActivityWindowInfo;)V
@@ -855,7 +857,7 @@
HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;-><init>()V
HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;)V
-SPLandroid/app/ActivityThread$ApplicationThread;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/String;ZLandroid/content/pm/ProviderInfoList;Landroid/content/ComponentName;Landroid/app/ProfilerInfo;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;IZZZZLandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/util/Map;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/AutofillOptions;Landroid/content/ContentCaptureOptions;[J[JLandroid/os/SharedMemory;Ljava/io/FileDescriptor;JJ)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/String;ZLandroid/content/pm/ProviderInfoList;Landroid/content/ComponentName;Landroid/app/ProfilerInfo;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;IZZZZLandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/util/Map;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/AutofillOptions;Landroid/content/ContentCaptureOptions;[J[JLandroid/os/SharedMemory;Ljava/io/FileDescriptor;JJ)V
HSPLandroid/app/ActivityThread$ApplicationThread;->clearDnsCache()V
HSPLandroid/app/ActivityThread$ApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
HSPLandroid/app/ActivityThread$ApplicationThread;->dumpCacheInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
@@ -886,7 +888,7 @@
HSPLandroid/app/ActivityThread$ApplicationThread;->setNetworkBlockSeq(J)V
HSPLandroid/app/ActivityThread$ApplicationThread;->setProcessState(I)V
HSPLandroid/app/ActivityThread$ApplicationThread;->unstableProviderDied(Landroid/os/IBinder;)V
-SPLandroid/app/ActivityThread$ApplicationThread;->updateCompatOverrideDisplayRotation(Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->updateCompatOverrideDisplayRotation(Landroid/content/res/CompatibilityInfo;)V
HSPLandroid/app/ActivityThread$ApplicationThread;->updateCompatOverrideScale(Landroid/content/res/CompatibilityInfo;)V
HSPLandroid/app/ActivityThread$BindServiceData;-><init>()V
HSPLandroid/app/ActivityThread$BindServiceData;->toString()Ljava/lang/String;
@@ -1029,7 +1031,7 @@
HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ComponentInfo;Ljava/lang/String;)Z
HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ServiceInfo;)Z
HSPLandroid/app/ActivityThread;->isSystem()Z
-HSPLandroid/app/ActivityThread;->lambda$attach$6(Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread;->lambda$attach$6(Landroid/content/res/Configuration;)V+]Landroid/app/ConfigurationController;Landroid/app/ConfigurationController;
HSPLandroid/app/ActivityThread;->main([Ljava/lang/String;)V
HSPLandroid/app/ActivityThread;->onCoreSettingsChange()V
HSPLandroid/app/ActivityThread;->peekPackageInfo(Ljava/lang/String;Z)Landroid/app/LoadedApk;
@@ -1096,8 +1098,9 @@
HSPLandroid/app/AlertDialog;-><init>(Landroid/content/Context;IZ)V
HSPLandroid/app/AlertDialog;->onCreate(Landroid/os/Bundle;)V
HSPLandroid/app/AlertDialog;->resolveDialogTheme(Landroid/content/Context;I)I
-SPLandroid/app/AppCompatCallbacks;-><init>([J[J)V
+HSPLandroid/app/AppCompatCallbacks;-><init>([J[J)V
HSPLandroid/app/AppCompatCallbacks;->isChangeEnabled(J)Z
+HSPLandroid/app/AppCompatCallbacks;->reportChange(JIZ)V+]Lcom/android/internal/compat/ChangeReporter;Lcom/android/internal/compat/ChangeReporter;
HSPLandroid/app/AppComponentFactory;-><init>()V
HSPLandroid/app/AppComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
HSPLandroid/app/AppComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
@@ -1128,6 +1131,7 @@
HSPLandroid/app/AppOpsManager$PackageOps;->getOps()Ljava/util/List;
HSPLandroid/app/AppOpsManager$PackageOps;->getPackageName()Ljava/lang/String;
HSPLandroid/app/AppOpsManager$PausedNotedAppOpsCollection;-><init>(ILandroid/util/ArrayMap;)V
+SPLandroid/app/AppOpsManager;->-$$Nest$smgetService()Lcom/android/internal/app/IAppOpsService;
HSPLandroid/app/AppOpsManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IAppOpsService;)V
HSPLandroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I
HSPLandroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I
@@ -1245,7 +1249,7 @@
HSPLandroid/app/ApplicationExitInfo;->getStatus()I
HSPLandroid/app/ApplicationExitInfo;->getTimestamp()J
HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>()V
-SPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>(Landroid/app/ApplicationLoaders-IA;)V
+HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>(Landroid/app/ApplicationLoaders-IA;)V
HSPLandroid/app/ApplicationLoaders;->addNative(Ljava/lang/ClassLoader;Ljava/util/Collection;)V
HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoader(Landroid/content/pm/SharedLibraryInfo;)V
HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders(Ljava/util/List;)V
@@ -1256,12 +1260,12 @@
HSPLandroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders;
HSPLandroid/app/ApplicationLoaders;->getSharedLibraryClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
HSPLandroid/app/ApplicationLoaders;->sharedLibrariesEquals(Ljava/util/List;Ljava/util/List;)Z
-SPLandroid/app/ApplicationPackageManager$1;-><init>(Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
+HSPLandroid/app/ApplicationPackageManager$1;-><init>(Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
HSPLandroid/app/ApplicationPackageManager$1;->recompute(Landroid/app/ApplicationPackageManager$HasSystemFeatureQuery;)Ljava/lang/Boolean;
HSPLandroid/app/ApplicationPackageManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/app/ApplicationPackageManager$2;-><init>(Landroid/app/ApplicationPackageManager;Landroid/content/pm/PackageManager$OnChecksumsReadyListener;)V
HSPLandroid/app/ApplicationPackageManager$2;->onChecksumsReady(Ljava/util/List;)V
-SPLandroid/app/ApplicationPackageManager$3;-><init>(ILjava/lang/String;)V
+HSPLandroid/app/ApplicationPackageManager$3;-><init>(ILjava/lang/String;)V
HSPLandroid/app/ApplicationPackageManager$3;->recompute(Ljava/lang/Integer;)Landroid/app/ApplicationPackageManager$GetPackagesForUidResult;
HSPLandroid/app/ApplicationPackageManager$3;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/app/ApplicationPackageManager$GetPackagesForUidResult;-><init>([Ljava/lang/String;)V
@@ -1273,7 +1277,7 @@
HSPLandroid/app/ApplicationPackageManager$ResourceName;-><init>(Ljava/lang/String;I)V
HSPLandroid/app/ApplicationPackageManager$ResourceName;->equals(Ljava/lang/Object;)Z
HSPLandroid/app/ApplicationPackageManager$ResourceName;->hashCode()I
-SPLandroid/app/ApplicationPackageManager;-><clinit>()V
+HSPLandroid/app/ApplicationPackageManager;-><clinit>()V
HSPLandroid/app/ApplicationPackageManager;-><init>(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;)V
HSPLandroid/app/ApplicationPackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
HSPLandroid/app/ApplicationPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;)I
@@ -1419,16 +1423,16 @@
HSPLandroid/app/BroadcastOptions;->makeBasic()Landroid/app/BroadcastOptions;
HSPLandroid/app/BroadcastOptions;->setTemporaryAppWhitelistDuration(J)V
HSPLandroid/app/BroadcastOptions;->toBundle()Landroid/os/Bundle;
-SPLandroid/app/BroadcastStickyCache$$ExternalSyntheticLambda0;-><init>(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/IntentFilter;Ljava/lang/String;II)V
+HSPLandroid/app/BroadcastStickyCache$$ExternalSyntheticLambda0;-><init>(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/IntentFilter;Ljava/lang/String;II)V
HSPLandroid/app/BroadcastStickyCache$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter$$ExternalSyntheticRecord0;->m(Ljava/lang/Object;Ljava/lang/Object;)I
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;-><init>(Landroid/content/IntentFilter;Ljava/lang/String;)V
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;-><init>(Landroid/content/IntentFilter;Ljava/lang/String;Landroid/app/BroadcastStickyCache-IA;)V
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->action()Ljava/lang/String;
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->filter()Landroid/content/IntentFilter;
-SPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->hashCode()I
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter$$ExternalSyntheticRecord0;->m(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;-><init>(Landroid/content/IntentFilter;Ljava/lang/String;)V
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;-><init>(Landroid/content/IntentFilter;Ljava/lang/String;Landroid/app/BroadcastStickyCache-IA;)V
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->action()Ljava/lang/String;
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->filter()Landroid/content/IntentFilter;
+HSPLandroid/app/BroadcastStickyCache$StickyBroadcastFilter;->hashCode()I
HSPLandroid/app/BroadcastStickyCache;->findIpcDataCache(Landroid/content/IntentFilter;)Landroid/os/IpcDataCache;
-SPLandroid/app/BroadcastStickyCache;->getConfig(Ljava/lang/String;)Landroid/os/IpcDataCache$Config;
+HSPLandroid/app/BroadcastStickyCache;->getConfig(Ljava/lang/String;)Landroid/os/IpcDataCache$Config;
HSPLandroid/app/BroadcastStickyCache;->getIntent(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Landroid/os/IpcDataCache;Landroid/os/IpcDataCache;
HSPLandroid/app/BroadcastStickyCache;->lambda$getIntent$0(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/IntentFilter;Ljava/lang/String;IILjava/lang/Void;)Landroid/content/Intent;
HSPLandroid/app/ClientTransactionHandler;-><init>()V
@@ -1443,7 +1447,7 @@
HSPLandroid/app/ConfigurationController;->getPendingConfiguration(Z)Landroid/content/res/Configuration;
HSPLandroid/app/ConfigurationController;->handleConfigurationChanged(Landroid/content/res/Configuration;)V
HSPLandroid/app/ConfigurationController;->handleConfigurationChanged(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V
-HSPLandroid/app/ConfigurationController;->handleConfigurationChangedInner(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V+]Landroid/app/ActivityThreadInternal;Landroid/app/ActivityThread;]Landroid/app/ConfigurationController;Landroid/app/ConfigurationController;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/app/ConfigurationController;->handleConfigurationChangedInner(Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V+]Landroid/app/ActivityThreadInternal;Landroid/app/ActivityThread;]Landroid/app/Application;Landroid/app/Application;]Landroid/app/ConfigurationController;Landroid/app/ConfigurationController;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLandroid/app/ConfigurationController;->performConfigurationChanged(Landroid/content/ComponentCallbacks2;Landroid/content/res/Configuration;)V
HSPLandroid/app/ConfigurationController;->setCompatConfiguration(Landroid/content/res/Configuration;)V
HSPLandroid/app/ConfigurationController;->setConfiguration(Landroid/content/res/Configuration;)V
@@ -1683,12 +1687,12 @@
HSPLandroid/app/DownloadManager;->query(Landroid/app/DownloadManager$Query;)Landroid/database/Cursor;
HSPLandroid/app/DownloadManager;->query(Landroid/app/DownloadManager$Query;[Ljava/lang/String;)Landroid/database/Cursor;
HSPLandroid/app/EventLogTags;->writeWmOnTopResumedGainedCalled(ILjava/lang/String;Ljava/lang/String;)V
-SPLandroid/app/FeatureFlagsImpl;->appStartInfoTimestamps()Z
+HSPLandroid/app/FeatureFlagsImpl;->appStartInfoTimestamps()Z
HSPLandroid/app/FeatureFlagsImpl;->enableCurrentModeTypeBinderCache()Z
HSPLandroid/app/FeatureFlagsImpl;->jankPerceptibleNarrow()Z
HSPLandroid/app/FeatureFlagsImpl;->nmBinderPerfCacheChannels()Z
-SPLandroid/app/FeatureFlagsImpl;->nmBinderPerfPermissionCheck()Z
-SPLandroid/app/FeatureFlagsImpl;->nmBinderPerfThrottleNotify()Z
+HSPLandroid/app/FeatureFlagsImpl;->nmBinderPerfPermissionCheck()Z
+HSPLandroid/app/FeatureFlagsImpl;->nmBinderPerfThrottleNotify()Z
HSPLandroid/app/FeatureFlagsImpl;->notifChannelCropVibrationEffects()Z
HSPLandroid/app/FeatureFlagsImpl;->notificationChannelVibrationEffectApi()Z
HSPLandroid/app/FeatureFlagsImpl;->picIsolateCacheByUid()Z
@@ -1696,16 +1700,16 @@
HSPLandroid/app/FeatureFlagsImpl;->rateLimitGetMemoryInfo()Z
HSPLandroid/app/FeatureFlagsImpl;->rateLimitGetMyMemoryState()Z
HSPLandroid/app/FeatureFlagsImpl;->rateLimitGetRunningAppProcesses()Z
-SPLandroid/app/FeatureFlagsImpl;->reportPostgcMemoryMetrics()Z
-SPLandroid/app/FeatureFlagsImpl;->skipBgMemTrimOnFgApp()Z
+HSPLandroid/app/FeatureFlagsImpl;->reportPostgcMemoryMetrics()Z
+HSPLandroid/app/FeatureFlagsImpl;->skipBgMemTrimOnFgApp()Z
HSPLandroid/app/FeatureFlagsImpl;->sortSectionByTime()Z
HSPLandroid/app/FeatureFlagsImpl;->useStickyBcastCache()Z
HSPLandroid/app/Flags;->appStartInfoTimestamps()Z
HSPLandroid/app/Flags;->jankPerceptibleNarrow()Z+]Landroid/app/FeatureFlags;Landroid/app/FeatureFlagsImpl;
HSPLandroid/app/Flags;->nmBinderPerfThrottleNotify()Z+]Landroid/app/FeatureFlags;Landroid/app/FeatureFlagsImpl;
-SPLandroid/app/Flags;->picIsolateCacheByUid()Z
-SPLandroid/app/Flags;->picIsolatedCacheStatistics()Z
-SPLandroid/app/Flags;->reportPostgcMemoryMetrics()Z
+HSPLandroid/app/Flags;->picIsolateCacheByUid()Z
+HSPLandroid/app/Flags;->picIsolatedCacheStatistics()Z
+HSPLandroid/app/Flags;->reportPostgcMemoryMetrics()Z
HSPLandroid/app/Flags;->useStickyBcastCache()Z+]Landroid/app/FeatureFlags;Landroid/app/FeatureFlagsImpl;
HSPLandroid/app/Fragment$1;-><init>(Landroid/app/Fragment;)V
HSPLandroid/app/Fragment;-><init>()V
@@ -1925,7 +1929,7 @@
HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermission(Ljava/lang/String;II)I
HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermissionForDevice(Ljava/lang/String;III)I
HSPLandroid/app/IActivityManager$Stub$Proxy;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
-SPLandroid/app/IActivityManager$Stub$Proxy;->finishAttachApplication(JJ)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->finishAttachApplication(JJ)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
HSPLandroid/app/IActivityManager$Stub$Proxy;->getCurrentUser()Landroid/content/pm/UserInfo;
@@ -1951,7 +1955,7 @@
HSPLandroid/app/IActivityManager$Stub$Proxy;->registerStrictModeCallback(Landroid/os/IBinder;)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->removeContentProvider(Landroid/os/IBinder;Z)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->reportStartInfoViewTimestamps(JJ)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->reportStartInfoViewTimestamps(JJ)V+]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;
HSPLandroid/app/IActivityManager$Stub$Proxy;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->serviceDoneExecuting(Landroid/os/IBinder;IIILandroid/content/Intent;)V
HSPLandroid/app/IActivityManager$Stub$Proxy;->setRenderThread(I)V
@@ -2094,7 +2098,7 @@
HSPLandroid/app/IntentService;->onDestroy()V
HSPLandroid/app/IntentService;->onStart(Landroid/content/Intent;I)V
HSPLandroid/app/IntentService;->onStartCommand(Landroid/content/Intent;II)I
-SPLandroid/app/JobSchedulerImpl;-><init>(Landroid/app/JobSchedulerImpl;Ljava/lang/String;)V
+HSPLandroid/app/JobSchedulerImpl;-><init>(Landroid/app/JobSchedulerImpl;Ljava/lang/String;)V
HSPLandroid/app/JobSchedulerImpl;-><init>(Landroid/content/Context;Landroid/app/job/IJobScheduler;)V
HSPLandroid/app/JobSchedulerImpl;-><init>(Landroid/content/Context;Landroid/app/job/IJobScheduler;Ljava/lang/String;)V
HSPLandroid/app/JobSchedulerImpl;->cancel(I)V
@@ -2435,14 +2439,17 @@
HSPLandroid/app/NotificationChannelGroup;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
HSPLandroid/app/NotificationChannelGroup;->isBlocked()Z
HSPLandroid/app/NotificationChannelGroup;->writeToParcel(Landroid/os/Parcel;I)V
-SPLandroid/app/NotificationManager$1;-><init>(Landroid/app/NotificationManager;)V
+HSPLandroid/app/NotificationManager$1;-><init>(Landroid/app/NotificationManager;)V
HSPLandroid/app/NotificationManager$Policy$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationManager$Policy;
HSPLandroid/app/NotificationManager$Policy$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/NotificationManager$Policy;-><init>(IIIIII)V
HSPLandroid/app/NotificationManager$Policy;-><init>(Landroid/os/Parcel;)V
HSPLandroid/app/NotificationManager$Policy;->equals(Ljava/lang/Object;)Z
HSPLandroid/app/NotificationManager$Policy;->suppressedVisualEffectsEqual(II)Z
-SPLandroid/app/NotificationManager;-><init>(Landroid/content/Context;)V
+SPLandroid/app/NotificationManager$RateLimiter;-><clinit>()V
+HSPLandroid/app/NotificationManager$RateLimiter;-><init>(Landroid/app/NotificationManager;Ljava/lang/String;Ljava/lang/String;F)V
+SPLandroid/app/NotificationManager$RateLimiter;-><init>(Landroid/app/NotificationManager;Ljava/lang/String;Ljava/lang/String;FLandroid/app/NotificationManager-IA;)V
+HSPLandroid/app/NotificationManager;-><init>(Landroid/content/Context;)V
HSPLandroid/app/NotificationManager;-><init>(Landroid/content/Context;Ljava/time/InstantSource;)V
HSPLandroid/app/NotificationManager;->areNotificationsEnabled()Z
HSPLandroid/app/NotificationManager;->cancel(I)V
@@ -2473,7 +2480,7 @@
HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V
HSPLandroid/app/NotificationManager;->service()Landroid/app/INotificationManager;
HSPLandroid/app/NotificationManager;->zenModeToInterruptionFilter(I)I
-SPLandroid/app/PendingIntent$$ExternalSyntheticLambda0;->execute(Ljava/lang/Runnable;)V
+HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda0;->execute(Ljava/lang/Runnable;)V
HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda2;->get()Ljava/lang/Object;
HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -2531,17 +2538,17 @@
HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PictureInPictureParams;
HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmApi(Landroid/app/PropertyInvalidatedCache$Args;)Ljava/lang/String;
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmCacheNulls(Landroid/app/PropertyInvalidatedCache$Args;)Z
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmIsolateUids(Landroid/app/PropertyInvalidatedCache$Args;)Z
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmMaxEntries(Landroid/app/PropertyInvalidatedCache$Args;)I
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmModule(Landroid/app/PropertyInvalidatedCache$Args;)Ljava/lang/String;
-SPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmTestMode(Landroid/app/PropertyInvalidatedCache$Args;)Z
-SPLandroid/app/PropertyInvalidatedCache$Args;-><init>(Ljava/lang/String;)V
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmApi(Landroid/app/PropertyInvalidatedCache$Args;)Ljava/lang/String;
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmCacheNulls(Landroid/app/PropertyInvalidatedCache$Args;)Z
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmIsolateUids(Landroid/app/PropertyInvalidatedCache$Args;)Z
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmMaxEntries(Landroid/app/PropertyInvalidatedCache$Args;)I
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmModule(Landroid/app/PropertyInvalidatedCache$Args;)Ljava/lang/String;
+HSPLandroid/app/PropertyInvalidatedCache$Args;->-$$Nest$fgetmTestMode(Landroid/app/PropertyInvalidatedCache$Args;)Z
+HSPLandroid/app/PropertyInvalidatedCache$Args;-><init>(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache$Args;-><init>(Ljava/lang/String;Ljava/lang/String;IZZZ)V
HSPLandroid/app/PropertyInvalidatedCache$Args;->api(Ljava/lang/String;)Landroid/app/PropertyInvalidatedCache$Args;
-SPLandroid/app/PropertyInvalidatedCache$Args;->cacheNulls(Z)Landroid/app/PropertyInvalidatedCache$Args;
-SPLandroid/app/PropertyInvalidatedCache$Args;->isolateUids(Z)Landroid/app/PropertyInvalidatedCache$Args;
+HSPLandroid/app/PropertyInvalidatedCache$Args;->cacheNulls(Z)Landroid/app/PropertyInvalidatedCache$Args;
+HSPLandroid/app/PropertyInvalidatedCache$Args;->isolateUids(Z)Landroid/app/PropertyInvalidatedCache$Args;
HSPLandroid/app/PropertyInvalidatedCache$Args;->maxEntries(I)Landroid/app/PropertyInvalidatedCache$Args;
HSPLandroid/app/PropertyInvalidatedCache$CacheMap$1;-><init>(Landroid/app/PropertyInvalidatedCache$CacheMap;IFZ)V
HSPLandroid/app/PropertyInvalidatedCache$CacheMap$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z+]Landroid/app/PropertyInvalidatedCache$CacheMap$1;Landroid/app/PropertyInvalidatedCache$CacheMap$1;
@@ -2556,28 +2563,28 @@
HSPLandroid/app/PropertyInvalidatedCache$NoPreloadHolder;->next()J
HSPLandroid/app/PropertyInvalidatedCache$NonceHandler;-><init>(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache$NonceHandler;->getNonce()J+]Landroid/app/PropertyInvalidatedCache$NonceHandler;Landroid/app/PropertyInvalidatedCache$NonceSharedMem;,Landroid/app/PropertyInvalidatedCache$NonceSysprop;
-SPLandroid/app/PropertyInvalidatedCache$NonceSharedMem;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/PropertyInvalidatedCache$NonceSharedMem;-><init>(Ljava/lang/String;Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache$NonceSharedMem;->getNonceInternal()J+]Landroid/app/PropertyInvalidatedCache$NonceStore;Landroid/app/PropertyInvalidatedCache$NonceStore;
HSPLandroid/app/PropertyInvalidatedCache$NonceSharedMem;->initialize(Z)I+]Landroid/app/PropertyInvalidatedCache$NonceStore;Landroid/app/PropertyInvalidatedCache$NonceStore;
-SPLandroid/app/PropertyInvalidatedCache$NonceStore;-><clinit>()V
-SPLandroid/app/PropertyInvalidatedCache$NonceStore;-><init>(JZ)V
+HSPLandroid/app/PropertyInvalidatedCache$NonceStore;-><clinit>()V
+HSPLandroid/app/PropertyInvalidatedCache$NonceStore;-><init>(JZ)V
HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->getHandleForName(Ljava/lang/String;)I
-SPLandroid/app/PropertyInvalidatedCache$NonceStore;->getInstance()Landroid/app/PropertyInvalidatedCache$NonceStore;
+HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->getInstance()Landroid/app/PropertyInvalidatedCache$NonceStore;
HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->getNonce(I)J
HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->refreshStringBlockLocked()V
HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->throwIfBadHandle(I)V
-SPLandroid/app/PropertyInvalidatedCache$NonceStore;->updateStringMapLocked([B)V
-SPLandroid/app/PropertyInvalidatedCache$NonceSysprop;-><init>(Ljava/lang/String;)V
+HSPLandroid/app/PropertyInvalidatedCache$NonceStore;->updateStringMapLocked([B)V
+HSPLandroid/app/PropertyInvalidatedCache$NonceSysprop;-><init>(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache$NonceSysprop;->getNonceInternal()J
HSPLandroid/app/PropertyInvalidatedCache$QueryHandler;-><init>()V
HSPLandroid/app/PropertyInvalidatedCache$QueryHandler;->shouldBypassCache(Ljava/lang/Object;)Z
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$fgetmHighWaterMark(Landroid/app/PropertyInvalidatedCache;)J
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$fgetmMaxEntries(Landroid/app/PropertyInvalidatedCache;)I
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$fputmHighWaterMark(Landroid/app/PropertyInvalidatedCache;J)V
-SPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetByteBlock(JI[B)I
+HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetByteBlock(JI[B)I
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetByteBlockHash(J)I
-SPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetMaxByte(J)I
-SPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetMaxNonce(J)I
+HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetMaxByte(J)I
+HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetMaxNonce(J)I
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smnativeGetNonce(JI)J
HSPLandroid/app/PropertyInvalidatedCache;->-$$Nest$smthrowIfInvalidModule(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;)V
@@ -2589,12 +2596,12 @@
HSPLandroid/app/PropertyInvalidatedCache;->cacheName()Ljava/lang/String;
HSPLandroid/app/PropertyInvalidatedCache;->clear()V
HSPLandroid/app/PropertyInvalidatedCache;->createPropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-SPLandroid/app/PropertyInvalidatedCache;->createSystemCacheKey(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/PropertyInvalidatedCache;->createSystemCacheKey(Ljava/lang/String;)Ljava/lang/String;
HSPLandroid/app/PropertyInvalidatedCache;->disableLocal()V
HSPLandroid/app/PropertyInvalidatedCache;->getActiveCaches()Ljava/util/ArrayList;
HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
HSPLandroid/app/PropertyInvalidatedCache;->getNonceHandler(Ljava/lang/String;)Landroid/app/PropertyInvalidatedCache$NonceHandler;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
-SPLandroid/app/PropertyInvalidatedCache;->inSharedMemoryDenyList(Ljava/lang/String;)Z
+HSPLandroid/app/PropertyInvalidatedCache;->inSharedMemoryDenyList(Ljava/lang/String;)Z
HSPLandroid/app/PropertyInvalidatedCache;->invalidateCache(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache;->isDisabled()Z
HSPLandroid/app/PropertyInvalidatedCache;->isReservedNonce(J)Z
@@ -2603,7 +2610,7 @@
HSPLandroid/app/PropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V
-SPLandroid/app/PropertyInvalidatedCache;->sharedMemoryOkay(Ljava/lang/String;)Z
+HSPLandroid/app/PropertyInvalidatedCache;->sharedMemoryOkay(Ljava/lang/String;)Z
HSPLandroid/app/PropertyInvalidatedCache;->throwIfInvalidCacheKey(Ljava/lang/String;)V
HSPLandroid/app/PropertyInvalidatedCache;->throwIfInvalidModule(Ljava/lang/String;)V
HSPLandroid/app/QueuedWork$QueuedWorkHandler;-><init>(Landroid/os/Looper;)V
@@ -2657,9 +2664,9 @@
HSPLandroid/app/ResourcesManager$PathCollector;->isSameAsOriginal()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;)V
HSPLandroid/app/ResourcesManager$UpdateHandler;->onLoadersChanged(Landroid/content/res/Resources;Ljava/util/List;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/util/List;Ljava/util/ArrayList;
-SPLandroid/app/ResourcesManager;->-$$Nest$fgetmLock(Landroid/app/ResourcesManager;)Ljava/lang/Object;
-SPLandroid/app/ResourcesManager;->-$$Nest$mfindKeyForResourceImplLocked(Landroid/app/ResourcesManager;Landroid/content/res/ResourcesImpl;)Landroid/content/res/ResourcesKey;
-SPLandroid/app/ResourcesManager;->-$$Nest$mfindOrCreateResourcesImplForKeyLocked(Landroid/app/ResourcesManager;Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->-$$Nest$fgetmLock(Landroid/app/ResourcesManager;)Ljava/lang/Object;
+HSPLandroid/app/ResourcesManager;->-$$Nest$mfindKeyForResourceImplLocked(Landroid/app/ResourcesManager;Landroid/content/res/ResourcesImpl;)Landroid/content/res/ResourcesKey;
+HSPLandroid/app/ResourcesManager;->-$$Nest$mfindOrCreateResourcesImplForKeyLocked(Landroid/app/ResourcesManager;Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
HSPLandroid/app/ResourcesManager;-><init>()V
HSPLandroid/app/ResourcesManager;->addApplicationPathsLocked(Ljava/lang/String;[Ljava/lang/String;)V
HSPLandroid/app/ResourcesManager;->appendLibAssetsForMainAssetPath(Ljava/lang/String;[Ljava/lang/String;)V
@@ -2768,10 +2775,10 @@
HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
HSPLandroid/app/SharedPreferencesImpl$MemoryCommitResult;-><init>(JZLjava/util/List;Ljava/util/Set;Ljava/util/Map;)V
HSPLandroid/app/SharedPreferencesImpl$MemoryCommitResult;->setDiskWriteResult(ZZ)V
-SPLandroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;-><init>()V
-SPLandroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;-><init>(Landroid/app/SharedPreferencesImpl-IA;)V
+HSPLandroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;-><init>()V
+HSPLandroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;-><init>(Landroid/app/SharedPreferencesImpl-IA;)V
HSPLandroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-SPLandroid/app/SharedPreferencesImpl;->$r8$lambda$gCIQI__z13DI5jNIqnAnYLWLcMc(Landroid/app/SharedPreferencesImpl;)V
+HSPLandroid/app/SharedPreferencesImpl;->$r8$lambda$gCIQI__z13DI5jNIqnAnYLWLcMc(Landroid/app/SharedPreferencesImpl;)V
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$fgetmCurrentMemoryStateGeneration(Landroid/app/SharedPreferencesImpl;)J
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$fgetmDiskWritesInFlight(Landroid/app/SharedPreferencesImpl;)I
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$fgetmListeners(Landroid/app/SharedPreferencesImpl;)Ljava/util/WeakHashMap;
@@ -2783,7 +2790,7 @@
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$fputmMap(Landroid/app/SharedPreferencesImpl;Ljava/util/Map;)V
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$menqueueDiskWrite(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Ljava/lang/Runnable;)V
HSPLandroid/app/SharedPreferencesImpl;->-$$Nest$mwriteToFile(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
-SPLandroid/app/SharedPreferencesImpl;-><clinit>()V
+HSPLandroid/app/SharedPreferencesImpl;-><clinit>()V
HSPLandroid/app/SharedPreferencesImpl;-><init>(Ljava/io/File;I)V
HSPLandroid/app/SharedPreferencesImpl;->awaitLoadedLocked()V
HSPLandroid/app/SharedPreferencesImpl;->contains(Ljava/lang/String;)Z
@@ -2849,12 +2856,12 @@
HSPLandroid/app/SystemServiceRegistry$129;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/app/ContextImpl;)Landroid/view/textclassifier/TextClassificationManager;
HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$130;->createService(Landroid/app/ContextImpl;)Landroid/hardware/devicestate/DeviceStateManager;
+HSPLandroid/app/SystemServiceRegistry$130;->createService(Landroid/app/ContextImpl;)Landroid/hardware/devicestate/DeviceStateManager;
HSPLandroid/app/SystemServiceRegistry$130;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$131;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$138;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$13;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$149;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$ContextAwareServiceProducerWithBinder;Landroid/app/job/JobSchedulerFrameworkInitializer$$ExternalSyntheticLambda0;,Landroid/app/job/JobSchedulerFrameworkInitializer$$ExternalSyntheticLambda1;,Landroid/app/role/RoleFrameworkInitializer$$ExternalSyntheticLambda0;,Landroid/net/wifi/WifiFrameworkInitializer$$ExternalSyntheticLambda0;
+HSPLandroid/app/SystemServiceRegistry$149;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$14;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$150;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$ContextAwareServiceProducerWithoutBinder;Landroid/telephony/TelephonyFrameworkInitializer$$ExternalSyntheticLambda1;
HSPLandroid/app/SystemServiceRegistry$15;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2864,7 +2871,7 @@
HSPLandroid/app/SystemServiceRegistry$20;->createService(Landroid/app/ContextImpl;)Landroid/app/admin/DevicePolicyManager;
HSPLandroid/app/SystemServiceRegistry$20;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$20;Landroid/app/SystemServiceRegistry$20;
HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$22;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
+HSPLandroid/app/SystemServiceRegistry$22;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
HSPLandroid/app/SystemServiceRegistry$22;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$23;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2883,7 +2890,7 @@
HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/location/LocationManager;
HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;+]Landroid/content/Context;missing_types
HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$36;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
@@ -2898,19 +2905,19 @@
HSPLandroid/app/SystemServiceRegistry$41;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
+HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$47;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Landroid/telephony/TelephonyRegistryManager;
+HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Landroid/telephony/TelephonyRegistryManager;
HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$49;->createService(Landroid/app/ContextImpl;)Landroid/telecom/TelecomManager;
HSPLandroid/app/SystemServiceRegistry$49;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$4;->createService(Landroid/app/ContextImpl;)Landroid/app/ActivityManager;
HSPLandroid/app/SystemServiceRegistry$4;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$50;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Landroid/app/UiModeManager;
+HSPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Landroid/app/UiModeManager;
HSPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$53;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2938,6 +2945,8 @@
HSPLandroid/app/SystemServiceRegistry$78;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Landroid/app/AlarmManager;
HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+SPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/UsageStatsManager;
+SPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$84;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$85;->createService(Landroid/app/ContextImpl;)Landroid/appwidget/AppWidgetManager;
HSPLandroid/app/SystemServiceRegistry$85;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2947,7 +2956,7 @@
HSPLandroid/app/SystemServiceRegistry$89;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Landroid/media/AudioManager;
HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-SPLandroid/app/SystemServiceRegistry$90;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/ShortcutManager;
+HSPLandroid/app/SystemServiceRegistry$90;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/ShortcutManager;
HSPLandroid/app/SystemServiceRegistry$90;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$91;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
HSPLandroid/app/SystemServiceRegistry$92;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2983,17 +2992,17 @@
HSPLandroid/app/TaskStackListener;->onTaskRemoved(I)V
HSPLandroid/app/TaskStackListener;->onTaskRequestedOrientationChanged(II)V
HSPLandroid/app/UiModeManager$1;-><init>(Landroid/app/UiModeManager;)V
-SPLandroid/app/UiModeManager$1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-SPLandroid/app/UiModeManager$1;->apply(Ljava/lang/Void;)Ljava/lang/Integer;
-SPLandroid/app/UiModeManager$2;-><init>(Landroid/app/UiModeManager;)V
+HSPLandroid/app/UiModeManager$1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/UiModeManager$1;->apply(Ljava/lang/Void;)Ljava/lang/Integer;
+HSPLandroid/app/UiModeManager$2;-><init>(Landroid/app/UiModeManager;)V
HSPLandroid/app/UiModeManager$Globals;->-$$Nest$fgetmService(Landroid/app/UiModeManager$Globals;)Landroid/app/IUiModeManager;
HSPLandroid/app/UiModeManager$Globals;-><init>(Landroid/app/IUiModeManager;)V
HSPLandroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;-><init>()V
-SPLandroid/app/UiModeManager;->-$$Nest$mgetCurrentModeTypeFromServer(Landroid/app/UiModeManager;)Ljava/lang/Integer;
+HSPLandroid/app/UiModeManager;->-$$Nest$mgetCurrentModeTypeFromServer(Landroid/app/UiModeManager;)Ljava/lang/Integer;
HSPLandroid/app/UiModeManager;-><init>(Landroid/content/Context;)V
HSPLandroid/app/UiModeManager;->getActiveProjectionTypes()I
HSPLandroid/app/UiModeManager;->getCurrentModeType()I
-SPLandroid/app/UiModeManager;->getCurrentModeTypeFromServer()Ljava/lang/Integer;
+HSPLandroid/app/UiModeManager;->getCurrentModeTypeFromServer()Ljava/lang/Integer;
HSPLandroid/app/UriGrantsManager$1;->create()Landroid/app/IUriGrantsManager;
HSPLandroid/app/UriGrantsManager$1;->create()Ljava/lang/Object;
HSPLandroid/app/UriGrantsManager;->getService()Landroid/app/IUriGrantsManager;
@@ -3341,6 +3350,10 @@
HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobParameters;
HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+SPLandroid/app/job/JobParameters$JobCleanupCallback;->disableCleaner()V
+SPLandroid/app/job/JobParameters$JobCleanupCallback;->enableCleaner()V
+SPLandroid/app/job/JobParameters$JobCleanupCallback;->isCleanerEnabled()Z
+HSPLandroid/app/job/JobParameters$JobCleanupCallback;->run()V+]Landroid/app/job/IJobCallback;Landroid/app/job/IJobCallback$Stub$Proxy;]Landroid/app/job/JobParameters$JobCleanupCallback;Landroid/app/job/JobParameters$JobCleanupCallback;
HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;)V
HSPLandroid/app/job/JobParameters;->completeWork(Landroid/app/job/JobWorkItem;)V
HSPLandroid/app/job/JobParameters;->dequeueWork()Landroid/app/job/JobWorkItem;
@@ -3354,6 +3367,7 @@
HSPLandroid/app/job/JobParameters;->getTransientExtras()Landroid/os/Bundle;
HSPLandroid/app/job/JobParameters;->getTriggeredContentAuthorities()[Ljava/lang/String;
HSPLandroid/app/job/JobParameters;->getTriggeredContentUris()[Landroid/net/Uri;
+HSPLandroid/app/job/JobParameters;->initCleaner(Landroid/app/job/JobParameters$JobCleanupCallback;)V
HSPLandroid/app/job/JobParameters;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/app/job/JobScheduler;-><init>()V
HSPLandroid/app/job/JobScheduler;->sanitizeNamespace(Ljava/lang/String;)Ljava/lang/String;
@@ -3426,8 +3440,8 @@
HSPLandroid/app/servertransaction/ActivityResultItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;)V
HSPLandroid/app/servertransaction/ActivityResultItem;->getPostExecutionState()I
HSPLandroid/app/servertransaction/ActivityTransactionItem;->getActivityToken()Landroid/os/IBinder;
-SPLandroid/app/servertransaction/BaseClientRequest;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/app/servertransaction/PendingTransactionActions;)V
-SPLandroid/app/servertransaction/BaseClientRequest;->preExecute(Landroid/app/ClientTransactionHandler;)V
+HSPLandroid/app/servertransaction/BaseClientRequest;->postExecute(Landroid/app/ClientTransactionHandler;Landroid/app/servertransaction/PendingTransactionActions;)V
+HSPLandroid/app/servertransaction/BaseClientRequest;->preExecute(Landroid/app/ClientTransactionHandler;)V
HSPLandroid/app/servertransaction/ClientTransaction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ClientTransaction;
HSPLandroid/app/servertransaction/ClientTransaction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/servertransaction/ClientTransaction;-><init>(Landroid/os/Parcel;)V
@@ -3441,13 +3455,13 @@
HSPLandroid/app/servertransaction/ClientTransactionItem;->getPostExecutionState()I
HSPLandroid/app/servertransaction/ClientTransactionItem;->isActivityLifecycleItem()Z
HSPLandroid/app/servertransaction/ClientTransactionItem;->shouldHaveDefinedPreExecutionState()Z
-SPLandroid/app/servertransaction/ClientTransactionListenerController;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
+HSPLandroid/app/servertransaction/ClientTransactionListenerController;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
HSPLandroid/app/servertransaction/ClientTransactionListenerController;->getInstance()Landroid/app/servertransaction/ClientTransactionListenerController;
HSPLandroid/app/servertransaction/ClientTransactionListenerController;->onClientTransactionFinished()V+]Landroid/app/servertransaction/ClientTransactionListenerController;Landroid/app/servertransaction/ClientTransactionListenerController;]Landroid/content/Context;missing_types
HSPLandroid/app/servertransaction/ClientTransactionListenerController;->onClientTransactionStarted()V
HSPLandroid/app/servertransaction/ClientTransactionListenerController;->onContextConfigurationPostChanged(Landroid/content/Context;)V
HSPLandroid/app/servertransaction/ClientTransactionListenerController;->onContextConfigurationPreChanged(Landroid/content/Context;)V+]Landroid/content/Context;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;
-HSPLandroid/app/servertransaction/ClientTransactionListenerController;->shouldReportDisplayChange(Landroid/content/Context;Landroid/content/res/Configuration;)Z+]Landroid/content/Context;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/app/servertransaction/ClientTransactionListenerController;->shouldReportDisplayChange(Landroid/content/Context;Landroid/content/res/Configuration;)Z+]Landroid/content/Context;Landroid/window/WindowContext;]Landroid/content/res/Resources;Landroid/content/res/Resources;
HSPLandroid/app/servertransaction/ConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/ConfigurationChangeItem;
HSPLandroid/app/servertransaction/ConfigurationChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/servertransaction/ConfigurationChangeItem;-><init>(Landroid/os/Parcel;)V
@@ -3460,6 +3474,7 @@
HSPLandroid/app/servertransaction/LaunchActivityItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/servertransaction/LaunchActivityItem;-><init>(Landroid/os/IBinder;ILandroid/content/res/Configuration;Landroid/content/res/Configuration;ILjava/lang/String;Lcom/android/internal/app/IVoiceInteractor;ILandroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/util/List;Ljava/util/List;Landroid/app/ActivityOptions$SceneTransitionInfo;ZLandroid/app/ProfilerInfo;Landroid/os/IBinder;Landroid/app/IActivityClientController;Landroid/os/IBinder;ZLandroid/os/IBinder;Landroid/os/IBinder;Landroid/window/ActivityWindowInfo;)V
HSPLandroid/app/servertransaction/LaunchActivityItem;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/servertransaction/LaunchActivityItem;->getActivityToken()Landroid/os/IBinder;
HSPLandroid/app/servertransaction/NewIntentItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/NewIntentItem;
HSPLandroid/app/servertransaction/NewIntentItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/app/servertransaction/NewIntentItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;)V
@@ -3515,6 +3530,11 @@
HSPLandroid/app/servertransaction/TransactionExecutorHelper;->getClosestPreExecutionState(Landroid/app/ActivityThread$ActivityClientRecord;I)I
HSPLandroid/app/servertransaction/TransactionExecutorHelper;->getLifecyclePath(IIZ)Landroid/util/IntArray;
HSPLandroid/app/servertransaction/TransactionExecutorHelper;->shouldExcludeLastLifecycleState(Ljava/util/List;I)Z+]Landroid/app/servertransaction/ActivityLifecycleItem;Landroid/app/servertransaction/ResumeActivityItem;]Landroid/app/servertransaction/ClientTransactionItem;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
+HSPLandroid/app/servertransaction/WindowStateInsetsControlChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/servertransaction/WindowStateInsetsControlChangeItem;
+HSPLandroid/app/servertransaction/WindowStateInsetsControlChangeItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/servertransaction/WindowStateInsetsControlChangeItem;-><init>(Landroid/os/Parcel;)V
+SPLandroid/app/servertransaction/WindowStateInsetsControlChangeItem;-><init>(Landroid/os/Parcel;Landroid/app/servertransaction/WindowStateInsetsControlChangeItem-IA;)V
+HSPLandroid/app/servertransaction/WindowStateInsetsControlChangeItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/view/IWindow;Landroid/app/servertransaction/PendingTransactionActions;)V+]Landroid/view/IWindow;missing_types
HSPLandroid/app/servertransaction/WindowStateTransactionItem;-><init>(Landroid/os/Parcel;)V
HSPLandroid/app/servertransaction/WindowStateTransactionItem;->execute(Landroid/app/ClientTransactionHandler;Landroid/app/servertransaction/PendingTransactionActions;)V+]Landroid/app/servertransaction/WindowStateTransactionItem$TransactionListener;Landroid/view/ViewRootImpl$W;]Landroid/app/servertransaction/WindowStateTransactionItem;Landroid/app/servertransaction/WindowStateInsetsControlChangeItem;,Landroid/app/servertransaction/WindowStateResizeItem;
HSPLandroid/app/slice/ISliceManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -3619,9 +3639,9 @@
HSPLandroid/app/usage/UsageStatsManager;->queryUsageStats(IJJ)Ljava/util/List;
HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda3;-><init>()V
HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda5;-><init>()V
-SPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda7;->run()V
+HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda7;->run()V
HSPLandroid/appwidget/AppWidgetManager$ServiceCollectionCache;-><init>(Landroid/content/Context;J)V
-SPLandroid/appwidget/AppWidgetManager;->$r8$lambda$WKLPyaeqLNLNb3560d7QJuq2DwQ(Landroid/appwidget/AppWidgetManager;)V
+HSPLandroid/appwidget/AppWidgetManager;->$r8$lambda$WKLPyaeqLNLNb3560d7QJuq2DwQ(Landroid/appwidget/AppWidgetManager;)V
HSPLandroid/appwidget/AppWidgetManager;-><init>(Landroid/content/Context;Lcom/android/internal/appwidget/IAppWidgetService;)V
HSPLandroid/appwidget/AppWidgetManager;->getAppWidgetIds(Landroid/content/ComponentName;)[I
HSPLandroid/appwidget/AppWidgetManager;->getInstalledProvidersForPackage(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
@@ -4381,7 +4401,7 @@
HSPLandroid/content/IntentFilter;->countCategories()I
HSPLandroid/content/IntentFilter;->countDataAuthorities()I
HSPLandroid/content/IntentFilter;->countDataPaths()I
-SPLandroid/content/IntentFilter;->countDataSchemeSpecificParts()I
+HSPLandroid/content/IntentFilter;->countDataSchemeSpecificParts()I
HSPLandroid/content/IntentFilter;->countDataSchemes()I
HSPLandroid/content/IntentFilter;->countDataTypes()I
HSPLandroid/content/IntentFilter;->countMimeGroups()I
@@ -5046,12 +5066,12 @@
HSPLandroid/content/res/ApkAssets;->getAssetPath()Ljava/lang/String;
HSPLandroid/content/res/ApkAssets;->getDebugName()Ljava/lang/String;
HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
-SPLandroid/content/res/ApkAssets;->isForLoader()Z
-SPLandroid/content/res/ApkAssets;->isOverlay()Z
-SPLandroid/content/res/ApkAssets;->isSharedLib()Z
-SPLandroid/content/res/ApkAssets;->isSystem()Z
+HSPLandroid/content/res/ApkAssets;->isForLoader()Z
+HSPLandroid/content/res/ApkAssets;->isOverlay()Z
+HSPLandroid/content/res/ApkAssets;->isSharedLib()Z
+HSPLandroid/content/res/ApkAssets;->isSystem()Z
HSPLandroid/content/res/ApkAssets;->isUpToDate()Z
-SPLandroid/content/res/ApkAssets;->loadFromFd(Ljava/io/FileDescriptor;Ljava/lang/String;ILandroid/content/res/loader/AssetsProvider;)Landroid/content/res/ApkAssets;
+HSPLandroid/content/res/ApkAssets;->loadFromFd(Ljava/io/FileDescriptor;Ljava/lang/String;ILandroid/content/res/loader/AssetsProvider;)Landroid/content/res/ApkAssets;
HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;)Landroid/content/res/ApkAssets;
HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
HSPLandroid/content/res/ApkAssets;->loadOverlayFromPath(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
@@ -5088,11 +5108,11 @@
HSPLandroid/content/res/AssetManager;->-$$Nest$fgetmObject(Landroid/content/res/AssetManager;)J
HSPLandroid/content/res/AssetManager;->-$$Nest$fputmApkAssets(Landroid/content/res/AssetManager;[Landroid/content/res/ApkAssets;)V
HSPLandroid/content/res/AssetManager;->-$$Nest$fputmLoaders(Landroid/content/res/AssetManager;[Landroid/content/res/loader/ResourcesLoader;)V
-HSPLandroid/content/res/AssetManager;->-$$Nest$mdecRefsLocked(Landroid/content/res/AssetManager;J)V
HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetDestroy(J)V
HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetGetLength(J)J
HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetGetRemainingLength(J)J
HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetRead(J[BII)I
+SPLandroid/content/res/AssetManager;->-$$Nest$smnativeSetApkAssets(J[Landroid/content/res/ApkAssets;ZZ)V
HSPLandroid/content/res/AssetManager;-><init>()V
HSPLandroid/content/res/AssetManager;-><init>(Z)V
HSPLandroid/content/res/AssetManager;-><init>(ZLandroid/content/res/AssetManager-IA;)V
@@ -5102,7 +5122,7 @@
HSPLandroid/content/res/AssetManager;->containsAllocatedTable()Z
HSPLandroid/content/res/AssetManager;->createSystemAssetsInZygoteLocked(ZLjava/lang/String;)V
HSPLandroid/content/res/AssetManager;->createTheme()J
-HSPLandroid/content/res/AssetManager;->decRefsLocked(J)V
+HSPLandroid/content/res/AssetManager;->decRefs(J)V
HSPLandroid/content/res/AssetManager;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
HSPLandroid/content/res/AssetManager;->ensureOpenLocked()V
HSPLandroid/content/res/AssetManager;->ensureValidLocked()V
@@ -5188,19 +5208,19 @@
HSPLandroid/content/res/CompatibilityInfo;->applyToConfiguration(ILandroid/content/res/Configuration;)V
HSPLandroid/content/res/CompatibilityInfo;->applyToDisplayMetrics(Landroid/util/DisplayMetrics;)V
HSPLandroid/content/res/CompatibilityInfo;->equals(Ljava/lang/Object;)Z
-SPLandroid/content/res/CompatibilityInfo;->getCompatibilityChangesForConfig(Landroid/content/res/CompatibilityInfo;)I
+HSPLandroid/content/res/CompatibilityInfo;->getCompatibilityChangesForConfig(Landroid/content/res/CompatibilityInfo;)I
HSPLandroid/content/res/CompatibilityInfo;->getOverrideInvertedScale()F
HSPLandroid/content/res/CompatibilityInfo;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator;
HSPLandroid/content/res/CompatibilityInfo;->hasOverrideDisplayRotation()Z
HSPLandroid/content/res/CompatibilityInfo;->hasOverrideScale()Z
HSPLandroid/content/res/CompatibilityInfo;->hasOverrideScaling()Z
HSPLandroid/content/res/CompatibilityInfo;->hashCode()I
-SPLandroid/content/res/CompatibilityInfo;->isDisplayRotationEqual(Landroid/content/res/CompatibilityInfo;)Z
-SPLandroid/content/res/CompatibilityInfo;->isOverrideDisplayRotationRequired()Z
-SPLandroid/content/res/CompatibilityInfo;->isScaleEqual(Landroid/content/res/CompatibilityInfo;)Z
+HSPLandroid/content/res/CompatibilityInfo;->isDisplayRotationEqual(Landroid/content/res/CompatibilityInfo;)Z
+HSPLandroid/content/res/CompatibilityInfo;->isOverrideDisplayRotationRequired()Z
+HSPLandroid/content/res/CompatibilityInfo;->isScaleEqual(Landroid/content/res/CompatibilityInfo;)Z
HSPLandroid/content/res/CompatibilityInfo;->isScalingRequired()Z
HSPLandroid/content/res/CompatibilityInfo;->needsCompatResources()Z
-SPLandroid/content/res/CompatibilityInfo;->setOverrideDisplayRotation(I)V
+HSPLandroid/content/res/CompatibilityInfo;->setOverrideDisplayRotation(I)V
HSPLandroid/content/res/CompatibilityInfo;->setOverrideInvertedScale(F)V
HSPLandroid/content/res/CompatibilityInfo;->supportsScreen()Z
HSPLandroid/content/res/ComplexColor;-><init>()V
@@ -5402,7 +5422,7 @@
HSPLandroid/content/res/ResourcesImpl$$ExternalSyntheticLambda2;-><init>()V
HSPLandroid/content/res/ResourcesImpl$$ExternalSyntheticLambda2;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
HSPLandroid/content/res/ResourcesImpl$LookupStack;-><init>()V
-SPLandroid/content/res/ResourcesImpl$LookupStack;-><init>(Landroid/content/res/ResourcesImpl-IA;)V
+HSPLandroid/content/res/ResourcesImpl$LookupStack;-><init>(Landroid/content/res/ResourcesImpl-IA;)V
HSPLandroid/content/res/ResourcesImpl$LookupStack;->contains(I)Z
HSPLandroid/content/res/ResourcesImpl$LookupStack;->pop()V
HSPLandroid/content/res/ResourcesImpl$LookupStack;->push(I)V
@@ -5470,7 +5490,7 @@
HSPLandroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
HSPLandroid/content/res/ResourcesImpl;->updateConfigurationImpl(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Z)V
HSPLandroid/content/res/ResourcesImpl;->verifyPreloadConfig(IIILjava/lang/String;)Z
-SPLandroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V
HSPLandroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;[Landroid/content/res/loader/ResourcesLoader;)V
HSPLandroid/content/res/ResourcesKey;->equals(Ljava/lang/Object;)Z
HSPLandroid/content/res/ResourcesKey;->hasOverrideConfiguration()Z
@@ -5578,18 +5598,18 @@
HSPLandroid/content/res/XmlBlock;->finalize()V
HSPLandroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser;
HSPLandroid/content/res/XmlBlock;->newParser(I)Landroid/content/res/XmlResourceParser;
-SPLandroid/content/res/loader/ResourcesLoader;-><init>()V
-SPLandroid/content/res/loader/ResourcesLoader;->addProvider(Landroid/content/res/loader/ResourcesProvider;)V
-SPLandroid/content/res/loader/ResourcesLoader;->arrayEquals([Landroid/content/res/loader/ResourcesProvider;[Landroid/content/res/loader/ResourcesProvider;)Z
-SPLandroid/content/res/loader/ResourcesLoader;->getApkAssets()Ljava/util/List;
-HSPLandroid/content/res/loader/ResourcesLoader;->notifyProvidersChangedLocked()V
+HSPLandroid/content/res/loader/ResourcesLoader;-><init>()V
+HSPLandroid/content/res/loader/ResourcesLoader;->addProvider(Landroid/content/res/loader/ResourcesProvider;)V
+HSPLandroid/content/res/loader/ResourcesLoader;->arrayEquals([Landroid/content/res/loader/ResourcesProvider;[Landroid/content/res/loader/ResourcesProvider;)Z
+HSPLandroid/content/res/loader/ResourcesLoader;->getApkAssets()Ljava/util/List;
+HSPLandroid/content/res/loader/ResourcesLoader;->notifyProvidersChangedLocked()V+]Landroid/content/res/loader/ResourcesProvider;Landroid/content/res/loader/ResourcesProvider;
HSPLandroid/content/res/loader/ResourcesLoader;->registerOnProvidersChangedCallback(Ljava/lang/Object;Landroid/content/res/loader/ResourcesLoader$UpdateCallbacks;)V
-SPLandroid/content/res/loader/ResourcesProvider;-><init>(Landroid/content/res/ApkAssets;)V
-SPLandroid/content/res/loader/ResourcesProvider;->decrementRefCount()V
-SPLandroid/content/res/loader/ResourcesProvider;->getApkAssets()Landroid/content/res/ApkAssets;
-SPLandroid/content/res/loader/ResourcesProvider;->incrementRefCount()V
-SPLandroid/content/res/loader/ResourcesProvider;->loadFromApk(Landroid/os/ParcelFileDescriptor;)Landroid/content/res/loader/ResourcesProvider;
-SPLandroid/content/res/loader/ResourcesProvider;->loadFromApk(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;
+HSPLandroid/content/res/loader/ResourcesProvider;-><init>(Landroid/content/res/ApkAssets;)V
+HSPLandroid/content/res/loader/ResourcesProvider;->decrementRefCount()V
+HSPLandroid/content/res/loader/ResourcesProvider;->getApkAssets()Landroid/content/res/ApkAssets;
+HSPLandroid/content/res/loader/ResourcesProvider;->incrementRefCount()V
+HSPLandroid/content/res/loader/ResourcesProvider;->loadFromApk(Landroid/os/ParcelFileDescriptor;)Landroid/content/res/loader/ResourcesProvider;
+HSPLandroid/content/res/loader/ResourcesProvider;->loadFromApk(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;
HSPLandroid/content/type/DefaultMimeMapFactory$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/content/type/DefaultMimeMapFactory;->create()Llibcore/content/type/MimeMap;
HSPLandroid/content/type/DefaultMimeMapFactory;->lambda$create$0(Ljava/lang/Class;Ljava/lang/String;)Ljava/io/InputStream;
@@ -5811,6 +5831,7 @@
HSPLandroid/database/Observable;->unregisterAll()V
HSPLandroid/database/Observable;->unregisterObserver(Ljava/lang/Object;)V
HSPLandroid/database/sqlite/FeatureFlagsImpl;-><init>()V
+SPLandroid/database/sqlite/FeatureFlagsImpl;->concurrentOpenHelper()Z
HSPLandroid/database/sqlite/FeatureFlagsImpl;->onewayFinalizerCloseFixed()Z
HSPLandroid/database/sqlite/Flags;-><clinit>()V
HSPLandroid/database/sqlite/SQLiteClosable;-><init>()V
@@ -5822,14 +5843,14 @@
HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->initIfNeeded()V
HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->isLegacyCompatibilityWalEnabled()Z
HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection;)V
-SPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection-IA;)V
+HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection-IA;)V
HSPLandroid/database/sqlite/SQLiteConnection$Operation;->copyFrom(Landroid/database/sqlite/SQLiteConnection$Operation;)V
HSPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V
HSPLandroid/database/sqlite/SQLiteConnection$Operation;->getTraceMethodName()Ljava/lang/String;
HSPLandroid/database/sqlite/SQLiteConnection$Operation;->setEmpty()V
HSPLandroid/database/sqlite/SQLiteConnection$Operation;->start()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-SPLandroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda0;-><init>(Landroid/database/sqlite/SQLiteConnection$OperationLog;)V
-SPLandroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda0;-><init>(Landroid/database/sqlite/SQLiteConnection$OperationLog;)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda1;-><init>()V
HSPLandroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda1;->apply(I)Ljava/lang/Object;
HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>(Landroid/database/sqlite/SQLiteConnection;)V
HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I
@@ -5907,7 +5928,7 @@
HSPLandroid/database/sqlite/SQLiteConnection;->setSyncModeFromConfiguration()V
HSPLandroid/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>()V
-SPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(Landroid/database/sqlite/SQLiteConnectionPool-IA;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(Landroid/database/sqlite/SQLiteConnectionPool-IA;)V
HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionAcquired(Landroid/database/sqlite/SQLiteConnection;)V
HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionClosed(Landroid/database/sqlite/SQLiteConnection;)V
HSPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->connectionReleased(Landroid/database/sqlite/SQLiteConnection;)V
@@ -6171,7 +6192,7 @@
HSPLandroid/database/sqlite/SQLiteStatementInfo;-><init>()V
HSPLandroid/ddm/DdmHandle;->putString(Ljava/nio/ByteBuffer;Ljava/lang/String;)V
HSPLandroid/ddm/DdmHandleAppName$Names;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-SPLandroid/ddm/DdmHandleAppName$Names;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/ddm/DdmHandleAppName-IA;)V
+HSPLandroid/ddm/DdmHandleAppName$Names;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/ddm/DdmHandleAppName-IA;)V
HSPLandroid/ddm/DdmHandleAppName;->sendAPNM(Ljava/lang/String;Ljava/lang/String;I)V
HSPLandroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;I)V
HSPLandroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;Ljava/lang/String;I)V
@@ -6180,7 +6201,6 @@
HSPLandroid/ddm/DdmHandleHello;->handleFEAT(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
HSPLandroid/ddm/DdmHandleHello;->handleHELO(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
HSPLandroid/ddm/DdmHandleProfiling;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
-HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Landroid/view/SurfaceControl;III)V
HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Z)V
HSPLandroid/graphics/BLASTBufferQueue;->createSurface()Landroid/view/Surface;
HSPLandroid/graphics/BLASTBufferQueue;->destroy()V
@@ -7035,7 +7055,7 @@
HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;
HSPLandroid/graphics/Typeface;-><init>(J)V
HSPLandroid/graphics/Typeface;-><init>(JLjava/lang/String;)V
-HSPLandroid/graphics/Typeface;-><init>(JLjava/lang/String;Landroid/graphics/Typeface;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Typeface;-><init>(JLjava/lang/String;Landroid/graphics/Typeface;)V
HSPLandroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
HSPLandroid/graphics/Typeface;->create(Ljava/lang/String;I)Landroid/graphics/Typeface;
HSPLandroid/graphics/Typeface;->createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
@@ -7393,7 +7413,7 @@
HSPLandroid/graphics/drawable/Drawable;->updateBlendModeFilter(Landroid/graphics/BlendModeColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;
HSPLandroid/graphics/drawable/Drawable;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>()V
-SPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer-IA;)V
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer-IA;)V
HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unwrap()Landroid/graphics/drawable/Drawable$Callback;
HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->wrap(Landroid/graphics/drawable/Drawable$Callback;)Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
@@ -8104,9 +8124,9 @@
HSPLandroid/graphics/fonts/Font;->getAxes()[Landroid/graphics/fonts/FontVariationAxis;
HSPLandroid/graphics/fonts/Font;->getNativePtr()J
HSPLandroid/graphics/fonts/Font;->getStyle()Landroid/graphics/fonts/FontStyle;
-SPLandroid/graphics/fonts/FontFamily$Builder$NoImagePreloadHolder;->-$$Nest$sfgetsFamilyRegistry()Llibcore/util/NativeAllocationRegistry;
-SPLandroid/graphics/fonts/FontFamily$Builder$NoImagePreloadHolder;-><clinit>()V
-SPLandroid/graphics/fonts/FontFamily$Builder;->-$$Nest$smnGetReleaseNativeFamily()J
+HSPLandroid/graphics/fonts/FontFamily$Builder$NoImagePreloadHolder;->-$$Nest$sfgetsFamilyRegistry()Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/fonts/FontFamily$Builder$NoImagePreloadHolder;-><clinit>()V
+HSPLandroid/graphics/fonts/FontFamily$Builder;->-$$Nest$smnGetReleaseNativeFamily()J
HSPLandroid/graphics/fonts/FontFamily$Builder;-><init>(Landroid/graphics/fonts/Font;)V
HSPLandroid/graphics/fonts/FontFamily$Builder;->build()Landroid/graphics/fonts/FontFamily;
HSPLandroid/graphics/fonts/FontFamily$Builder;->build(Ljava/lang/String;IZZI)Landroid/graphics/fonts/FontFamily;
@@ -8123,7 +8143,6 @@
HSPLandroid/graphics/fonts/FontVariationAxis;->fromFontVariationSettings(Ljava/lang/String;)[Landroid/graphics/fonts/FontVariationAxis;
HSPLandroid/graphics/fonts/FontVariationAxis;->isValidTag(Ljava/lang/String;)Z
HSPLandroid/graphics/fonts/FontVariationAxis;->makeTag(Ljava/lang/String;)I
-HSPLandroid/graphics/fonts/FontVariationAxis;->toString()Ljava/lang/String;
HSPLandroid/graphics/fonts/SystemFonts;->mmap(Ljava/lang/String;)Ljava/nio/ByteBuffer;
HSPLandroid/graphics/text/LineBreakConfig$Builder;-><init>()V
HSPLandroid/graphics/text/LineBreakConfig$Builder;->build()Landroid/graphics/text/LineBreakConfig;
@@ -8172,7 +8191,7 @@
HSPLandroid/hardware/CameraStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/hardware/CameraStatus$1;->newArray(I)[Landroid/hardware/CameraStatus;
HSPLandroid/hardware/CameraStatus$1;->newArray(I)[Ljava/lang/Object;
-SPLandroid/hardware/DataSpace;->pack(III)I
+HSPLandroid/hardware/DataSpace;->pack(III)I
HSPLandroid/hardware/GeomagneticField$LegendreTable;-><init>(IF)V
HSPLandroid/hardware/GeomagneticField;-><init>(FFFJ)V
HSPLandroid/hardware/GeomagneticField;->computeGeocentricCoordinates(FFF)V
@@ -8224,8 +8243,8 @@
HSPLandroid/hardware/SyncFence;-><init>(J)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
HSPLandroid/hardware/SyncFence;-><init>(Landroid/hardware/SyncFence;)V
HSPLandroid/hardware/SyncFence;->await(J)Z
-SPLandroid/hardware/SyncFence;->awaitForever()Z
-HSPLandroid/hardware/SyncFence;->close()V
+HSPLandroid/hardware/SyncFence;->awaitForever()Z
+HSPLandroid/hardware/SyncFence;->close()V+]Ljava/lang/Runnable;Llibcore/util/NativeAllocationRegistry$CleanerRunner;
HSPLandroid/hardware/SyncFence;->getSignalTime()J
HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V
HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->addSensor(Landroid/hardware/Sensor;II)Z
@@ -8246,7 +8265,7 @@
HSPLandroid/hardware/SystemSensorManager$TriggerEventQueue;->dispatchSensorEvent(I[FIJ)V
HSPLandroid/hardware/SystemSensorManager$TriggerEventQueue;->removeSensorEvent(Landroid/hardware/Sensor;)V
HSPLandroid/hardware/SystemSensorManager;->-$$Nest$fgetmHandleToSensor(Landroid/hardware/SystemSensorManager;)Ljava/util/HashMap;
-SPLandroid/hardware/SystemSensorManager;-><clinit>()V
+HSPLandroid/hardware/SystemSensorManager;-><clinit>()V
HSPLandroid/hardware/SystemSensorManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
HSPLandroid/hardware/SystemSensorManager;->cancelTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;Z)Z
HSPLandroid/hardware/SystemSensorManager;->getFullSensorList()Ljava/util/List;
@@ -8356,30 +8375,32 @@
HSPLandroid/hardware/camera2/utils/TypeReference;->getRawType(Ljava/lang/reflect/Type;)Ljava/lang/Class;
HSPLandroid/hardware/camera2/utils/TypeReference;->getType()Ljava/lang/reflect/Type;
HSPLandroid/hardware/camera2/utils/TypeReference;->hashCode()I
-SPLandroid/hardware/devicestate/DeviceState$Configuration;-><init>(ILjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;)V
-SPLandroid/hardware/devicestate/DeviceState$Configuration;-><init>(ILjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/hardware/devicestate/DeviceState-IA;)V
-SPLandroid/hardware/devicestate/DeviceState$Configuration;->getIdentifier()I
-SPLandroid/hardware/devicestate/DeviceState;-><init>(Landroid/hardware/devicestate/DeviceState$Configuration;)V
-SPLandroid/hardware/devicestate/DeviceState;->getIdentifier()I
+HSPLandroid/hardware/devicestate/DeviceState$Configuration;-><init>(ILjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;)V
+HSPLandroid/hardware/devicestate/DeviceState$Configuration;-><init>(ILjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/hardware/devicestate/DeviceState-IA;)V
+HSPLandroid/hardware/devicestate/DeviceState$Configuration;->getIdentifier()I
+HSPLandroid/hardware/devicestate/DeviceState;-><init>(Landroid/hardware/devicestate/DeviceState$Configuration;)V
+HSPLandroid/hardware/devicestate/DeviceState;->getIdentifier()I
HSPLandroid/hardware/devicestate/DeviceStateInfo$1;-><init>()V
HSPLandroid/hardware/devicestate/DeviceStateInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/devicestate/DeviceStateInfo;
HSPLandroid/hardware/devicestate/DeviceStateInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/hardware/devicestate/DeviceStateInfo;-><clinit>()V
HSPLandroid/hardware/devicestate/DeviceStateManager;-><init>()V
+SPLandroid/hardware/devicestate/DeviceStateManager;->getSupportedDeviceStates()Ljava/util/List;
HSPLandroid/hardware/devicestate/DeviceStateManager;->registerCallback(Ljava/util/concurrent/Executor;Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda0;->run()V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda1;->run()V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda2;->run()V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;-><init>(Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;Ljava/util/concurrent/Executor;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateManagerCallback;-><init>(Landroid/hardware/devicestate/DeviceStateManagerGlobal;)V
-SPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateManagerCallback;-><init>(Landroid/hardware/devicestate/DeviceStateManagerGlobal;Landroid/hardware/devicestate/DeviceStateManagerGlobal-IA;)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateManagerCallback;-><init>(Landroid/hardware/devicestate/DeviceStateManagerGlobal;Landroid/hardware/devicestate/DeviceStateManagerGlobal-IA;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateManagerCallback;->onDeviceStateInfoChanged(Landroid/hardware/devicestate/DeviceStateInfo;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->-$$Nest$mhandleDeviceStateInfoChanged(Landroid/hardware/devicestate/DeviceStateManagerGlobal;Landroid/hardware/devicestate/DeviceStateInfo;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;-><init>(Landroid/hardware/devicestate/IDeviceStateManager;)V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->findCallbackLocked(Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;)I
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->getInstance()Landroid/hardware/devicestate/DeviceStateManagerGlobal;
+SPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->getSupportedDeviceStates()Ljava/util/List;
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->handleDeviceStateInfoChanged(Landroid/hardware/devicestate/DeviceStateInfo;)V
-SPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->registerCallbackLocked()V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->registerCallbackLocked()V
HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal;->registerDeviceStateCallback(Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;Ljava/util/concurrent/Executor;)V
HSPLandroid/hardware/devicestate/IDeviceStateManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
HSPLandroid/hardware/devicestate/IDeviceStateManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -8435,7 +8456,7 @@
HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;J)V
HSPLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
-SPLandroid/hardware/display/DisplayManagerGlobal$1;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal$1;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
HSPLandroid/hardware/display/DisplayManagerGlobal$1;->recompute(Ljava/lang/Integer;)Landroid/view/DisplayInfo;
HSPLandroid/hardware/display/DisplayManagerGlobal$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0;-><init>(Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;JIILandroid/view/DisplayInfo;Z)V
@@ -8444,7 +8465,7 @@
HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleDisplayEventInner(IILandroid/view/DisplayInfo;Z)V
HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->sendDisplayEvent(IILandroid/view/DisplayInfo;Z)V+]Ljava/util/concurrent/Executor;missing_types
HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
-SPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal-IA;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal-IA;)V
HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;->onDisplayEvent(II)V
HSPLandroid/hardware/display/DisplayManagerGlobal;->-$$Nest$fgetmDm(Landroid/hardware/display/DisplayManagerGlobal;)Landroid/hardware/display/IDisplayManager;
HSPLandroid/hardware/display/DisplayManagerGlobal;-><init>(Landroid/hardware/display/IDisplayManager;)V
@@ -8459,13 +8480,13 @@
HSPLandroid/hardware/display/DisplayManagerGlobal;->getDisplayInfoLocked(I)Landroid/view/DisplayInfo;
HSPLandroid/hardware/display/DisplayManagerGlobal;->getInstance()Landroid/hardware/display/DisplayManagerGlobal;
HSPLandroid/hardware/display/DisplayManagerGlobal;->getLooperForHandler(Landroid/os/Handler;)Landroid/os/Looper;
-SPLandroid/hardware/display/DisplayManagerGlobal;->getOverlaySupport()Landroid/hardware/OverlayProperties;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getOverlaySupport()Landroid/hardware/OverlayProperties;
HSPLandroid/hardware/display/DisplayManagerGlobal;->getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;
HSPLandroid/hardware/display/DisplayManagerGlobal;->getStableDisplaySize()Landroid/graphics/Point;
HSPLandroid/hardware/display/DisplayManagerGlobal;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
HSPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(IIZ)V+]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
HSPLandroid/hardware/display/DisplayManagerGlobal;->initExtraLogging()Z
-SPLandroid/hardware/display/DisplayManagerGlobal;->mapPrivateEventFlags(J)J
+HSPLandroid/hardware/display/DisplayManagerGlobal;->mapPrivateEventFlags(J)J
HSPLandroid/hardware/display/DisplayManagerGlobal;->mapPublicEventFlags(J)J
HSPLandroid/hardware/display/DisplayManagerGlobal;->maybeLogAllDisplayListeners()V
HSPLandroid/hardware/display/DisplayManagerGlobal;->registerCallbackIfNeededLocked()V
@@ -8738,7 +8759,7 @@
HSPLandroid/icu/impl/ICUBinary$DatPackageReader;->getNameOffset(Ljava/nio/ByteBuffer;I)I
HSPLandroid/icu/impl/ICUBinary$PackageDataFile;->addBaseNamesInFolder(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
HSPLandroid/icu/impl/ICUBinary$PackageDataFile;->getData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
-SPLandroid/icu/impl/ICUBinary$SingleDataFile;->getData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/ICUBinary$SingleDataFile;->getData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
HSPLandroid/icu/impl/ICUBinary;->addBaseNamesInFileFolder(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
HSPLandroid/icu/impl/ICUBinary;->compareKeys(Ljava/lang/CharSequence;Ljava/nio/ByteBuffer;I)I
HSPLandroid/icu/impl/ICUBinary;->compareKeys(Ljava/lang/CharSequence;[BI)I
@@ -9394,8 +9415,6 @@
HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->setRegion(Ljava/lang/String;)Landroid/icu/impl/locale/InternalLocaleBuilder;
HSPLandroid/icu/impl/locale/KeyTypeData;->initFromResourceBundle()V
HSPLandroid/icu/impl/locale/LSR$CachedDecoder$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroid/icu/impl/locale/LSR$CachedDecoder$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/icu/impl/locale/LSR$CachedDecoder;->$r8$lambda$2Vo5iUPXBd-yMfh29hR8_HJ2Bj4(I)Ljava/lang/String;
HSPLandroid/icu/impl/locale/LSR$CachedDecoder;->decode(I)[Ljava/lang/String;
HSPLandroid/icu/impl/locale/LSR$CachedDecoder;->toLanguage(I)Ljava/lang/String;
HSPLandroid/icu/impl/locale/LSR;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
@@ -9722,11 +9741,11 @@
HSPLandroid/icu/impl/number/range/StandardPluralRanges;->getPluralRangesData(Ljava/lang/String;Landroid/icu/impl/number/range/StandardPluralRanges;)V
HSPLandroid/icu/impl/number/range/StandardPluralRanges;->getSetForLocale(Landroid/icu/util/ULocale;)Ljava/lang/String;
HSPLandroid/icu/impl/number/range/StandardPluralRanges;->setCapacity(I)V
-HSPLandroid/icu/lang/CharSequences;->codePoints(Ljava/lang/CharSequence;)[I
HSPLandroid/icu/lang/UCharacter;->codePointAt(Ljava/lang/CharSequence;I)I
HSPLandroid/icu/lang/UCharacter;->digit(I)I
HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
HSPLandroid/icu/lang/UCharacter;->foldCase(IZ)I
+HSPLandroid/icu/lang/UCharacter;->getAge(I)Landroid/icu/util/VersionInfo;
HSPLandroid/icu/lang/UCharacter;->getPropertyValueEnumNoThrow(ILjava/lang/CharSequence;)I
HSPLandroid/icu/lang/UCharacter;->getType(I)I
HSPLandroid/icu/lang/UCharacter;->isDigit(I)Z
@@ -10756,6 +10775,8 @@
HSPLandroid/icu/util/VersionInfo;->getMajor()I
HSPLandroid/internal/modules/utils/build/SdkLevel;->isAtLeastPreReleaseCodename(Ljava/lang/String;)Z
HSPLandroid/internal/modules/utils/build/SdkLevel;->isAtLeastV()Z
+SPLandroid/location/ILocationManager$Stub;-><clinit>()V
+HSPLandroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
HSPLandroid/location/Location$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;
HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -10800,6 +10821,10 @@
HSPLandroid/location/Location;->setVerticalAccuracyMeters(F)V
HSPLandroid/location/Location;->toString()Ljava/lang/String;
HSPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V
+SPLandroid/location/LocationManager$LocationEnabledCache;-><init>(I)V
+SPLandroid/location/LocationManager;->-$$Nest$sfgetCACHE_KEY_LOCATION_ENABLED_PROPERTY()Ljava/lang/String;
+SPLandroid/location/LocationManager;-><clinit>()V
+HSPLandroid/location/LocationManager;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioAttributes;
HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/media/AudioAttributes$Builder;-><init>()V
@@ -11598,7 +11623,7 @@
HSPLandroid/multiuser/FeatureFlagsImpl;->cacheUserSerialNumberReadOnly()Z
HSPLandroid/multiuser/FeatureFlagsImpl;->cachingDevelopmentImprovements()Z
HSPLandroid/multiuser/FeatureFlagsImpl;->enableSystemUserOnlyForServicesAndProviders()Z
-SPLandroid/multiuser/Flags;->cachingDevelopmentImprovements()Z
+HSPLandroid/multiuser/Flags;->cachingDevelopmentImprovements()Z
HSPLandroid/multiuser/Flags;->enableSystemUserOnlyForServicesAndProviders()Z
HSPLandroid/net/Credentials;-><init>(III)V
HSPLandroid/net/Credentials;->getPid()I
@@ -11774,7 +11799,7 @@
HSPLandroid/net/Uri$PathPart;->getEncoded()Ljava/lang/String;
HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;
HSPLandroid/net/Uri$PathPart;->makeAbsolute(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;
-SPLandroid/net/Uri$PathSegments;-><clinit>()V
+HSPLandroid/net/Uri$PathSegments;-><clinit>()V
HSPLandroid/net/Uri$PathSegments;-><init>([Ljava/lang/String;I)V
HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
@@ -11782,8 +11807,8 @@
HSPLandroid/net/Uri$PathSegmentsBuilder;->add(Ljava/lang/String;)V
HSPLandroid/net/Uri$PathSegmentsBuilder;->build()Landroid/net/Uri$PathSegments;
HSPLandroid/net/Uri$StringUri;->-$$Nest$mgetFragmentPart(Landroid/net/Uri$StringUri;)Landroid/net/Uri$Part;
-SPLandroid/net/Uri$StringUri;->-$$Nest$mgetSsp(Landroid/net/Uri$StringUri;)Landroid/net/Uri$Part;
-SPLandroid/net/Uri$StringUri;->-$$Nest$mparseScheme(Landroid/net/Uri$StringUri;)Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->-$$Nest$mgetSsp(Landroid/net/Uri$StringUri;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$StringUri;->-$$Nest$mparseScheme(Landroid/net/Uri$StringUri;)Ljava/lang/String;
HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;)V
HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;Landroid/net/Uri-IA;)V
HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
@@ -11921,7 +11946,6 @@
HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B
HSPLandroid/os/BaseBundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
HSPLandroid/os/BaseBundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
-HSPLandroid/os/BaseBundle;->getClassLoader()Ljava/lang/ClassLoader;
HSPLandroid/os/BaseBundle;->getFloat(Ljava/lang/String;F)F
HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I
HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I
@@ -12081,7 +12105,6 @@
HSPLandroid/os/Bundle;->getBundle(Ljava/lang/String;)Landroid/os/Bundle;
HSPLandroid/os/Bundle;->getByteArray(Ljava/lang/String;)[B
HSPLandroid/os/Bundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
-HSPLandroid/os/Bundle;->getClassLoader()Ljava/lang/ClassLoader;
HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;)F
HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;F)F
HSPLandroid/os/Bundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
@@ -12293,7 +12316,7 @@
HSPLandroid/os/GraphicsEnvironment;->getInstance()Landroid/os/GraphicsEnvironment;
HSPLandroid/os/GraphicsEnvironment;->getPackageIndex(Ljava/lang/String;Ljava/util/List;)I
HSPLandroid/os/GraphicsEnvironment;->getVulkanVersion(Landroid/content/pm/PackageManager;)I
-SPLandroid/os/GraphicsEnvironment;->queryAngleChoice(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/GraphicsEnvironment;->queryAngleChoice(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String;
HSPLandroid/os/GraphicsEnvironment;->setLayerPaths(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)V
HSPLandroid/os/GraphicsEnvironment;->setup(Landroid/content/Context;Landroid/os/Bundle;)V
HSPLandroid/os/GraphicsEnvironment;->setupAngle(Landroid/content/Context;Landroid/os/Bundle;Landroid/content/pm/PackageManager;Ljava/lang/String;)Z
@@ -12382,7 +12405,7 @@
HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;->asBinder()Landroid/os/IBinder;
HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;->getProperty(ILandroid/os/BatteryProperty;)I
HSPLandroid/os/IBatteryPropertiesRegistrar$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IBatteryPropertiesRegistrar;
-HSPLandroid/os/IBinder$DeathRecipient;->binderDied(Landroid/os/IBinder;)V
+HSPLandroid/os/IBinder$DeathRecipient;->binderDied(Landroid/os/IBinder;)V+]Landroid/os/IBinder$DeathRecipient;Landroid/os/RemoteCallbackList$Interface;
HSPLandroid/os/IBinder;->getSuggestedMaxIpcSizeBytes()I
HSPLandroid/os/ICancellationSignal$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
HSPLandroid/os/ICancellationSignal$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -12433,7 +12456,8 @@
HSPLandroid/os/IRemoteCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
HSPLandroid/os/IServiceManager$Stub$Proxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
HSPLandroid/os/IServiceManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/os/IServiceManager$Stub$Proxy;->checkService(Ljava/lang/String;)Landroid/os/Service;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IServiceManager$Stub$Proxy;Landroid/os/IServiceManager$Stub$Proxy;
+HSPLandroid/os/IServiceManager$Stub$Proxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/IServiceManager$Stub$Proxy;->checkService2(Ljava/lang/String;)Landroid/os/Service;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IServiceManager$Stub$Proxy;Landroid/os/IServiceManager$Stub$Proxy;
HSPLandroid/os/IServiceManager$Stub$Proxy;->isDeclared(Ljava/lang/String;)Z
HSPLandroid/os/ISystemConfig$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/ISystemConfig;
HSPLandroid/os/IThermalEventListener$Stub;-><init>()V
@@ -12473,13 +12497,13 @@
HSPLandroid/os/IVibratorManagerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
HSPLandroid/os/IVibratorManagerService$Stub$Proxy;->getVibratorIds()[I
HSPLandroid/os/IVibratorManagerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVibratorManagerService;
-SPLandroid/os/IpcDataCache$1;-><init>(Landroid/os/IpcDataCache$RemoteCall;)V
+HSPLandroid/os/IpcDataCache$1;-><init>(Landroid/os/IpcDataCache$RemoteCall;)V
HSPLandroid/os/IpcDataCache$1;->apply(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/os/IpcDataCache$RemoteCall;megamorphic_types
-SPLandroid/os/IpcDataCache$Config;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IpcDataCache$Config;-><init>(ILjava/lang/String;Ljava/lang/String;)V
HSPLandroid/os/IpcDataCache$Config;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-SPLandroid/os/IpcDataCache$Config;-><init>(Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;)V
+HSPLandroid/os/IpcDataCache$Config;-><init>(Landroid/app/PropertyInvalidatedCache$Args;Ljava/lang/String;)V
HSPLandroid/os/IpcDataCache$Config;-><init>(Landroid/os/IpcDataCache$Config;Ljava/lang/String;Ljava/lang/String;)V
-SPLandroid/os/IpcDataCache$Config;->cacheNulls(Z)Landroid/os/IpcDataCache$Config;
+HSPLandroid/os/IpcDataCache$Config;->cacheNulls(Z)Landroid/os/IpcDataCache$Config;
HSPLandroid/os/IpcDataCache$Config;->child(Ljava/lang/String;)Landroid/os/IpcDataCache$Config;
HSPLandroid/os/IpcDataCache$Config;->registerChild(Ljava/lang/String;)V
HSPLandroid/os/IpcDataCache$QueryHandler;-><init>()V
@@ -12489,6 +12513,7 @@
HSPLandroid/os/IpcDataCache;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/IpcDataCache$QueryHandler;)V
HSPLandroid/os/IpcDataCache;-><init>(Landroid/os/IpcDataCache$Config;Landroid/os/IpcDataCache$QueryHandler;)V
HSPLandroid/os/IpcDataCache;-><init>(Landroid/os/IpcDataCache$Config;Landroid/os/IpcDataCache$RemoteCall;)V
+HSPLandroid/os/IpcDataCache;->isDisabled()Z
HSPLandroid/os/IpcDataCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/LocaleList;
HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -12542,6 +12567,7 @@
HSPLandroid/os/Message;->getData()Landroid/os/Bundle;
HSPLandroid/os/Message;->getTarget()Landroid/os/Handler;
HSPLandroid/os/Message;->getWhen()J
+HSPLandroid/os/Message;->isAsynchronous()Z
HSPLandroid/os/Message;->isInUse()Z
HSPLandroid/os/Message;->markInUse()V
HSPLandroid/os/Message;->obtain()Landroid/os/Message;
@@ -12731,7 +12757,7 @@
HSPLandroid/os/Messenger;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/os/Parcel$2;-><init>(Landroid/os/Parcel;Ljava/io/InputStream;Ljava/lang/ClassLoader;)V
HSPLandroid/os/Parcel$2;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
-HSPLandroid/os/Parcel$LazyValue;-><init>(Landroid/os/Parcel;IIILandroid/os/Parcel$ClassLoaderProvider;)V
+HSPLandroid/os/Parcel$LazyValue;-><init>(Landroid/os/Parcel;IIILjava/lang/ClassLoader;)V
HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/os/Parcel$LazyValue;->writeToParcel(Landroid/os/Parcel;)V
@@ -12771,7 +12797,6 @@
HSPLandroid/os/Parcel;->finalize()V
HSPLandroid/os/Parcel;->freeBuffer()V
HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/Parcel;->getClassLoader(Landroid/os/Parcel$ClassLoaderProvider;)Ljava/lang/ClassLoader;+]Landroid/os/Parcel$ClassLoaderProvider;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
HSPLandroid/os/Parcel;->getExceptionCode(Ljava/lang/Throwable;)I
HSPLandroid/os/Parcel;->getValueType(Ljava/lang/Object;)I
HSPLandroid/os/Parcel;->hasFileDescriptors()Z
@@ -12789,7 +12814,9 @@
HSPLandroid/os/Parcel;->readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;
HSPLandroid/os/Parcel;->readArrayList(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/ArrayList;
HSPLandroid/os/Parcel;->readArrayListInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/ArrayList;
-HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;IZZLandroid/os/Parcel$ClassLoaderProvider;[I)V
+HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;IZZLjava/lang/ClassLoader;[I)V
+HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
HSPLandroid/os/Parcel;->readBlob()[B
@@ -12812,7 +12839,7 @@
HSPLandroid/os/Parcel;->readHashMapInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/HashMap;
HSPLandroid/os/Parcel;->readInt()I
HSPLandroid/os/Parcel;->readIntArray([I)V
-HSPLandroid/os/Parcel;->readLazyValue(Landroid/os/Parcel$ClassLoaderProvider;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readLazyValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;)V
HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V
HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;)V
@@ -13118,26 +13145,24 @@
HSPLandroid/os/ServiceManager;->rawGetService(Ljava/lang/String;)Landroid/os/IBinder;
HSPLandroid/os/ServiceManager;->waitForDeclaredService(Ljava/lang/String;)Landroid/os/IBinder;
HSPLandroid/os/ServiceManagerProxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
-HSPLandroid/os/ServiceManagerProxy;->checkService(Ljava/lang/String;)Landroid/os/Service;+]Landroid/os/IServiceManager;Landroid/os/IServiceManager$Stub$Proxy;
+HSPLandroid/os/ServiceManagerProxy;->checkService2(Ljava/lang/String;)Landroid/os/Service;+]Landroid/os/IServiceManager;Landroid/os/IServiceManager$Stub$Proxy;
HSPLandroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
HSPLandroid/os/ServiceManagerProxy;->getService2(Ljava/lang/String;)Landroid/os/Service;+]Landroid/os/ServiceManagerProxy;Landroid/os/ServiceManagerProxy;
HSPLandroid/os/ServiceManagerProxy;->isDeclared(Ljava/lang/String;)Z
HSPLandroid/os/ServiceSpecificException;-><init>(ILjava/lang/String;)V
-SPLandroid/os/ServiceWithMetadata$1;-><init>()V
+HSPLandroid/os/ServiceWithMetadata$1;-><init>()V
HSPLandroid/os/ServiceWithMetadata$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ServiceWithMetadata;
HSPLandroid/os/ServiceWithMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/os/ServiceWithMetadata$1;Landroid/os/ServiceWithMetadata$1;
-SPLandroid/os/ServiceWithMetadata;-><clinit>()V
+HSPLandroid/os/ServiceWithMetadata;-><clinit>()V
HSPLandroid/os/ServiceWithMetadata;-><init>()V
HSPLandroid/os/ServiceWithMetadata;->readFromParcel(Landroid/os/Parcel;)V
HSPLandroid/os/SharedMemory$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/SharedMemory;
HSPLandroid/os/SharedMemory$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;)V
-SPLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory-IA;)V
HSPLandroid/os/SharedMemory$MemoryRegistration;-><init>(I)V
-SPLandroid/os/SharedMemory$MemoryRegistration;-><init>(ILandroid/os/SharedMemory-IA;)V
+HSPLandroid/os/SharedMemory$MemoryRegistration;-><init>(ILandroid/os/SharedMemory-IA;)V
HSPLandroid/os/SharedMemory$MemoryRegistration;->acquire()Landroid/os/SharedMemory$MemoryRegistration;
HSPLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;)V
-SPLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory-IA;)V
+HSPLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory-IA;)V
HSPLandroid/os/SharedMemory;-><init>(Ljava/io/FileDescriptor;)V
HSPLandroid/os/SharedMemory;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory-IA;)V
HSPLandroid/os/SharedMemory;->checkOpen()V
@@ -13188,7 +13213,7 @@
HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->setThreadPolicyMask(I)V
HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V
HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>()V
-SPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode-IA;)V
+HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode-IA;)V
HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;)V
HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;Ljava/lang/Throwable;)V
HSPLandroid/os/StrictMode$InstanceTracker;-><init>(Ljava/lang/Object;)V
@@ -13249,6 +13274,7 @@
HSPLandroid/os/StrictMode$VmPolicy$Builder;->permitActivityLeaks()Landroid/os/StrictMode$VmPolicy$Builder;
HSPLandroid/os/StrictMode$VmPolicy$Builder;->permitUnsafeIntentLaunch()Landroid/os/StrictMode$VmPolicy$Builder;
HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;)V
+SPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode-IA;)V
HSPLandroid/os/StrictMode;->-$$Nest$sfgetEMPTY_CLASS_LIMIT_MAP()Ljava/util/HashMap;
HSPLandroid/os/StrictMode;->-$$Nest$sfgetLOGCAT_LOGGER()Landroid/os/StrictMode$ViolationLogger;
HSPLandroid/os/StrictMode;->-$$Nest$sfgetLOG_V()Z
@@ -13307,9 +13333,9 @@
HSPLandroid/os/StrictMode;->vmUnsafeIntentLaunchEnabled()Z
HSPLandroid/os/StrictMode;->vmUntaggedSocketEnabled()Z
HSPLandroid/os/StrictMode;->writeGatheredViolationsToParcel(Landroid/os/Parcel;)V
-SPLandroid/os/SystemClock$2;-><init>(Ljava/time/ZoneId;)V
+HSPLandroid/os/SystemClock$2;-><init>(Ljava/time/ZoneId;)V
HSPLandroid/os/SystemClock$2;->millis()J
-SPLandroid/os/SystemClock;->elapsedRealtimeClock()Ljava/time/Clock;
+HSPLandroid/os/SystemClock;->elapsedRealtimeClock()Ljava/time/Clock;
HSPLandroid/os/SystemClock;->sleep(J)V
HSPLandroid/os/SystemConfigManager;-><init>()V
HSPLandroid/os/SystemConfigManager;->getDisabledUntilUsedPreinstalledCarrierApps()Ljava/util/Set;
@@ -13396,9 +13422,9 @@
HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V
HSPLandroid/os/UserManager$$ExternalSyntheticLambda10;-><init>(Landroid/os/IUserManager;)V
-SPLandroid/os/UserManager$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/os/UserManager$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/os/UserManager$$ExternalSyntheticLambda5;-><init>(Landroid/os/IUserManager;)V
-SPLandroid/os/UserManager$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/os/UserManager$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/os/UserManager$1;-><init>(Landroid/os/UserManager;ILjava/lang/String;)V
HSPLandroid/os/UserManager$1;->bypass(Ljava/lang/Integer;)Z
HSPLandroid/os/UserManager$1;->bypass(Ljava/lang/Object;)Z
@@ -13461,7 +13487,7 @@
HSPLandroid/os/UserManager;->isUserUnlocked(Landroid/os/UserHandle;)Z
HSPLandroid/os/UserManager;->isUserUnlockingOrUnlocked(I)Z
HSPLandroid/os/UserManager;->supportsMultipleUsers()Z
-SPLandroid/os/UserManagerCache;-><clinit>()V
+HSPLandroid/os/UserManagerCache;-><clinit>()V
HSPLandroid/os/UserManagerCache;-><init>()V
HSPLandroid/os/UserManagerCache;->isUserUnlocked(Landroid/os/IpcDataCache$RemoteCall;Ljava/lang/Integer;)Ljava/lang/Boolean;+]Landroid/os/IpcDataCache;Landroid/os/IpcDataCache;
HSPLandroid/os/UserManagerCache;->isUserUnlockingOrUnlocked(Landroid/os/IpcDataCache$RemoteCall;Ljava/lang/Integer;)Ljava/lang/Boolean;+]Landroid/os/IpcDataCache;Landroid/os/IpcDataCache;
@@ -13631,7 +13657,7 @@
HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getNewPermissions()Ljava/util/List;
HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getSplitPermission()Ljava/lang/String;
HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getTargetSdk()I
-SPLandroid/permission/PermissionManager;->-$$Nest$smcheckPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)I
HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPermissionUncached(Ljava/lang/String;III)I
HSPLandroid/permission/PermissionManager;-><clinit>()V
HSPLandroid/permission/PermissionManager;-><init>(Landroid/content/Context;)V
@@ -13963,7 +13989,7 @@
HSPLandroid/security/net/config/ApplicationConfig;->isCleartextTrafficPermitted()Z
HSPLandroid/security/net/config/ApplicationConfig;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
HSPLandroid/security/net/config/ApplicationConfig;->setDefaultInstance(Landroid/security/net/config/ApplicationConfig;)V
-SPLandroid/security/net/config/CertificatesEntryRef;->disableCT()Z
+HSPLandroid/security/net/config/CertificatesEntryRef;->disableCT()Z
HSPLandroid/security/net/config/CertificatesEntryRef;->findAllCertificatesByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
HSPLandroid/security/net/config/CertificatesEntryRef;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Landroid/security/net/config/TrustAnchor;
HSPLandroid/security/net/config/ConfigNetworkSecurityPolicy;-><init>(Landroid/security/net/config/ApplicationConfig;)V
@@ -14003,14 +14029,14 @@
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->addCertificatesEntryRef(Landroid/security/net/config/CertificatesEntryRef;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->addCertificatesEntryRefs(Ljava/util/Collection;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->build()Landroid/security/net/config/NetworkSecurityConfig;
-SPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getCertificateTransparencyVerificationRequired()Z
-SPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getCertificatesEntryRefs()Ljava/util/List;
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getCertificateTransparencyVerificationRequired()Z
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getCertificatesEntryRefs()Ljava/util/List;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveCertificatesEntryRefs()Ljava/util/List;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveCleartextTrafficPermitted()Z
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectiveHstsEnforced()Z
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getEffectivePinSet()Landroid/security/net/config/PinSet;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->getParent()Landroid/security/net/config/NetworkSecurityConfig$Builder;
-SPLandroid/security/net/config/NetworkSecurityConfig$Builder;->hasCertificatesEntryRefs()Z
+HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->hasCertificatesEntryRefs()Z
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setCleartextTrafficPermitted(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setHstsEnforced(Z)Landroid/security/net/config/NetworkSecurityConfig$Builder;
HSPLandroid/security/net/config/NetworkSecurityConfig$Builder;->setParent(Landroid/security/net/config/NetworkSecurityConfig$Builder;)Landroid/security/net/config/NetworkSecurityConfig$Builder;
@@ -14061,9 +14087,9 @@
HSPLandroid/security/net/config/XmlConfigSource;->parseTrustAnchors(Landroid/content/res/XmlResourceParser;Z)Ljava/util/Collection;
HSPLandroid/server/FeatureFlagsImpl;->telemetryApisService()Z
HSPLandroid/service/appprediction/IPredictionService$Stub;-><init>()V
-SPLandroid/service/autofill/FeatureFlagsImpl;->autofillCredmanIntegration()Z
-SPLandroid/service/autofill/FeatureFlagsImpl;->improveFillDialogAconfig()Z
-SPLandroid/service/autofill/FeatureFlagsImpl;->relayoutFix()Z
+HSPLandroid/service/autofill/FeatureFlagsImpl;->autofillCredmanIntegration()Z
+HSPLandroid/service/autofill/FeatureFlagsImpl;->improveFillDialogAconfig()Z
+HSPLandroid/service/autofill/FeatureFlagsImpl;->relayoutFix()Z
HSPLandroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager;
HSPLandroid/service/media/IMediaBrowserService$Stub;-><init>()V
HSPLandroid/service/media/IMediaBrowserService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -14141,7 +14167,7 @@
HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V
HSPLandroid/service/notification/NotificationRankingUpdate;->getRankingMap()Landroid/service/notification/NotificationListenerService$RankingMap;
-SPLandroid/service/notification/RateEstimator;-><init>()V
+HSPLandroid/service/notification/RateEstimator;-><init>()V
HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/StatusBarNotification;
HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/service/notification/StatusBarNotification;-><init>(Landroid/os/Parcel;)V
@@ -14728,7 +14754,7 @@
HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;
HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda10;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-SPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda13;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda13;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda15;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda9;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->query(Ljava/lang/Integer;)Ljava/lang/Object;
@@ -15006,6 +15032,7 @@
HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V
HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V
HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)V
+HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZZILandroid/text/TextUtils$TruncateAt;Landroid/text/BoringLayout$Metrics;ZZLandroid/graphics/Paint$FontMetrics;)V
HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZZILandroid/text/TextUtils$TruncateAt;III[I[IILandroid/graphics/text/LineBreakConfig;Landroid/text/BoringLayout$Metrics;ZZLandroid/graphics/Paint$FontMetrics;)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
HSPLandroid/text/BoringLayout;->ellipsized(II)V
@@ -15129,6 +15156,7 @@
HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;II)V
+HSPLandroid/text/Layout;->drawHighContrastBackground(Landroid/graphics/Canvas;II)V
HSPLandroid/text/Layout;->drawHighlights(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V+]Landroid/graphics/Canvas;Landroid/graphics/Canvas;,Landroid/graphics/RecordingCanvas;]Ljava/util/List;Ljava/util/ArrayList;
HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V
HSPLandroid/text/Layout;->drawWithoutText(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
@@ -15192,7 +15220,7 @@
HSPLandroid/text/MeasuredParagraph;->breakText(IZF)I
HSPLandroid/text/MeasuredParagraph;->buildForBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
HSPLandroid/text/MeasuredParagraph;->buildForMeasurement(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
-HSPLandroid/text/MeasuredParagraph;->buildForStaticLayoutInternal(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;IZZLandroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph$StyleRunCallback;)Landroid/text/MeasuredParagraph;+]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;]Landroid/text/Spanned;megamorphic_types
+HSPLandroid/text/MeasuredParagraph;->buildForStaticLayoutInternal(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;IZZLandroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph$StyleRunCallback;)Landroid/text/MeasuredParagraph;+]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;]Landroid/text/Spanned;missing_types
HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
HSPLandroid/text/MeasuredParagraph;->getChars()[C
HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
@@ -15679,28 +15707,28 @@
HSPLandroid/text/util/Linkify;->containsUnsupportedCharacters(Ljava/lang/String;)Z
HSPLandroid/text/util/Linkify;->gatherLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Ljava/util/regex/Pattern;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V
HSPLandroid/text/util/Linkify;->pruneOverlaps(Ljava/util/ArrayList;)V
-SPLandroid/tracing/FeatureFlagsImpl;->clientSideProtoLogging()Z
-SPLandroid/tracing/FeatureFlagsImpl;->perfettoIme()Z
-SPLandroid/tracing/FeatureFlagsImpl;->perfettoProtologTracing()Z
-SPLandroid/tracing/Flags;->clientSideProtoLogging()Z
-SPLandroid/tracing/Flags;->perfettoProtologTracing()Z
-SPLandroid/tracing/inputmethod/InputMethodDataSource;-><init>(Ljava/lang/Runnable;Ljava/lang/Runnable;)V
-SPLandroid/tracing/perfetto/DataSource;-><init>(Ljava/lang/String;)V
-SPLandroid/tracing/perfetto/DataSource;->createInstance([BI)Landroid/tracing/perfetto/DataSourceInstance;
-SPLandroid/tracing/perfetto/DataSource;->register(Landroid/tracing/perfetto/DataSourceParams;)V
-SPLandroid/tracing/perfetto/DataSourceInstance;-><init>(Landroid/tracing/perfetto/DataSource;I)V
-SPLandroid/tracing/perfetto/DataSourceParams$Builder;-><init>()V
-SPLandroid/tracing/perfetto/DataSourceParams$Builder;->build()Landroid/tracing/perfetto/DataSourceParams;
-SPLandroid/tracing/perfetto/DataSourceParams$Builder;->setBufferExhaustedPolicy(I)Landroid/tracing/perfetto/DataSourceParams$Builder;
-SPLandroid/tracing/perfetto/DataSourceParams$Builder;->setNoFlush(Z)Landroid/tracing/perfetto/DataSourceParams$Builder;
-SPLandroid/tracing/perfetto/DataSourceParams$Builder;->setWillNotifyOnStop(Z)Landroid/tracing/perfetto/DataSourceParams$Builder;
-SPLandroid/tracing/perfetto/DataSourceParams;-><clinit>()V
-SPLandroid/tracing/perfetto/DataSourceParams;-><init>(IZZ)V
-SPLandroid/tracing/perfetto/DataSourceParams;-><init>(IZZLandroid/tracing/perfetto/DataSourceParams-IA;)V
-SPLandroid/tracing/perfetto/InitArguments;-><clinit>()V
-SPLandroid/tracing/perfetto/InitArguments;-><init>(II)V
-SPLandroid/tracing/perfetto/Producer;->init(Landroid/tracing/perfetto/InitArguments;)V
-SPLandroid/tracing/perfetto/StartCallbackArguments;-><init>()V
+HSPLandroid/tracing/FeatureFlagsImpl;->clientSideProtoLogging()Z
+HSPLandroid/tracing/FeatureFlagsImpl;->perfettoIme()Z
+HSPLandroid/tracing/FeatureFlagsImpl;->perfettoProtologTracing()Z
+HSPLandroid/tracing/Flags;->clientSideProtoLogging()Z
+HSPLandroid/tracing/Flags;->perfettoProtologTracing()Z
+HSPLandroid/tracing/inputmethod/InputMethodDataSource;-><init>(Ljava/lang/Runnable;Ljava/lang/Runnable;)V
+HSPLandroid/tracing/perfetto/DataSource;-><init>(Ljava/lang/String;)V
+HSPLandroid/tracing/perfetto/DataSource;->createInstance([BI)Landroid/tracing/perfetto/DataSourceInstance;
+HSPLandroid/tracing/perfetto/DataSource;->register(Landroid/tracing/perfetto/DataSourceParams;)V
+HSPLandroid/tracing/perfetto/DataSourceInstance;-><init>(Landroid/tracing/perfetto/DataSource;I)V
+HSPLandroid/tracing/perfetto/DataSourceParams$Builder;-><init>()V
+HSPLandroid/tracing/perfetto/DataSourceParams$Builder;->build()Landroid/tracing/perfetto/DataSourceParams;
+HSPLandroid/tracing/perfetto/DataSourceParams$Builder;->setBufferExhaustedPolicy(I)Landroid/tracing/perfetto/DataSourceParams$Builder;
+HSPLandroid/tracing/perfetto/DataSourceParams$Builder;->setNoFlush(Z)Landroid/tracing/perfetto/DataSourceParams$Builder;
+HSPLandroid/tracing/perfetto/DataSourceParams$Builder;->setWillNotifyOnStop(Z)Landroid/tracing/perfetto/DataSourceParams$Builder;
+HSPLandroid/tracing/perfetto/DataSourceParams;-><clinit>()V
+HSPLandroid/tracing/perfetto/DataSourceParams;-><init>(IZZ)V
+HSPLandroid/tracing/perfetto/DataSourceParams;-><init>(IZZLandroid/tracing/perfetto/DataSourceParams-IA;)V
+HSPLandroid/tracing/perfetto/InitArguments;-><clinit>()V
+HSPLandroid/tracing/perfetto/InitArguments;-><init>(II)V
+HSPLandroid/tracing/perfetto/Producer;->init(Landroid/tracing/perfetto/InitArguments;)V
+HSPLandroid/tracing/perfetto/StartCallbackArguments;-><init>()V
HSPLandroid/transition/ChangeBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
HSPLandroid/transition/ChangeBounds;->setResizeClip(Z)V
HSPLandroid/transition/ChangeClipBounds;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -15905,8 +15933,8 @@
HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
HSPLandroid/util/CloseGuard;-><init>()V
HSPLandroid/util/CloseGuard;->close()V
-SPLandroid/util/CloseGuard;->get()Landroid/util/CloseGuard;
-SPLandroid/util/CloseGuard;->getImpl()Ldalvik/system/CloseGuard;
+HSPLandroid/util/CloseGuard;->get()Landroid/util/CloseGuard;
+HSPLandroid/util/CloseGuard;->getImpl()Ldalvik/system/CloseGuard;
HSPLandroid/util/CloseGuard;->open(Ljava/lang/String;)V
HSPLandroid/util/ContainerHelpers;->binarySearch([III)I
HSPLandroid/util/ContainerHelpers;->binarySearch([JIJ)I
@@ -16196,7 +16224,7 @@
HSPLandroid/util/Rational;-><init>(II)V
HSPLandroid/util/Rational;->compareTo(Landroid/util/Rational;)I
HSPLandroid/util/Rational;->compareTo(Ljava/lang/Object;)I
-SPLandroid/util/SequenceUtils;->getInitSeq()I
+HSPLandroid/util/SequenceUtils;->getInitSeq()I
HSPLandroid/util/SequenceUtils;->isIncomingSeqStale(II)Z
HSPLandroid/util/Singleton;-><init>()V
HSPLandroid/util/Singleton;->get()Ljava/lang/Object;
@@ -16323,7 +16351,7 @@
HSPLandroid/util/Xml;->newFastSerializer()Lcom/android/modules/utils/TypedXmlSerializer;
HSPLandroid/util/Xml;->newPullParser()Lorg/xmlpull/v1/XmlPullParser;
HSPLandroid/util/Xml;->newSerializer()Lorg/xmlpull/v1/XmlSerializer;
-SPLandroid/util/Xml;->newXmlPullParser()Lorg/xmlpull/v1/XmlPullParser;
+HSPLandroid/util/Xml;->newXmlPullParser()Lorg/xmlpull/v1/XmlPullParser;
HSPLandroid/util/proto/EncodedBuffer;-><init>(I)V
HSPLandroid/util/proto/EncodedBuffer;->editRawFixed32(II)V
HSPLandroid/util/proto/EncodedBuffer;->getBytes(I)[B
@@ -16345,7 +16373,7 @@
HSPLandroid/util/proto/EncodedBuffer;->writeRawFixed32(I)V
HSPLandroid/util/proto/EncodedBuffer;->writeRawVarint32(I)V
HSPLandroid/util/proto/EncodedBuffer;->writeRawVarint64(J)V
-SPLandroid/util/proto/ProtoInputStream;-><init>([B)V
+HSPLandroid/util/proto/ProtoInputStream;-><init>([B)V
HSPLandroid/util/proto/ProtoInputStream;->assertFieldNumber(J)V
HSPLandroid/util/proto/ProtoInputStream;->assertFreshData()V
HSPLandroid/util/proto/ProtoInputStream;->assertWireType(I)V
@@ -16401,8 +16429,8 @@
HSPLandroid/view/Choreographer$1;->initialValue()Ljava/lang/Object;
HSPLandroid/view/Choreographer$2;->initialValue()Landroid/view/Choreographer;
HSPLandroid/view/Choreographer$2;->initialValue()Ljava/lang/Object;
-SPLandroid/view/Choreographer$BufferStuffingState;-><init>()V
-SPLandroid/view/Choreographer$BufferStuffingState;-><init>(Landroid/view/Choreographer-IA;)V
+HSPLandroid/view/Choreographer$BufferStuffingState;-><init>()V
+HSPLandroid/view/Choreographer$BufferStuffingState;-><init>(Landroid/view/Choreographer-IA;)V
HSPLandroid/view/Choreographer$CallbackQueue;-><init>(Landroid/view/Choreographer;)V
HSPLandroid/view/Choreographer$CallbackQueue;->addCallbackLocked(JLjava/lang/Object;Ljava/lang/Object;)V
HSPLandroid/view/Choreographer$CallbackQueue;->extractDueCallbacksLocked(J)Landroid/view/Choreographer$CallbackRecord;
@@ -16517,7 +16545,7 @@
HSPLandroid/view/Display;->getMetrics(Landroid/util/DisplayMetrics;)V
HSPLandroid/view/Display;->getMode()Landroid/view/Display$Mode;
HSPLandroid/view/Display;->getName()Ljava/lang/String;
-SPLandroid/view/Display;->getOverlaySupport()Landroid/hardware/OverlayProperties;
+HSPLandroid/view/Display;->getOverlaySupport()Landroid/hardware/OverlayProperties;
HSPLandroid/view/Display;->getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;
HSPLandroid/view/Display;->getPresentationDeadlineNanos()J
HSPLandroid/view/Display;->getRealMetrics(Landroid/util/DisplayMetrics;)V
@@ -16540,7 +16568,7 @@
HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayAddress$Physical;
HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/view/DisplayAddress$Physical;-><init>(J)V
-SPLandroid/view/DisplayAddress$Physical;-><init>(JLandroid/view/DisplayAddress-IA;)V
+HSPLandroid/view/DisplayAddress$Physical;-><init>(JLandroid/view/DisplayAddress-IA;)V
HSPLandroid/view/DisplayAddress$Physical;->equals(Ljava/lang/Object;)Z
HSPLandroid/view/DisplayAddress$Physical;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/view/DisplayAddress;-><init>()V
@@ -16555,7 +16583,7 @@
HSPLandroid/view/DisplayAdjustments;->setConfiguration(Landroid/content/res/Configuration;)V
HSPLandroid/view/DisplayCutout$Bounds;->-$$Nest$mgetRects(Landroid/view/DisplayCutout$Bounds;)[Landroid/graphics/Rect;
HSPLandroid/view/DisplayCutout$Bounds;-><init>([Landroid/graphics/Rect;Z)V
-SPLandroid/view/DisplayCutout$Bounds;-><init>([Landroid/graphics/Rect;ZLandroid/view/DisplayCutout-IA;)V
+HSPLandroid/view/DisplayCutout$Bounds;-><init>([Landroid/graphics/Rect;ZLandroid/view/DisplayCutout-IA;)V
HSPLandroid/view/DisplayCutout$Bounds;->equals(Ljava/lang/Object;)Z
HSPLandroid/view/DisplayCutout$Bounds;->getRects()[Landroid/graphics/Rect;
HSPLandroid/view/DisplayCutout$Bounds;->isEmpty()Z
@@ -16722,7 +16750,7 @@
HSPLandroid/view/IGraphicsStatsCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
HSPLandroid/view/IRemoteAnimationRunner$Stub;-><init>()V
HSPLandroid/view/IRemoteAnimationRunner$Stub;->asBinder()Landroid/os/IBinder;
-SPLandroid/view/ISensitiveContentProtectionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/view/ISensitiveContentProtectionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
HSPLandroid/view/ISensitiveContentProtectionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/ISensitiveContentProtectionManager;
HSPLandroid/view/ISystemGestureExclusionListener$Stub;-><init>()V
HSPLandroid/view/IWindow$Stub;-><init>()V
@@ -16854,6 +16882,7 @@
HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FF)V
HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FFZ)V
HSPLandroid/view/InsetsAnimationControlImpl;->updateSurfacePosition(Landroid/util/SparseArray;)V
+HSPLandroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier$$ExternalSyntheticLambda0;->applySurfaceParams([Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;)V
HSPLandroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier;->lambda$static$0([Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;)V
HSPLandroid/view/InsetsAnimationThread;->ensureThreadLocked()V
HSPLandroid/view/InsetsAnimationThread;->getHandler()Landroid/os/Handler;
@@ -16877,7 +16906,7 @@
HSPLandroid/view/InsetsAnimationThreadControlRunner;->updateSurfacePosition(Landroid/util/SparseArray;)V
HSPLandroid/view/InsetsController$$ExternalSyntheticLambda10;-><init>(Landroid/view/InsetsController;)V
HSPLandroid/view/InsetsController$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-SPLandroid/view/InsetsController$$ExternalSyntheticLambda8;-><init>()V
+HSPLandroid/view/InsetsController$$ExternalSyntheticLambda8;-><init>()V
HSPLandroid/view/InsetsController$$ExternalSyntheticLambda9;-><init>(Landroid/view/InsetsController;)V
HSPLandroid/view/InsetsController$1;-><init>(Landroid/view/InsetsController;)V
HSPLandroid/view/InsetsController$2;-><init>(Landroid/view/InsetsController;)V
@@ -16965,7 +16994,7 @@
HSPLandroid/view/InsetsSource;->setVisible(Z)Landroid/view/InsetsSource;
HSPLandroid/view/InsetsSource;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/view/InsetsSourceConsumer;->applyLocalVisibilityOverride()Z
-HSPLandroid/view/InsetsSourceConsumer;->applyRequestedVisibilityAndPositionToControl()V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier;Landroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier$$ExternalSyntheticLambda0;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;
+HSPLandroid/view/InsetsSourceConsumer;->applyRequestedVisibilityAndPositionToControl()V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier;Landroid/view/InsetsAnimationControlRunner$SurfaceParamsApplier$$ExternalSyntheticLambda0;,Landroid/view/InsetsController;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;
HSPLandroid/view/InsetsSourceConsumer;->getControl()Landroid/view/InsetsSourceControl;
HSPLandroid/view/InsetsSourceConsumer;->getId()I
HSPLandroid/view/InsetsSourceConsumer;->getType()I
@@ -16981,8 +17010,11 @@
HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Landroid/view/InsetsSourceControl;
HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Ljava/lang/Object;
HSPLandroid/view/InsetsSourceControl$Array$1;-><init>()V
+HSPLandroid/view/InsetsSourceControl$Array$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSourceControl$Array;
+HSPLandroid/view/InsetsSourceControl$Array$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/view/InsetsSourceControl$Array$1;Landroid/view/InsetsSourceControl$Array$1;
HSPLandroid/view/InsetsSourceControl$Array;-><clinit>()V
HSPLandroid/view/InsetsSourceControl$Array;-><init>()V
+HSPLandroid/view/InsetsSourceControl$Array;-><init>(Landroid/os/Parcel;)V+]Landroid/view/InsetsSourceControl$Array;Landroid/view/InsetsSourceControl$Array;
HSPLandroid/view/InsetsSourceControl$Array;->get()[Landroid/view/InsetsSourceControl;
HSPLandroid/view/InsetsSourceControl$Array;->getSeq()I
HSPLandroid/view/InsetsSourceControl$Array;->readFromParcel(Landroid/os/Parcel;)V
@@ -17271,8 +17303,8 @@
HSPLandroid/view/SurfaceControl$Builder;->setOpaque(Z)Landroid/view/SurfaceControl$Builder;
HSPLandroid/view/SurfaceControl$Builder;->setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;
HSPLandroid/view/SurfaceControl$Builder;->unsetBufferSize()V
-SPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda0;-><init>()V
-SPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
HSPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
HSPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda3;-><init>(Ljava/util/function/Consumer;Landroid/view/SurfaceControl$TransactionStats;)V
HSPLandroid/view/SurfaceControl$Transaction$$ExternalSyntheticLambda3;->run()V
@@ -17289,7 +17321,7 @@
HSPLandroid/view/SurfaceControl$Transaction;->close()V
HSPLandroid/view/SurfaceControl$Transaction;->hide(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->lambda$addTransactionCompletedListener$1(Ljava/util/function/Consumer;Landroid/view/SurfaceControl$TransactionStats;)V
-SPLandroid/view/SurfaceControl$Transaction;->lambda$addTransactionCompletedListener$2(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;Landroid/view/SurfaceControl$TransactionStats;)V
+HSPLandroid/view/SurfaceControl$Transaction;->lambda$addTransactionCompletedListener$2(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;Landroid/view/SurfaceControl$TransactionStats;)V
HSPLandroid/view/SurfaceControl$Transaction;->merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->notifyReparentedSurfaces()V
HSPLandroid/view/SurfaceControl$Transaction;->onMergeWithNextTransaction(Ljava/lang/CharSequence;)V
@@ -17300,7 +17332,6 @@
HSPLandroid/view/SurfaceControl$Transaction;->setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->setColor(Landroid/view/SurfaceControl;[F)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->setCornerRadius(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
-HSPLandroid/view/SurfaceControl$Transaction;->setDesintationFrame(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->setExtendedRangeBrightness(Landroid/view/SurfaceControl;FF)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->setFrameRateCategory(Landroid/view/SurfaceControl;IZ)Landroid/view/SurfaceControl$Transaction;+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->setFrameRateSelectionStrategy(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
@@ -17318,17 +17349,17 @@
HSPLandroid/view/SurfaceControl$Transaction;->show(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
HSPLandroid/view/SurfaceControl$Transaction;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/view/SurfaceControl$TransactionStats;-><init>(JJ)V
-SPLandroid/view/SurfaceControl$TransactionStats;->close()V
-SPLandroid/view/SurfaceControl$TransactionStats;->getPresentFence()Landroid/hardware/SyncFence;
-SPLandroid/view/SurfaceControl;->-$$Nest$smnativeApplyTransaction(JZZ)V
+HSPLandroid/view/SurfaceControl$TransactionStats;->close()V
+HSPLandroid/view/SurfaceControl$TransactionStats;->getPresentFence()Landroid/hardware/SyncFence;
+HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeApplyTransaction(JZZ)V
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeCreateTransaction()J
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSanitize(JII)V
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetDestinationFrame(JJIIII)V
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetExtendedRangeBrightness(JJFF)V
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFlags(JJII)V
-SPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFrameRate(JJFII)V
+HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFrameRate(JJFII)V
HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFrameRateCategory(JJIZ)V
-SPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFrameRateSelectionStrategy(JJI)V
+HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFrameRateSelectionStrategy(JJI)V
HSPLandroid/view/SurfaceControl;-><init>()V
HSPLandroid/view/SurfaceControl;-><init>(Landroid/os/Parcel;)V
HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceControl;Ljava/lang/String;)V
@@ -17349,8 +17380,8 @@
HSPLandroid/view/SurfaceControlRegistry$NoOpRegistry;->remove(Landroid/view/SurfaceControl;)V
HSPLandroid/view/SurfaceControlRegistry;-><clinit>()V
HSPLandroid/view/SurfaceControlRegistry;->getProcessInstance()Landroid/view/SurfaceControlRegistry;
-SPLandroid/view/SurfaceControlRegistry;->initializeCallStackDebugging()V
-SPLandroid/view/SurfaceControlRegistry;->updateCallStackDebuggingParams()V
+HSPLandroid/view/SurfaceControlRegistry;->initializeCallStackDebugging()V
+HSPLandroid/view/SurfaceControlRegistry;->updateCallStackDebuggingParams()V
HSPLandroid/view/SurfaceSession;-><init>()V
HSPLandroid/view/SurfaceSession;->finalize()V
HSPLandroid/view/SurfaceSession;->kill()V
@@ -17476,7 +17507,7 @@
HSPLandroid/view/VelocityTracker;->getYVelocity(I)F
HSPLandroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker;
HSPLandroid/view/VelocityTracker;->recycle()V
-SPLandroid/view/View$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
+HSPLandroid/view/View$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
HSPLandroid/view/View$$ExternalSyntheticLambda4;-><init>(Landroid/view/View;)V
HSPLandroid/view/View$$ExternalSyntheticLambda4;->run()V
HSPLandroid/view/View$$ExternalSyntheticLambda5;->run()V
@@ -17540,8 +17571,8 @@
HSPLandroid/view/View$PerformClick;->run()V
HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
HSPLandroid/view/View$ScrollabilityCache;->run()V
-SPLandroid/view/View$SensitiveAutofillHintsHelper;-><clinit>()V
-SPLandroid/view/View$SensitiveAutofillHintsHelper;->containsSensitiveAutofillHint([Ljava/lang/String;)Z
+HSPLandroid/view/View$SensitiveAutofillHintsHelper;-><clinit>()V
+HSPLandroid/view/View$SensitiveAutofillHintsHelper;->containsSensitiveAutofillHint([Ljava/lang/String;)Z
HSPLandroid/view/View$TintInfo;-><init>()V
HSPLandroid/view/View$TransformationInfo;-><init>()V
HSPLandroid/view/View$UnsetPressedState;->run()V
@@ -18544,29 +18575,14 @@
HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
HSPLandroid/view/ViewPropertyAnimator;->withLayer()Landroid/view/ViewPropertyAnimator;
HSPLandroid/view/ViewPropertyAnimator;->withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
-SPLandroid/view/ViewProtoLogGroups;-><clinit>()V
-SPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda19;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda20;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda20;->execute(Ljava/lang/Runnable;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda21;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda21;->run()V
+HSPLandroid/view/ViewProtoLogGroups;-><clinit>()V
+HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda19;-><init>()V
HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda22;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda22;->run()V
-SPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda23;-><init>(Landroid/view/ViewRootImpl;)V
-SPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda23;->run()V
+HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda23;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda23;->run()V
HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda3;->run()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-HSPLandroid/view/ViewRootImpl$10;->run()V
-SPLandroid/view/ViewRootImpl$11$$ExternalSyntheticLambda3;-><init>(Landroid/view/ViewRootImpl$11;JLandroid/window/SurfaceSyncGroup;Z)V
-HSPLandroid/view/ViewRootImpl$11$$ExternalSyntheticLambda3;->onFrameCommit(Z)V
-SPLandroid/view/ViewRootImpl$11;->$r8$lambda$lOIKKNnrcWn9ZndeJebfX4H5mOg(Landroid/view/ViewRootImpl$11;JLandroid/window/SurfaceSyncGroup;ZZ)V
-SPLandroid/view/ViewRootImpl$11;->lambda$onFrameDraw$3(JLandroid/window/SurfaceSyncGroup;ZZ)V
-HSPLandroid/view/ViewRootImpl$11;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
HSPLandroid/view/ViewRootImpl$4;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$5;->accept(Landroid/view/SurfaceControl$TransactionStats;)V
-SPLandroid/view/ViewRootImpl$5;->accept(Ljava/lang/Object;)V
-SPLandroid/view/ViewRootImpl$6;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$6;->run()V
+HSPLandroid/view/ViewRootImpl$6;->run()V+]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;-><init>(Landroid/view/ViewRootImpl;)V
HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
HSPLandroid/view/ViewRootImpl$AsyncInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
@@ -18655,18 +18671,15 @@
HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V
HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(Z)V
HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
-SPLandroid/view/ViewRootImpl;->$r8$lambda$I9KJH1qLSZb1_fWNfrFUXDtFojg(Landroid/view/ViewRootImpl;)V
-SPLandroid/view/ViewRootImpl;->$r8$lambda$J_WUiRtQMmJK5FDj7HKcqXqyDcc(Landroid/view/ViewRootImpl;)V
-SPLandroid/view/ViewRootImpl;->$r8$lambda$Lx9xSQs8XgeRJZgj7lPDiojIGvE(Landroid/view/ViewRootImpl;)V
-SPLandroid/view/ViewRootImpl;->$r8$lambda$kydZ5VrQzxxxtiGWLXqElnQw9pY(Landroid/view/ViewRootImpl;ILandroid/view/SurfaceControl$Transaction;)V
-SPLandroid/view/ViewRootImpl;->$r8$lambda$o-4fi-JcmDrHYU6rHJDidn63Y3s(Landroid/view/ViewRootImpl;Ljava/lang/Runnable;)V
-SPLandroid/view/ViewRootImpl;->-$$Nest$fgetmAppStartTimestampsSent(Landroid/view/ViewRootImpl;)Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/view/ViewRootImpl;->$r8$lambda$I9KJH1qLSZb1_fWNfrFUXDtFojg(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->$r8$lambda$Lx9xSQs8XgeRJZgj7lPDiojIGvE(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmAppStartTimestampsSent(Landroid/view/ViewRootImpl;)Ljava/util/concurrent/atomic/AtomicBoolean;
HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmBlastBufferQueue(Landroid/view/ViewRootImpl;)Landroid/graphics/BLASTBufferQueue;
-SPLandroid/view/ViewRootImpl;->-$$Nest$fgetmFirstFramePresentedTimeNs(Landroid/view/ViewRootImpl;)J
-SPLandroid/view/ViewRootImpl;->-$$Nest$fgetmRenderThreadDrawStartTimeNs(Landroid/view/ViewRootImpl;)J
-SPLandroid/view/ViewRootImpl;->-$$Nest$fputmFirstFramePresentedTimeNs(Landroid/view/ViewRootImpl;J)V
+HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmFirstFramePresentedTimeNs(Landroid/view/ViewRootImpl;)J
+HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmRenderThreadDrawStartTimeNs(Landroid/view/ViewRootImpl;)J
+HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmFirstFramePresentedTimeNs(Landroid/view/ViewRootImpl;J)V
HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmProfileRendering(Landroid/view/ViewRootImpl;Z)V
-SPLandroid/view/ViewRootImpl;->-$$Nest$mmaybeSendAppStartTimes(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->-$$Nest$mmaybeSendAppStartTimes(Landroid/view/ViewRootImpl;)V
HSPLandroid/view/ViewRootImpl;->-$$Nest$mprofileRendering(Landroid/view/ViewRootImpl;Z)V
HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;)V
HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Landroid/view/WindowLayout;)V
@@ -18695,7 +18708,7 @@
HSPLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
HSPLandroid/view/ViewRootImpl;->destroyHardwareResources()V
HSPLandroid/view/ViewRootImpl;->destroySurface()V
-HSPLandroid/view/ViewRootImpl;->determineForceDarkType()I
+HSPLandroid/view/ViewRootImpl;->determineForceDarkType()I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
HSPLandroid/view/ViewRootImpl;->die(Z)Z
HSPLandroid/view/ViewRootImpl;->dipToPx(I)I
HSPLandroid/view/ViewRootImpl;->dispatchAppVisibility(Z)V
@@ -18735,7 +18748,7 @@
HSPLandroid/view/ViewRootImpl;->getCompatWindowConfiguration()Landroid/app/WindowConfiguration;
HSPLandroid/view/ViewRootImpl;->getConfiguration()Landroid/content/res/Configuration;
HSPLandroid/view/ViewRootImpl;->getDisplayId()I
-SPLandroid/view/ViewRootImpl;->getFrameRateCompatibility()I
+HSPLandroid/view/ViewRootImpl;->getFrameRateCompatibility()I
HSPLandroid/view/ViewRootImpl;->getHandwritingInitiator()Landroid/view/HandwritingInitiator;
HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
HSPLandroid/view/ViewRootImpl;->getHostVisibilityReason()Ljava/lang/String;+]Landroid/view/View;missing_types
@@ -18763,7 +18776,7 @@
HSPLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
HSPLandroid/view/ViewRootImpl;->handleContentCaptureFlush()V
HSPLandroid/view/ViewRootImpl;->handleDispatchSystemUiVisibilityChanged()V
-SPLandroid/view/ViewRootImpl;->handleInsetsControlChanged(Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;)V
+HSPLandroid/view/ViewRootImpl;->handleInsetsControlChanged(Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;)V
HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V
HSPLandroid/view/ViewRootImpl;->initializeProtoLogInProcess()V
HSPLandroid/view/ViewRootImpl;->intermittentUpdateState()I
@@ -18784,13 +18797,11 @@
HSPLandroid/view/ViewRootImpl;->isTextDirectionResolved()Z
HSPLandroid/view/ViewRootImpl;->keepClearRectsChanged(Z)V
HSPLandroid/view/ViewRootImpl;->lambda$createSyncIfNeeded$4(ILandroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$16()V
HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$17()V
HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$18()V
HSPLandroid/view/ViewRootImpl;->lambda$new$0(Landroid/view/View;)Ljava/util/List;
HSPLandroid/view/ViewRootImpl;->lambda$new$1(Landroid/view/View;)Ljava/util/List;
HSPLandroid/view/ViewRootImpl;->lambda$new$2(Landroid/view/View;)Ljava/util/List;
-HSPLandroid/view/ViewRootImpl;->lambda$new$9(Ljava/lang/Runnable;)V
HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
HSPLandroid/view/ViewRootImpl;->logAndTrace(Ljava/lang/String;)V
HSPLandroid/view/ViewRootImpl;->logColorMode(IZ)V
@@ -19202,7 +19213,7 @@
HSPLandroid/view/accessibility/CaptioningManager;->isEnabled()Z
HSPLandroid/view/accessibility/CaptioningManager;->registerObserver(Ljava/lang/String;)V
HSPLandroid/view/accessibility/CaptioningManager;->removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V
-SPLandroid/view/accessibility/FeatureFlagsImpl;->forceInvertColor()Z
+HSPLandroid/view/accessibility/FeatureFlagsImpl;->forceInvertColor()Z
HSPLandroid/view/accessibility/FeatureFlagsImpl;->supplementalDescription()Z
HSPLandroid/view/accessibility/Flags;->forceInvertColor()Z
HSPLandroid/view/accessibility/Flags;->supplementalDescription()Z+]Landroid/view/accessibility/FeatureFlags;Landroid/view/accessibility/FeatureFlagsImpl;
@@ -19388,26 +19399,26 @@
HSPLandroid/view/autofill/AutofillFeatureFlags$$ExternalSyntheticLambda0;-><init>()V
HSPLandroid/view/autofill/AutofillFeatureFlags$$ExternalSyntheticLambda1;-><init>()V
HSPLandroid/view/autofill/AutofillFeatureFlags$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->enableRelativeLocationForRelayout()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->enableRelayoutFixes()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->getAllowlistStringFromFlag()Ljava/lang/String;
+HSPLandroid/view/autofill/AutofillFeatureFlags;->enableRelativeLocationForRelayout()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->enableRelayoutFixes()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->getAllowlistStringFromFlag()Ljava/lang/String;
HSPLandroid/view/autofill/AutofillFeatureFlags;->getDenylistStringFromFlag()Ljava/lang/String;
HSPLandroid/view/autofill/AutofillFeatureFlags;->getFillDialogEnabledHints()[Ljava/lang/String;
HSPLandroid/view/autofill/AutofillFeatureFlags;->getNonAutofillableImeActionIdSetFromFlag()Ljava/util/Set;
-SPLandroid/view/autofill/AutofillFeatureFlags;->isCredentialManagerEnabled()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->isCredentialManagerEnabled()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->isFillAndSaveDialogDisabledForCredentialManager()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->isFillDialogEnabled()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->isImproveFillDialogEnabled()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->isTriggerFillRequestOnFilteredImportantViewsEnabled()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->isImproveFillDialogEnabled()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->isTriggerFillRequestOnFilteredImportantViewsEnabled()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->isTriggerFillRequestOnUnimportantViewEnabled()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->lambda$getFillDialogEnabledHints$1(Ljava/lang/String;)Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->shouldAlwaysIncludeWebviewInAssistStructure()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->shouldEnableAutofillOnAllViewTypes()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->shouldEnableMultilineFilter()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->shouldIgnoreRelayoutWhenAuthPending()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldAlwaysIncludeWebviewInAssistStructure()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldEnableAutofillOnAllViewTypes()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldEnableMultilineFilter()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIgnoreRelayoutWhenAuthPending()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllChildrenViewInAssistStructure()Z
HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllViewsAutofillTypeNotNoneInAssistStructrue()Z
-SPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeInvisibleViewInAssistStructure()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeInvisibleViewInAssistStructure()Z
HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
HSPLandroid/view/autofill/AutofillId;-><init>(I)V
@@ -19600,14 +19611,14 @@
HSPLandroid/view/contentcapture/ViewNode;-><init>()V
HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V
HSPLandroid/view/contentcapture/ViewNode;->writeToParcel(Landroid/os/Parcel;Landroid/view/contentcapture/ViewNode;I)V
-SPLandroid/view/flags/FeatureFlagsImpl;->addSchandleToVriSurface()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->addSchandleToVriSurface()Z
HSPLandroid/view/flags/FeatureFlagsImpl;->bufferStuffingRecovery()Z
-SPLandroid/view/flags/FeatureFlagsImpl;->customizableWindowHeaders()Z
-SPLandroid/view/flags/FeatureFlagsImpl;->disableDrawWakeLock()Z
-SPLandroid/view/flags/FeatureFlagsImpl;->enableScrollFeedbackForTouch()Z
-SPLandroid/view/flags/FeatureFlagsImpl;->enableSurfaceNativeAllocRegistrationRo()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->customizableWindowHeaders()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->disableDrawWakeLock()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->enableScrollFeedbackForTouch()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->enableSurfaceNativeAllocRegistrationRo()Z
HSPLandroid/view/flags/FeatureFlagsImpl;->sensitiveContentAppProtection()Z
-SPLandroid/view/flags/FeatureFlagsImpl;->viewVelocityApi()Z
+HSPLandroid/view/flags/FeatureFlagsImpl;->viewVelocityApi()Z
HSPLandroid/view/flags/Flags;->bufferStuffingRecovery()Z+]Landroid/view/flags/FeatureFlags;Landroid/view/flags/FeatureFlagsImpl;
HSPLandroid/view/flags/Flags;->disableDrawWakeLock()Z
HSPLandroid/view/flags/Flags;->sensitiveContentAppProtection()Z+]Landroid/view/flags/FeatureFlags;Landroid/view/flags/FeatureFlagsImpl;
@@ -19644,8 +19655,8 @@
HSPLandroid/view/inputmethod/EditorInfo;->setInitialToolType(I)V
HSPLandroid/view/inputmethod/EditorInfo;->writeToParcel(Landroid/os/Parcel;I)V
HSPLandroid/view/inputmethod/ExtractedTextRequest;-><init>()V
-SPLandroid/view/inputmethod/FeatureFlagsImpl;->compatchangeForZerojankproxy()Z
-SPLandroid/view/inputmethod/FeatureFlagsImpl;->initiationWithoutInputConnection()Z
+HSPLandroid/view/inputmethod/FeatureFlagsImpl;->compatchangeForZerojankproxy()Z
+HSPLandroid/view/inputmethod/FeatureFlagsImpl;->initiationWithoutInputConnection()Z
HSPLandroid/view/inputmethod/FeatureFlagsImpl;->refactorInsetsController()Z
HSPLandroid/view/inputmethod/Flags;->refactorInsetsController()Z+]Landroid/view/inputmethod/FeatureFlags;Landroid/view/inputmethod/FeatureFlagsImpl;
HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;-><clinit>()V
@@ -21449,15 +21460,15 @@
HSPLandroid/window/ActivityWindowInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/window/ActivityWindowInfo$1;Landroid/window/ActivityWindowInfo$1;
HSPLandroid/window/ActivityWindowInfo;-><init>()V
HSPLandroid/window/ActivityWindowInfo;-><init>(Landroid/os/Parcel;)V
-SPLandroid/window/ActivityWindowInfo;-><init>(Landroid/os/Parcel;Landroid/window/ActivityWindowInfo-IA;)V
+HSPLandroid/window/ActivityWindowInfo;-><init>(Landroid/os/Parcel;Landroid/window/ActivityWindowInfo-IA;)V
HSPLandroid/window/ActivityWindowInfo;-><init>(Landroid/window/ActivityWindowInfo;)V
HSPLandroid/window/ActivityWindowInfo;->equals(Ljava/lang/Object;)Z
HSPLandroid/window/ActivityWindowInfo;->set(Landroid/window/ActivityWindowInfo;)V
HSPLandroid/window/ActivityWindowInfo;->set(ZLandroid/graphics/Rect;Landroid/graphics/Rect;)V
HSPLandroid/window/BackProgressAnimator;-><init>()V
-SPLandroid/window/BackTouchTracker$TouchTrackerState;->$values()[Landroid/window/BackTouchTracker$TouchTrackerState;
-SPLandroid/window/BackTouchTracker$TouchTrackerState;-><clinit>()V
-SPLandroid/window/BackTouchTracker$TouchTrackerState;-><init>(Ljava/lang/String;I)V
+HSPLandroid/window/BackTouchTracker$TouchTrackerState;->$values()[Landroid/window/BackTouchTracker$TouchTrackerState;
+HSPLandroid/window/BackTouchTracker$TouchTrackerState;-><clinit>()V
+HSPLandroid/window/BackTouchTracker$TouchTrackerState;-><init>(Ljava/lang/String;I)V
HSPLandroid/window/BackTouchTracker;-><init>()V
HSPLandroid/window/BackTouchTracker;->setProgressThresholds(FFF)V
HSPLandroid/window/ClientWindowFrames$1;-><init>()V
@@ -21473,49 +21484,48 @@
HSPLandroid/window/ConfigurationHelper;->isDisplayRotationChanged(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Z
HSPLandroid/window/ConfigurationHelper;->shouldUpdateResources(Landroid/os/IBinder;Landroid/content/res/Configuration;Landroid/content/res/Configuration;Landroid/content/res/Configuration;ZLjava/lang/Boolean;)Z
HSPLandroid/window/ConfigurationHelper;->shouldUpdateWindowMetricsBounds(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Z
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda0;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda10;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda11;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda12;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda13;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda14;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda15;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda16;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda17;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda18;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda19;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda1;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda20;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda21;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda22;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda23;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda24;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda25;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda26;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda27;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda28;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda29;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda2;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda30;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda31;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda32;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda3;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda4;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda5;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda6;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda7;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda8;-><init>()V
-SPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda9;-><init>()V
-SPLandroid/window/DesktopModeFlags$ToggleOverride;->$values()[Landroid/window/DesktopModeFlags$ToggleOverride;
-SPLandroid/window/DesktopModeFlags$ToggleOverride;-><clinit>()V
-SPLandroid/window/DesktopModeFlags$ToggleOverride;-><init>(Ljava/lang/String;I)V
-SPLandroid/window/DesktopModeFlags$ToggleOverride;->fromSetting(ILandroid/window/DesktopModeFlags$ToggleOverride;)Landroid/window/DesktopModeFlags$ToggleOverride;
-SPLandroid/window/DesktopModeFlags$ToggleOverride;->getSetting()I
-SPLandroid/window/DesktopModeFlags;->$values()[Landroid/window/DesktopModeFlags;
-SPLandroid/window/DesktopModeFlags;-><clinit>()V
-HSPLandroid/window/DesktopModeFlags;->getToggleOverride(Landroid/content/ContentResolver;)Landroid/window/DesktopModeFlags$ToggleOverride;
-SPLandroid/window/DesktopModeFlags;->getToggleOverrideFromSystem(Landroid/content/ContentResolver;)Landroid/window/DesktopModeFlags$ToggleOverride;
-HSPLandroid/window/DesktopModeFlags;->isTrue()Z+]Landroid/app/Application;Landroid/app/Application;]Ljava/util/function/Supplier;megamorphic_types
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda10;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda11;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda12;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda13;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda14;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda15;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda16;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda17;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda18;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda19;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda20;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda21;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda22;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda23;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda24;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda25;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda26;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda27;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda28;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda29;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda30;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda31;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda32;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda3;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda4;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda5;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda6;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda7;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda8;-><init>()V
+HSPLandroid/window/DesktopModeFlags$$ExternalSyntheticLambda9;-><init>()V
+HSPLandroid/window/DesktopModeFlags$ToggleOverride;->$values()[Landroid/window/DesktopModeFlags$ToggleOverride;
+HSPLandroid/window/DesktopModeFlags$ToggleOverride;-><clinit>()V
+HSPLandroid/window/DesktopModeFlags$ToggleOverride;-><init>(Ljava/lang/String;I)V
+HSPLandroid/window/DesktopModeFlags$ToggleOverride;->fromSetting(ILandroid/window/DesktopModeFlags$ToggleOverride;)Landroid/window/DesktopModeFlags$ToggleOverride;
+HSPLandroid/window/DesktopModeFlags$ToggleOverride;->getSetting()I
+HSPLandroid/window/DesktopModeFlags;->$values()[Landroid/window/DesktopModeFlags;
+HSPLandroid/window/DesktopModeFlags;-><clinit>()V
+HSPLandroid/window/DesktopModeFlags;->isFlagTrue(Ljava/util/function/BooleanSupplier;Z)Z+]Landroid/app/Application;Landroid/app/Application;]Ljava/util/function/BooleanSupplier;megamorphic_types
+HSPLandroid/window/DesktopModeFlags;->isTrue()Z+]Landroid/app/Application;Landroid/app/Application;]Ljava/util/function/Supplier;Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda0;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda14;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda21;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda22;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda25;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda26;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda29;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda3;,Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda8;
HSPLandroid/window/IOnBackInvokedCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
HSPLandroid/window/IOnBackInvokedCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
HSPLandroid/window/IOnBackInvokedCallback$Stub;-><init>()V
@@ -21558,7 +21568,7 @@
HSPLandroid/window/SurfaceSyncGroup$2;-><init>(Landroid/window/SurfaceSyncGroup;Z)V
HSPLandroid/window/SurfaceSyncGroup$2;->onTransactionReady(Landroid/view/SurfaceControl$Transaction;)V
HSPLandroid/window/SurfaceSyncGroup$ISurfaceSyncGroupImpl;->getSurfaceSyncGroup()Landroid/window/SurfaceSyncGroup;
-SPLandroid/window/SurfaceSyncGroup;->$r8$lambda$Kan-laRIbBzOqZCBkfLmwXUDtJA(Landroid/window/SurfaceSyncGroup;Ljava/util/function/Consumer;Landroid/view/SurfaceControl$Transaction;)V
+HSPLandroid/window/SurfaceSyncGroup;->$r8$lambda$Kan-laRIbBzOqZCBkfLmwXUDtJA(Landroid/window/SurfaceSyncGroup;Ljava/util/function/Consumer;Landroid/view/SurfaceControl$Transaction;)V
HSPLandroid/window/SurfaceSyncGroup;->-$$Nest$fgetmLock(Landroid/window/SurfaceSyncGroup;)Ljava/lang/Object;
HSPLandroid/window/SurfaceSyncGroup;->-$$Nest$fgetmPendingSyncs(Landroid/window/SurfaceSyncGroup;)Landroid/util/ArraySet;
HSPLandroid/window/SurfaceSyncGroup;->-$$Nest$fgetmTransaction(Landroid/window/SurfaceSyncGroup;)Landroid/view/SurfaceControl$Transaction;
@@ -21629,7 +21639,7 @@
HSPLandroid/window/WindowOnBackInvokedDispatcher;->hasImeOnBackInvokedDispatcher()Z
HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled()Z
HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
-HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;Ljava/util/function/Supplier;)Z
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;Ljava/util/function/Supplier;)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
HSPLandroid/window/WindowOnBackInvokedDispatcher;->onConfigurationChanged(Landroid/content/res/Configuration;)V
HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V
@@ -21852,8 +21862,8 @@
HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->readInt()I
HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->readLongArray([JII)V
HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->skip(I)V
-SPLcom/android/i18n/util/ATrace;->traceBegin(Ljava/lang/String;)V
-SPLcom/android/i18n/util/ATrace;->traceEnd()V
+HSPLcom/android/i18n/util/ATrace;->traceBegin(Ljava/lang/String;)V
+HSPLcom/android/i18n/util/ATrace;->traceEnd()V
HSPLcom/android/icu/charset/CharsetDecoderICU;-><init>(Ljava/nio/charset/Charset;FJ)V
HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I
@@ -22074,40 +22084,46 @@
HSPLcom/android/internal/hidden_from_bootclasspath/android/app/job/FeatureFlagsImpl;->handleAbandonedJobs()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/app/job/FeatureFlagsImpl;->ignoreImportantWhileForeground()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/app/job/Flags;->handleAbandonedJobs()Z+]Lcom/android/internal/hidden_from_bootclasspath/android/app/job/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/android/app/job/FeatureFlagsImpl;
-SPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/FeatureFlagsImpl;-><init>()V
+HSPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/FeatureFlagsImpl;-><init>()V
HSPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/FeatureFlagsImpl;->displayPowerManagerApis()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/Flags;-><clinit>()V
+HSPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/Flags;-><clinit>()V
HSPLcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/Flags;->displayPowerManagerApis()Z+]Lcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/android/companion/virtualdevice/flags/FeatureFlagsImpl;
HSPLcom/android/internal/hidden_from_bootclasspath/android/content/pm/FeatureFlagsImpl;->relativeReferenceIntentFilters()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/net/http/FeatureFlagsImpl;-><init>()V
-SPLcom/android/internal/hidden_from_bootclasspath/android/net/http/FeatureFlagsImpl;->preloadHttpengineInZygote()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/net/http/Flags;-><clinit>()V
-SPLcom/android/internal/hidden_from_bootclasspath/android/net/http/Flags;->preloadHttpengineInZygote()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/content/pm/Flags;->relativeReferenceIntentFilters()Z+]Lcom/android/internal/hidden_from_bootclasspath/android/content/pm/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/android/content/pm/FeatureFlagsImpl;
+HSPLcom/android/internal/hidden_from_bootclasspath/android/net/http/FeatureFlagsImpl;-><init>()V
+HSPLcom/android/internal/hidden_from_bootclasspath/android/net/http/FeatureFlagsImpl;->preloadHttpengineInZygote()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/net/http/Flags;-><clinit>()V
+HSPLcom/android/internal/hidden_from_bootclasspath/android/net/http/Flags;->preloadHttpengineInZygote()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/os/FeatureFlagsImpl;->adpfMeasureDuringInputEventBoost()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/os/FeatureFlagsImpl;->enableAngleAllowList()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/os/FeatureFlagsImpl;->enableAngleAllowList()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/os/FeatureFlagsImpl;->messageQueueTailTracking()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/os/Flags;->enableAngleAllowList()Z
-SPLcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlagsImpl;->contentUriPermissionApis()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/os/Flags;->enableAngleAllowList()Z
+SPLcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlagsImpl;->certificateTransparencyConfiguration()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlagsImpl;->contentUriPermissionApis()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlagsImpl;->preventIntentRedirect()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/security/Flags;->contentUriPermissionApis()Z
HSPLcom/android/internal/hidden_from_bootclasspath/android/security/Flags;->preventIntentRedirect()Z+]Lcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/android/security/FeatureFlagsImpl;
-SPLcom/android/internal/hidden_from_bootclasspath/android/service/notification/FeatureFlagsImpl;->notificationClassification()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->enableCaptionCompatInsetForceConsumption()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/android/service/notification/FeatureFlagsImpl;->notificationClassification()Z
+SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->disableOptOutEdgeToEdge()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->enableCaptionCompatInsetForceConsumption()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->enableCaptionCompatInsetForceConsumptionAlways()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->enableDesktopWindowingMode()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->predictiveBackPrioritySystemNavigationObserver()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->predictiveBackSystemOverrideCallback()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->scrollingFromLetterbox()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->sdkDesiredPresentTime()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->setScPropertiesInClient()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->predictiveBackPrioritySystemNavigationObserver()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->predictiveBackSystemOverrideCallback()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->scrollingFromLetterbox()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->sdkDesiredPresentTime()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->setScPropertiesInClient()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->showDesktopExperienceDevOption()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->showDesktopWindowingDevOption()Z
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->wlinfoOncreate()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;->wlinfoOncreate()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->disableOptOutEdgeToEdge()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->enableCaptionCompatInsetForceConsumption()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->enableCaptionCompatInsetForceConsumptionAlways()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->enableDesktopWindowingMode()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
-SPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->scrollingFromLetterbox()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->scrollingFromLetterbox()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->setScPropertiesInClient()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
-HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->showDesktopWindowingDevOption()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->showDesktopExperienceDevOption()Z
+HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->showDesktopWindowingDevOption()Z
HSPLcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/Flags;->wlinfoOncreate()Z+]Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlags;Lcom/android/internal/hidden_from_bootclasspath/com/android/window/flags/FeatureFlagsImpl;
HSPLcom/android/internal/infra/AndroidFuture$1;->complete(Lcom/android/internal/infra/AndroidFuture;)V
HSPLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/infra/AndroidFuture;
@@ -22153,9 +22169,9 @@
HSPLcom/android/internal/inputmethod/ImeTracing;->isSystemProcess()Z
HSPLcom/android/internal/inputmethod/ImeTracingClientImpl;-><init>()V
HSPLcom/android/internal/inputmethod/ImeTracingClientImpl;->triggerClientDump(Ljava/lang/String;Landroid/view/inputmethod/InputMethodManager;[B)V
-SPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda3;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;)V
-SPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda4;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;)V
-SPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl;-><init>()V
+HSPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda3;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;)V
+HSPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda4;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;)V
+HSPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl;-><init>()V
HSPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl;->isEnabled()Z
HSPLcom/android/internal/inputmethod/ImeTracingPerfettoImpl;->triggerClientDump(Ljava/lang/String;Landroid/view/inputmethod/InputMethodManager;[B)V
HSPLcom/android/internal/inputmethod/InputBindResult$1;-><init>()V
@@ -22229,14 +22245,14 @@
HSPLcom/android/internal/net/NetworkUtilsInternal;-><clinit>()V
HSPLcom/android/internal/os/AndroidPrintStream;-><init>(ILjava/lang/String;)V
HSPLcom/android/internal/os/AndroidPrintStream;->log(Ljava/lang/String;)V
-SPLcom/android/internal/os/ApplicationSharedMemory;-><init>(Ljava/io/FileDescriptor;ZJ)V
-SPLcom/android/internal/os/ApplicationSharedMemory;->closeFileDescriptor()V
-SPLcom/android/internal/os/ApplicationSharedMemory;->fromFileDescriptor(Ljava/io/FileDescriptor;Z)Lcom/android/internal/os/ApplicationSharedMemory;
+HSPLcom/android/internal/os/ApplicationSharedMemory;-><init>(Ljava/io/FileDescriptor;ZJ)V
+HSPLcom/android/internal/os/ApplicationSharedMemory;->closeFileDescriptor()V
+HSPLcom/android/internal/os/ApplicationSharedMemory;->fromFileDescriptor(Ljava/io/FileDescriptor;Z)Lcom/android/internal/os/ApplicationSharedMemory;
HSPLcom/android/internal/os/ApplicationSharedMemory;->getInstance()Lcom/android/internal/os/ApplicationSharedMemory;
-SPLcom/android/internal/os/ApplicationSharedMemory;->getSystemNonceBlock()J
-SPLcom/android/internal/os/ApplicationSharedMemory;->isMapped()Z
-SPLcom/android/internal/os/ApplicationSharedMemory;->isMutable()Z
-SPLcom/android/internal/os/ApplicationSharedMemory;->setInstance(Lcom/android/internal/os/ApplicationSharedMemory;)V
+HSPLcom/android/internal/os/ApplicationSharedMemory;->getSystemNonceBlock()J
+HSPLcom/android/internal/os/ApplicationSharedMemory;->isMapped()Z
+HSPLcom/android/internal/os/ApplicationSharedMemory;->isMutable()Z
+HSPLcom/android/internal/os/ApplicationSharedMemory;->setInstance(Lcom/android/internal/os/ApplicationSharedMemory;)V
HSPLcom/android/internal/os/BackgroundThread;-><init>()V
HSPLcom/android/internal/os/BackgroundThread;->ensureThreadLocked()V
HSPLcom/android/internal/os/BackgroundThread;->getExecutor()Ljava/util/concurrent/Executor;
@@ -22300,9 +22316,9 @@
HSPLcom/android/internal/os/DebugStore;->recordServiceCreate(Landroid/content/pm/ServiceInfo;)J+]Lcom/android/internal/os/DebugStore$DebugStoreNative;Lcom/android/internal/os/DebugStore$DebugStoreNativeImpl;
HSPLcom/android/internal/os/DebugStore;->recordServiceOnStart(IILandroid/content/Intent;)J+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/internal/os/DebugStore$DebugStoreNative;Lcom/android/internal/os/DebugStore$DebugStoreNativeImpl;
HSPLcom/android/internal/os/FeatureFlagsImpl;->applicationSharedMemoryEnabled()Z
-SPLcom/android/internal/os/FeatureFlagsImpl;->enableApacheHttpLegacyPreload()Z
+HSPLcom/android/internal/os/FeatureFlagsImpl;->enableApacheHttpLegacyPreload()Z
HSPLcom/android/internal/os/Flags;->applicationSharedMemoryEnabled()Z+]Lcom/android/internal/os/FeatureFlags;Lcom/android/internal/os/FeatureFlagsImpl;
-SPLcom/android/internal/os/Flags;->enableApacheHttpLegacyPreload()Z
+HSPLcom/android/internal/os/Flags;->enableApacheHttpLegacyPreload()Z
HSPLcom/android/internal/os/HandlerCaller$MyHandler;-><init>(Lcom/android/internal/os/HandlerCaller;Landroid/os/Looper;Z)V
HSPLcom/android/internal/os/HandlerCaller$MyHandler;->handleMessage(Landroid/os/Message;)V
HSPLcom/android/internal/os/HandlerCaller;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/internal/os/HandlerCaller$Callback;Z)V
@@ -22341,6 +22357,12 @@
HSPLcom/android/internal/os/ProcessCpuTracker;->collectStats(Ljava/lang/String;IZ[ILjava/util/ArrayList;)[I
HSPLcom/android/internal/os/ProcessCpuTracker;->getName(Lcom/android/internal/os/ProcessCpuTracker$Stats;Ljava/lang/String;)V
HSPLcom/android/internal/os/ProcessCpuTracker;->onMeasureProcessName(Ljava/lang/String;)I
+HSPLcom/android/internal/os/ProcfsMemoryUtil$MemorySnapshot;-><init>()V
+SPLcom/android/internal/os/ProcfsMemoryUtil;-><clinit>()V
+SPLcom/android/internal/os/ProcfsMemoryUtil;->readMemorySnapshotFromProcfs()Lcom/android/internal/os/ProcfsMemoryUtil$MemorySnapshot;
+HSPLcom/android/internal/os/ProcfsMemoryUtil;->readMemorySnapshotFromProcfs(Ljava/lang/String;)Lcom/android/internal/os/ProcfsMemoryUtil$MemorySnapshot;
+SPLcom/android/internal/os/ProcfsMemoryUtil;->readOomScoreAdjFromProcfs()I
+HSPLcom/android/internal/os/ProcfsMemoryUtil;->readOomScoreAdjFromProcfs(Ljava/lang/String;)I
HSPLcom/android/internal/os/RuntimeInit$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
HSPLcom/android/internal/os/RuntimeInit$$ExternalSyntheticLambda1;-><init>()V
HSPLcom/android/internal/os/RuntimeInit$$ExternalSyntheticLambda1;->get()Ljava/lang/Object;
@@ -22348,7 +22370,7 @@
HSPLcom/android/internal/os/RuntimeInit$Arguments;->parseArgs([Ljava/lang/String;)V
HSPLcom/android/internal/os/RuntimeInit$KillApplicationHandler;-><init>(Lcom/android/internal/os/RuntimeInit$LoggingHandler;)V
HSPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>()V
-SPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>(Lcom/android/internal/os/RuntimeInit-IA;)V
+HSPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>(Lcom/android/internal/os/RuntimeInit-IA;)V
HSPLcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;-><init>(Ljava/lang/reflect/Method;[Ljava/lang/String;)V
HSPLcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;->run()V
HSPLcom/android/internal/os/RuntimeInit;->applicationInit(I[J[Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Runnable;
@@ -22444,7 +22466,8 @@
HSPLcom/android/internal/os/ZygoteServer;->isUsapPoolEnabled()Z
HSPLcom/android/internal/os/ZygoteServer;->runSelectLoop(Ljava/lang/String;)Ljava/lang/Runnable;
HSPLcom/android/internal/os/ZygoteServer;->setForkChild()V
-SPLcom/android/internal/pm/RoSystemFeatures;->maybeHasFeature(Ljava/lang/String;I)Ljava/lang/Boolean;
+HSPLcom/android/internal/os/logging/MetricsLoggerWrapper;->logPostGcMemorySnapshot()V+]Ljava/util/Collection;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/internal/pm/RoSystemFeatures;->maybeHasFeature(Ljava/lang/String;I)Ljava/lang/Boolean;
HSPLcom/android/internal/policy/DecorContext;-><init>(Landroid/content/Context;Lcom/android/internal/policy/PhoneWindow;)V
HSPLcom/android/internal/policy/DecorContext;->getAutofillOptions()Landroid/content/AutofillOptions;
HSPLcom/android/internal/policy/DecorContext;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
@@ -22566,6 +22589,7 @@
HSPLcom/android/internal/policy/PhoneWindow;->invalidatePanelMenu(I)V
HSPLcom/android/internal/policy/PhoneWindow;->isEdgeToEdgeEnforced(Landroid/content/pm/ApplicationInfo;ZLandroid/content/res/TypedArray;)Z
HSPLcom/android/internal/policy/PhoneWindow;->isFloating()Z
+HSPLcom/android/internal/policy/PhoneWindow;->isOptingOutEdgeToEdgeEnforcement(Landroid/content/pm/ApplicationInfo;ZLandroid/content/res/TypedArray;)Z+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
HSPLcom/android/internal/policy/PhoneWindow;->isShowingWallpaper()Z
HSPLcom/android/internal/policy/PhoneWindow;->isTranslucent()Z
HSPLcom/android/internal/policy/PhoneWindow;->lambda$static$0(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/util/Pair;
@@ -22601,61 +22625,61 @@
HSPLcom/android/internal/policy/PhoneWindow;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
HSPLcom/android/internal/policy/ScreenDecorationsUtils;->supportsRoundedCornersOnWindows(Landroid/content/res/Resources;)Z
HSPLcom/android/internal/policy/WearGestureInterceptionDetector;->isEnabled(Landroid/content/Context;)Z
-SPLcom/android/internal/protolog/IProtoLogClient$Stub;-><init>()V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda4;->run(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda5;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda6;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;->$r8$lambda$MQ_SVaXmDujMW5ISGNMGvz8bOeI(Lcom/android/internal/protolog/PerfettoProtoLogImpl;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;Lcom/android/internal/protolog/ProtoLogCacheUpdater;[Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;Lcom/android/internal/protolog/ProtoLogCacheUpdater;[Lcom/android/internal/protolog/common/IProtoLogGroup;Lcom/android/internal/protolog/IProtoLogConfigurationService;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;->enable()V
+HSPLcom/android/internal/protolog/IProtoLogClient$Stub;-><init>()V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda4;->run(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda5;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl$$ExternalSyntheticLambda6;-><init>(Lcom/android/internal/protolog/PerfettoProtoLogImpl;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->$r8$lambda$MQ_SVaXmDujMW5ISGNMGvz8bOeI(Lcom/android/internal/protolog/PerfettoProtoLogImpl;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;Lcom/android/internal/protolog/ProtoLogCacheUpdater;[Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;Lcom/android/internal/protolog/ProtoLogCacheUpdater;[Lcom/android/internal/protolog/common/IProtoLogGroup;Lcom/android/internal/protolog/IProtoLogConfigurationService;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->enable()V
HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->onTracingInstanceStart(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V+]Lcom/android/internal/protolog/ProtoLogCacheUpdater;missing_types]Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Ljava/util/HashMap$KeySet;
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;->readyToLogToLogcat()V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;->registerGroupsLocally([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/PerfettoProtoLogImpl;->verifyNoCollisionsOrDuplicates([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/ProtoLog;-><clinit>()V
-SPLcom/android/internal/protolog/ProtoLog;->createAndEnableNewPerfettoProtoLogImpl(Lcom/android/internal/protolog/ProtoLogDataSource;[Lcom/android/internal/protolog/common/IProtoLogGroup;)Lcom/android/internal/protolog/PerfettoProtoLogImpl;
-SPLcom/android/internal/protolog/ProtoLog;->getSharedSingleInstanceDataSource()Lcom/android/internal/protolog/ProtoLogDataSource;
-SPLcom/android/internal/protolog/ProtoLog;->init([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/ProtoLog;->initializePerfettoProtoLog([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda0;->run(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda2;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->readyToLogToLogcat()V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->registerGroupsLocally([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/PerfettoProtoLogImpl;->verifyNoCollisionsOrDuplicates([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/ProtoLog;-><clinit>()V
+HSPLcom/android/internal/protolog/ProtoLog;->createAndEnableNewPerfettoProtoLogImpl(Lcom/android/internal/protolog/ProtoLogDataSource;[Lcom/android/internal/protolog/common/IProtoLogGroup;)Lcom/android/internal/protolog/PerfettoProtoLogImpl;
+HSPLcom/android/internal/protolog/ProtoLog;->getSharedSingleInstanceDataSource()Lcom/android/internal/protolog/ProtoLogDataSource;
+HSPLcom/android/internal/protolog/ProtoLog;->init([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/ProtoLog;->initializePerfettoProtoLog([Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda0;->run(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$$ExternalSyntheticLambda2;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;)V
HSPLcom/android/internal/protolog/ProtoLogDataSource$GroupConfig;-><init>(Lcom/android/internal/protolog/common/LogLevel;Z)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$Instance;-><init>(Landroid/tracing/perfetto/DataSource;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStartCallback;Ljava/lang/Runnable;Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStopCallback;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$Instance;->onStart(Landroid/tracing/perfetto/StartCallbackArguments;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><clinit>()V
-SPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><init>(Lcom/android/internal/protolog/common/LogLevel;Ljava/util/Map;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><init>(Lcom/android/internal/protolog/common/LogLevel;Ljava/util/Map;Lcom/android/internal/protolog/ProtoLogDataSource-IA;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$Instance;-><init>(Landroid/tracing/perfetto/DataSource;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStartCallback;Ljava/lang/Runnable;Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStopCallback;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$Instance;->onStart(Landroid/tracing/perfetto/StartCallbackArguments;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><clinit>()V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><init>(Lcom/android/internal/protolog/common/LogLevel;Ljava/util/Map;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;-><init>(Lcom/android/internal/protolog/common/LogLevel;Ljava/util/Map;Lcom/android/internal/protolog/ProtoLogDataSource-IA;)V
HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;->getConfigFor(Ljava/lang/String;)Lcom/android/internal/protolog/ProtoLogDataSource$GroupConfig;+]Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;]Ljava/util/Map;Ljava/util/HashMap;
HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;->getDefaultGroupConfig()Lcom/android/internal/protolog/ProtoLogDataSource$GroupConfig;
-SPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;->getGroupTagsWithOverriddenConfigs()Ljava/util/Set;
-SPLcom/android/internal/protolog/ProtoLogDataSource;->$r8$lambda$UIYmd4vygAyNlpzo0qcmzUnaAs4(Lcom/android/internal/protolog/ProtoLogDataSource;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource;-><init>()V
-SPLcom/android/internal/protolog/ProtoLogDataSource;-><init>(Ljava/lang/String;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource;->createInstance(Landroid/util/proto/ProtoInputStream;I)Landroid/tracing/perfetto/DataSourceInstance;
-SPLcom/android/internal/protolog/ProtoLogDataSource;->createInstance(Landroid/util/proto/ProtoInputStream;I)Lcom/android/internal/protolog/ProtoLogDataSource$Instance;
-SPLcom/android/internal/protolog/ProtoLogDataSource;->executeOnStartCallbacks(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource;->logLevelFromInt(I)Lcom/android/internal/protolog/common/LogLevel;
-SPLcom/android/internal/protolog/ProtoLogDataSource;->readProtoLogConfig(Landroid/util/proto/ProtoInputStream;)Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;
-SPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnFlushCallback(Ljava/lang/Runnable;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnStartCallback(Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStartCallback;)V
-SPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnStopCallback(Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStopCallback;)V
-SPLcom/android/internal/protolog/ProtoLogGroup;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
-SPLcom/android/internal/protolog/ProtoLogGroup;->getId()I
+HSPLcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;->getGroupTagsWithOverriddenConfigs()Ljava/util/Set;
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->$r8$lambda$UIYmd4vygAyNlpzo0qcmzUnaAs4(Lcom/android/internal/protolog/ProtoLogDataSource;ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;-><init>()V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;-><init>(Ljava/lang/String;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->createInstance(Landroid/util/proto/ProtoInputStream;I)Landroid/tracing/perfetto/DataSourceInstance;
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->createInstance(Landroid/util/proto/ProtoInputStream;I)Lcom/android/internal/protolog/ProtoLogDataSource$Instance;
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->executeOnStartCallbacks(ILcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->logLevelFromInt(I)Lcom/android/internal/protolog/common/LogLevel;
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->readProtoLogConfig(Landroid/util/proto/ProtoInputStream;)Lcom/android/internal/protolog/ProtoLogDataSource$ProtoLogConfig;
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnFlushCallback(Ljava/lang/Runnable;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnStartCallback(Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStartCallback;)V
+HSPLcom/android/internal/protolog/ProtoLogDataSource;->registerOnStopCallback(Lcom/android/internal/protolog/ProtoLogDataSource$Instance$TracingInstanceStopCallback;)V
+HSPLcom/android/internal/protolog/ProtoLogGroup;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLcom/android/internal/protolog/ProtoLogGroup;->getId()I
HSPLcom/android/internal/protolog/ProtoLogGroup;->name()Ljava/lang/String;
-SPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl$$ExternalSyntheticLambda0;-><init>()V
-SPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl$$ExternalSyntheticLambda0;->update(Lcom/android/internal/protolog/common/IProtoLog;)V
-SPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;[Lcom/android/internal/protolog/common/IProtoLogGroup;)V
-SPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl;->lambda$new$0(Lcom/android/internal/protolog/common/IProtoLog;)V
-SPLcom/android/internal/protolog/common/LogLevel;->$values()[Lcom/android/internal/protolog/common/LogLevel;
-SPLcom/android/internal/protolog/common/LogLevel;-><clinit>()V
-SPLcom/android/internal/protolog/common/LogLevel;-><init>(Ljava/lang/String;ILjava/lang/String;I)V
+HSPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl$$ExternalSyntheticLambda0;->update(Lcom/android/internal/protolog/common/IProtoLog;)V
+HSPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl;-><init>(Lcom/android/internal/protolog/ProtoLogDataSource;[Lcom/android/internal/protolog/common/IProtoLogGroup;)V
+HSPLcom/android/internal/protolog/UnprocessedPerfettoProtoLogImpl;->lambda$new$0(Lcom/android/internal/protolog/common/IProtoLog;)V
+HSPLcom/android/internal/protolog/common/LogLevel;->$values()[Lcom/android/internal/protolog/common/LogLevel;
+HSPLcom/android/internal/protolog/common/LogLevel;-><clinit>()V
+HSPLcom/android/internal/protolog/common/LogLevel;-><init>(Ljava/lang/String;ILjava/lang/String;I)V
HSPLcom/android/internal/protolog/common/LogLevel;->values()[Lcom/android/internal/protolog/common/LogLevel;
-SPLcom/android/internal/ravenwood/RavenwoodEnvironment;->getInstance()Lcom/android/internal/ravenwood/RavenwoodEnvironment;
-SPLcom/android/internal/ravenwood/RavenwoodEnvironment;->isRunningOnRavenwood()Z
+HSPLcom/android/internal/ravenwood/RavenwoodEnvironment;->getInstance()Lcom/android/internal/ravenwood/RavenwoodEnvironment;
+HSPLcom/android/internal/ravenwood/RavenwoodEnvironment;->isRunningOnRavenwood()Z
HSPLcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService;
HSPLcom/android/internal/statusbar/NotificationVisibility;->recycle()V
HSPLcom/android/internal/telecom/ClientTransactionalServiceRepository;-><clinit>()V
@@ -22873,6 +22897,7 @@
HSPLcom/android/internal/util/FrameworkStatsLog;->write(IIII)V
HSPLcom/android/internal/util/FrameworkStatsLog;->write(IIILjava/lang/String;I)V
HSPLcom/android/internal/util/FrameworkStatsLog;->write(IIJII)V
+HSPLcom/android/internal/util/FrameworkStatsLog;->write(IILjava/lang/String;IIIIII[Ljava/lang/String;[J[J[J[J)V
HSPLcom/android/internal/util/FrameworkStatsLog;->write(IILjava/lang/String;IZ)V
HSPLcom/android/internal/util/FrameworkStatsLog;->write(ILjava/lang/String;I)V
HSPLcom/android/internal/util/FrameworkStatsLog;->write(ILjava/lang/String;IIF)V
@@ -22953,7 +22978,7 @@
HSPLcom/android/internal/util/ProcFileReader;->finishLine()V
HSPLcom/android/internal/util/RateLimitingCache;->get(Lcom/android/internal/util/RateLimitingCache$ValueFetcher;)Ljava/lang/Object;+]Lcom/android/internal/util/RateLimitingCache$ValueFetcher;Landroid/app/ActivityManager$$ExternalSyntheticLambda0;,Landroid/app/ActivityManager$$ExternalSyntheticLambda1;,Landroid/app/ActivityManager$$ExternalSyntheticLambda2;,Landroid/app/ActivityManager$$ExternalSyntheticLambda3;]Lcom/android/internal/util/RateLimitingCache;Lcom/android/internal/util/RateLimitingCache;
HSPLcom/android/internal/util/RateLimitingCache;->getTime()J
-HSPLcom/android/internal/util/RingBuffer;-><init>(Ljava/util/function/Supplier;Ljava/util/function/IntFunction;I)V+]Ljava/util/function/IntFunction;Landroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda1;,Lcom/android/internal/util/RingBuffer$$ExternalSyntheticLambda1;
+HSPLcom/android/internal/util/RingBuffer;-><init>(Ljava/util/function/Supplier;Ljava/util/function/IntFunction;I)V+]Ljava/util/function/IntFunction;Landroid/database/sqlite/SQLiteConnection$OperationLog$$ExternalSyntheticLambda1;
HSPLcom/android/internal/util/ScreenshotHelper;-><init>(Landroid/content/Context;)V
HSPLcom/android/internal/util/StatLogger;->getTime()J
HSPLcom/android/internal/util/StatLogger;->logDurationStat(IJ)J
@@ -23044,7 +23069,7 @@
HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
-SPLcom/android/internal/util/function/pooled/OmniFunction;-><init>()V
+HSPLcom/android/internal/util/function/pooled/OmniFunction;-><init>()V
HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/HexConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuadConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
@@ -23057,10 +23082,10 @@
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeArgCount(I)I
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeReturnType(I)I
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->encode(II)I
-SPLcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;-><init>(Ljava/lang/Object;)V
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->-$$Nest$smmask(II)I
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->-$$Nest$smunmask(II)I
-SPLcom/android/internal/util/function/pooled/PooledLambdaImpl;-><clinit>()V
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;-><clinit>()V
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;-><init>()V
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledLambda;
@@ -23162,10 +23187,12 @@
HSPLcom/android/internal/widget/LockPatternUtils;->isOwnerInfoEnabled(I)Z
HSPLcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z
HSPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeEnabled(I)Z
-SPLcom/android/libcore/readonly/FeatureFlagsImpl;-><init>()V
+HSPLcom/android/libcore/readonly/FeatureFlagsImpl;-><init>()V
HSPLcom/android/libcore/readonly/FeatureFlagsImpl;->nativeMetrics()Z
-SPLcom/android/libcore/readonly/Flags;-><clinit>()V
+SPLcom/android/libcore/readonly/FeatureFlagsImpl;->postCleanupApis()Z
+HSPLcom/android/libcore/readonly/Flags;-><clinit>()V
HSPLcom/android/libcore/readonly/Flags;->nativeMetrics()Z+]Lcom/android/libcore/readonly/FeatureFlags;Lcom/android/libcore/readonly/FeatureFlagsImpl;
+SPLcom/android/libcore/readonly/Flags;->postCleanupApis()Z
HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeBoolean(Ljava/lang/String;Ljava/lang/String;)Z+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeFloat(Ljava/lang/String;Ljava/lang/String;)F
HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeIndex(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
@@ -23183,10 +23210,10 @@
HSPLcom/android/net/module/util/NetworkCapabilitiesUtils;-><clinit>()V
HSPLcom/android/os/coregraphics/HwuiStatsLog;->write(IIJI)V
HSPLcom/android/server/LocalServices;->getService(Ljava/lang/Class;)Ljava/lang/Object;
-SPLcom/android/server/display/feature/flags/FeatureFlagsImpl;-><init>()V
-SPLcom/android/server/display/feature/flags/FeatureFlagsImpl;->displayListenerPerformanceImprovements()Z
-SPLcom/android/server/display/feature/flags/FeatureFlagsImpl;->subscribeGranularDisplayEvents()Z
-SPLcom/android/server/display/feature/flags/Flags;-><clinit>()V
+HSPLcom/android/server/display/feature/flags/FeatureFlagsImpl;-><init>()V
+HSPLcom/android/server/display/feature/flags/FeatureFlagsImpl;->displayListenerPerformanceImprovements()Z
+HSPLcom/android/server/display/feature/flags/FeatureFlagsImpl;->subscribeGranularDisplayEvents()Z
+HSPLcom/android/server/display/feature/flags/Flags;-><clinit>()V
HSPLcom/android/server/display/feature/flags/Flags;->displayListenerPerformanceImprovements()Z+]Lcom/android/server/display/feature/flags/FeatureFlags;Lcom/android/server/display/feature/flags/FeatureFlagsImpl;
HSPLcom/android/server/display/feature/flags/Flags;->subscribeGranularDisplayEvents()Z
HSPLcom/android/telephony/Rlog;->d(Ljava/lang/String;Ljava/lang/String;)I
@@ -23334,6 +23361,7 @@
Landroid/accounts/AccountManager$AmsTask$Response;
Landroid/accounts/AccountManager$AmsTask;
Landroid/accounts/AccountManager$BaseFutureTask$1;
+Landroid/accounts/AccountManager$BaseFutureTask$Response;
Landroid/accounts/AccountManager$BaseFutureTask;
Landroid/accounts/AccountManager$Future2Task$1;
Landroid/accounts/AccountManager$Future2Task;
@@ -23348,6 +23376,7 @@
Landroid/accounts/AuthenticatorDescription-IA;
Landroid/accounts/AuthenticatorDescription;
Landroid/accounts/AuthenticatorException;
+Landroid/accounts/IAccountAuthenticator$Stub$Proxy;
Landroid/accounts/IAccountAuthenticator$Stub;
Landroid/accounts/IAccountAuthenticator;
Landroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;
@@ -23356,6 +23385,7 @@
Landroid/accounts/IAccountManager$Stub$Proxy;
Landroid/accounts/IAccountManager$Stub;
Landroid/accounts/IAccountManager;
+Landroid/accounts/IAccountManagerResponse$Stub$Proxy;
Landroid/accounts/IAccountManagerResponse$Stub;
Landroid/accounts/IAccountManagerResponse;
Landroid/accounts/NetworkErrorException;
@@ -23497,6 +23527,7 @@
Landroid/app/ActivityManager$$ExternalSyntheticLambda1;
Landroid/app/ActivityManager$$ExternalSyntheticLambda2;
Landroid/app/ActivityManager$1;
+Landroid/app/ActivityManager$2;
Landroid/app/ActivityManager$3;
Landroid/app/ActivityManager$4;
Landroid/app/ActivityManager$AppTask;
@@ -23547,8 +23578,10 @@
Landroid/app/ActivityThread$3;
Landroid/app/ActivityThread$4;
Landroid/app/ActivityThread$5;
+Landroid/app/ActivityThread$6;
Landroid/app/ActivityThread$ActivityClientRecord$1;
Landroid/app/ActivityThread$ActivityClientRecord;
+Landroid/app/ActivityThread$AndroidOs;
Landroid/app/ActivityThread$AppBindData;
Landroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;
Landroid/app/ActivityThread$ApplicationThread$1;
@@ -23582,6 +23615,7 @@
Landroid/app/ActivityTransitionState;
Landroid/app/AlarmManager$AlarmClockInfo$1;
Landroid/app/AlarmManager$AlarmClockInfo;
+Landroid/app/AlarmManager$ListenerWrapper;
Landroid/app/AlarmManager$OnAlarmListener;
Landroid/app/AlarmManager;
Landroid/app/AlertDialog$Builder;
@@ -23602,6 +23636,7 @@
Landroid/app/AppOpsManager$$ExternalSyntheticLambda8;
Landroid/app/AppOpsManager$1;
Landroid/app/AppOpsManager$2;
+Landroid/app/AppOpsManager$3;
Landroid/app/AppOpsManager$4;
Landroid/app/AppOpsManager$AppOpsCollector;
Landroid/app/AppOpsManager$AttributedHistoricalOps$1;
@@ -23671,6 +23706,7 @@
Landroid/app/ApplicationPackageManager$MoveCallbackDelegate;
Landroid/app/ApplicationPackageManager$ResourceName;
Landroid/app/ApplicationPackageManager-IA;
+Landroid/app/ApplicationPackageManager;
Landroid/app/AsyncNotedAppOp$1;
Landroid/app/AsyncNotedAppOp;
Landroid/app/AutomaticZenRule$1;
@@ -23699,6 +23735,7 @@
Landroid/app/ContentProviderHolder;
Landroid/app/ContextImpl$1;
Landroid/app/ContextImpl$ApplicationContentResolver;
+Landroid/app/ContextImpl;
Landroid/app/DexLoadReporter;
Landroid/app/Dialog$$ExternalSyntheticLambda0;
Landroid/app/Dialog$$ExternalSyntheticLambda1;
@@ -23784,6 +23821,7 @@
Landroid/app/IApplicationStartInfoCompleteListener$Stub$Proxy;
Landroid/app/IApplicationStartInfoCompleteListener$Stub;
Landroid/app/IApplicationStartInfoCompleteListener;
+Landroid/app/IApplicationThread$Stub$Proxy;
Landroid/app/IApplicationThread$Stub;
Landroid/app/IApplicationThread;
Landroid/app/IAssistDataReceiver$Stub$Proxy;
@@ -23827,11 +23865,13 @@
Landroid/app/ISearchManager$Stub$Proxy;
Landroid/app/ISearchManager$Stub;
Landroid/app/ISearchManager;
+Landroid/app/IServiceConnection$Stub$Proxy;
Landroid/app/IServiceConnection$Stub;
Landroid/app/IServiceConnection;
Landroid/app/IStopUserCallback$Stub$Proxy;
Landroid/app/IStopUserCallback$Stub;
Landroid/app/IStopUserCallback;
+Landroid/app/ITaskStackListener$Stub$Proxy;
Landroid/app/ITaskStackListener$Stub;
Landroid/app/ITaskStackListener;
Landroid/app/ITransientNotification$Stub$Proxy;
@@ -23851,6 +23891,7 @@
Landroid/app/IUidFrozenStateChangedCallback$Stub$Proxy;
Landroid/app/IUidFrozenStateChangedCallback$Stub;
Landroid/app/IUidFrozenStateChangedCallback;
+Landroid/app/IUidObserver$Stub$Proxy;
Landroid/app/IUidObserver$Stub;
Landroid/app/IUidObserver;
Landroid/app/IUnsafeIntentStrictModeCallback$Stub;
@@ -23879,6 +23920,7 @@
Landroid/app/IntentReceiverLeaked;
Landroid/app/IntentService$ServiceHandler;
Landroid/app/IntentService;
+Landroid/app/JobSchedulerImpl;
Landroid/app/KeyguardManager$1;
Landroid/app/KeyguardManager$2;
Landroid/app/KeyguardManager$KeyguardDismissCallback;
@@ -23886,9 +23928,11 @@
Landroid/app/ListActivity;
Landroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;
Landroid/app/LoadedApk$ReceiverDispatcher$Args;
+Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
Landroid/app/LoadedApk$ReceiverDispatcher;
Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;
Landroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;
+Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;
Landroid/app/LoadedApk$ServiceDispatcher$RunConnection;
Landroid/app/LoadedApk$ServiceDispatcher;
Landroid/app/LoadedApk$SplitDependencyLoaderImpl;
@@ -23945,6 +23989,7 @@
Landroid/app/NotificationManager$NotificationKey;
Landroid/app/NotificationManager$Policy$1;
Landroid/app/NotificationManager$Policy;
+Landroid/app/NotificationManager$RateLimiter;
Landroid/app/NotificationManager;
Landroid/app/OnActivityPausedListener;
Landroid/app/PackageInstallObserver$1;
@@ -23955,6 +24000,7 @@
Landroid/app/PendingIntent$1;
Landroid/app/PendingIntent$CancelListener;
Landroid/app/PendingIntent$CanceledException;
+Landroid/app/PendingIntent$FinishedDispatcher;
Landroid/app/PendingIntent$OnFinished;
Landroid/app/PendingIntent$OnMarshaledListener;
Landroid/app/PendingIntent;
@@ -24041,6 +24087,7 @@
Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
Landroid/app/SharedPreferencesImpl$SharedPreferencesThreadFactory;
Landroid/app/SharedPreferencesImpl-IA;
+Landroid/app/SharedPreferencesImpl;
Landroid/app/StackTrace;
Landroid/app/StatusBarManager;
Landroid/app/SyncNotedAppOp$1;
@@ -24444,6 +24491,7 @@
Landroid/app/job/JobService$1;
Landroid/app/job/JobService;
Landroid/app/job/JobServiceEngine$JobHandler;
+Landroid/app/job/JobServiceEngine$JobInterface;
Landroid/app/job/JobServiceEngine;
Landroid/app/job/JobWorkItem$1;
Landroid/app/job/JobWorkItem;
@@ -24751,6 +24799,7 @@
Landroid/content/ComponentName$WithComponentName;
Landroid/content/ComponentName;
Landroid/content/ContentCaptureOptions$1;
+Landroid/content/ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda0;
Landroid/content/ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda1;
Landroid/content/ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda2;
Landroid/content/ContentCaptureOptions$ContentProtectionOptions;
@@ -24772,10 +24821,12 @@
Landroid/content/ContentProviderOperation$Builder;
Landroid/content/ContentProviderOperation-IA;
Landroid/content/ContentProviderOperation;
+Landroid/content/ContentProviderProxy;
Landroid/content/ContentProviderResult$1;
Landroid/content/ContentProviderResult;
Landroid/content/ContentResolver$1;
Landroid/content/ContentResolver$2;
+Landroid/content/ContentResolver$CursorWrapperInner;
Landroid/content/ContentResolver$OpenResourceIdResult;
Landroid/content/ContentResolver$ParcelFileDescriptorInner;
Landroid/content/ContentResolver$ResultListener;
@@ -24806,6 +24857,7 @@
Landroid/content/IContentService$Stub$Proxy;
Landroid/content/IContentService$Stub;
Landroid/content/IContentService;
+Landroid/content/IIntentReceiver$Stub$Proxy;
Landroid/content/IIntentReceiver$Stub;
Landroid/content/IIntentReceiver;
Landroid/content/IIntentSender$Stub$Proxy;
@@ -24979,6 +25031,7 @@
Landroid/content/pm/ILauncherApps$Stub$Proxy;
Landroid/content/pm/ILauncherApps$Stub;
Landroid/content/pm/ILauncherApps;
+Landroid/content/pm/IOnAppsChangedListener$Stub$Proxy;
Landroid/content/pm/IOnAppsChangedListener$Stub;
Landroid/content/pm/IOnAppsChangedListener;
Landroid/content/pm/IOnChecksumsReadyListener$Stub$Proxy;
@@ -25324,6 +25377,7 @@
Landroid/content/res/ThemedResourceCache;
Landroid/content/res/TypedArray;
Landroid/content/res/Validator;
+Landroid/content/res/XmlBlock$Parser;
Landroid/content/res/XmlBlock;
Landroid/content/res/XmlResourceParser;
Landroid/content/res/loader/AssetsProvider;
@@ -25357,6 +25411,7 @@
Landroid/database/ContentObservable;
Landroid/database/ContentObserver$$ExternalSyntheticLambda0;
Landroid/database/ContentObserver$$ExternalSyntheticLambda1;
+Landroid/database/ContentObserver$Transport;
Landroid/database/ContentObserver;
Landroid/database/CrossProcessCursor;
Landroid/database/CrossProcessCursorWrapper;
@@ -25375,6 +25430,7 @@
Landroid/database/DatabaseUtils;
Landroid/database/DefaultDatabaseErrorHandler;
Landroid/database/IBulkCursor;
+Landroid/database/IContentObserver$Stub$Proxy;
Landroid/database/IContentObserver$Stub;
Landroid/database/IContentObserver;
Landroid/database/MatrixCursor$RowBuilder;
@@ -25411,6 +25467,7 @@
Landroid/database/sqlite/SQLiteConnectionPool-IA;
Landroid/database/sqlite/SQLiteConnectionPool;
Landroid/database/sqlite/SQLiteConstraintException;
+Landroid/database/sqlite/SQLiteCursor;
Landroid/database/sqlite/SQLiteCursorDriver;
Landroid/database/sqlite/SQLiteCustomFunction;
Landroid/database/sqlite/SQLiteDatabase$$ExternalSyntheticLambda0;
@@ -25438,6 +25495,7 @@
Landroid/database/sqlite/SQLiteFullException;
Landroid/database/sqlite/SQLiteGlobal;
Landroid/database/sqlite/SQLiteMisuseException;
+Landroid/database/sqlite/SQLiteOpenHelper$$ExternalSyntheticLambda0;
Landroid/database/sqlite/SQLiteOpenHelper;
Landroid/database/sqlite/SQLiteOutOfMemoryException;
Landroid/database/sqlite/SQLiteProgram;
@@ -25510,6 +25568,7 @@
Landroid/graphics/ColorSpace$Lab;
Landroid/graphics/ColorSpace$Model;
Landroid/graphics/ColorSpace$Named;
+Landroid/graphics/ColorSpace$OkLab;
Landroid/graphics/ColorSpace$RenderIntent;
Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda0;
Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda1;
@@ -25916,6 +25975,7 @@
Landroid/hardware/SystemSensorManager$InjectEventQueue;
Landroid/hardware/SystemSensorManager$SensorEventQueue;
Landroid/hardware/SystemSensorManager$TriggerEventQueue;
+Landroid/hardware/SystemSensorManager;
Landroid/hardware/TriggerEvent;
Landroid/hardware/TriggerEventListener;
Landroid/hardware/biometrics/BiometricAuthenticator$AuthenticationCallback;
@@ -26193,6 +26253,7 @@
Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;
Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda1;
Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda3;
Landroid/hardware/display/DisplayManager$DisplayListener;
Landroid/hardware/display/DisplayManager$WeakDisplayCache;
Landroid/hardware/display/DisplayManager-IA;
@@ -28250,8 +28311,13 @@
Landroid/internal/aconfig/storage/AconfigStorageException;
Landroid/internal/aconfig/storage/ByteBufferReader;
Landroid/internal/aconfig/storage/FileType;
+Landroid/internal/aconfig/storage/FlagTable$Header;
+Landroid/internal/aconfig/storage/FlagTable;
+Landroid/internal/aconfig/storage/FlagValueList$Header;
+Landroid/internal/aconfig/storage/FlagValueList;
Landroid/internal/aconfig/storage/PackageTable$Header;
Landroid/internal/aconfig/storage/PackageTable;
+Landroid/internal/aconfig/storage/TableUtils$StorageFilesBundle;
Landroid/internal/framework/protobuf/nano/InvalidProtocolBufferNanoException;
Landroid/internal/framework/protobuf/nano/MessageNano;
Landroid/internal/hidl/base/V1_0/DebugInfo;
@@ -28278,6 +28344,7 @@
Landroid/internal/telephony/sysprop/TelephonyProperties$$ExternalSyntheticLambda8;
Landroid/internal/telephony/sysprop/TelephonyProperties$$ExternalSyntheticLambda9;
Landroid/internal/telephony/sysprop/TelephonyProperties;
+Landroid/location/CountryDetector;
Landroid/location/Geofence$1;
Landroid/location/Geofence;
Landroid/location/IFusedGeofenceHardware$Stub$Proxy;
@@ -28286,11 +28353,16 @@
Landroid/location/IGpsGeofenceHardware$Stub$Proxy;
Landroid/location/IGpsGeofenceHardware$Stub;
Landroid/location/IGpsGeofenceHardware;
+Landroid/location/ILocationManager$Stub$Proxy;
+Landroid/location/ILocationManager$Stub;
+Landroid/location/ILocationManager;
Landroid/location/Location$$ExternalSyntheticLambda0;
Landroid/location/Location$1;
Landroid/location/Location$BearingDistanceCache;
Landroid/location/Location-IA;
Landroid/location/Location;
+Landroid/location/LocationManager$LocationEnabledCache;
+Landroid/location/LocationManager;
Landroid/location/LocationTime$1;
Landroid/location/LocationTime;
Landroid/location/flags/FeatureFlags;
@@ -28322,8 +28394,10 @@
Landroid/media/AudioGainConfig;
Landroid/media/AudioHandle;
Landroid/media/AudioManager$1;
+Landroid/media/AudioManager$2;
Landroid/media/AudioManager$3;
Landroid/media/AudioManager$4;
+Landroid/media/AudioManager$5;
Landroid/media/AudioManager$AudioPlaybackCallback;
Landroid/media/AudioManager$AudioPlaybackCallbackInfo;
Landroid/media/AudioManager$AudioRecordingCallback;
@@ -28342,6 +28416,7 @@
Landroid/media/AudioManager$SafeWaitObject;
Landroid/media/AudioManager$ServiceEventHandlerDelegate$1;
Landroid/media/AudioManager$ServiceEventHandlerDelegate;
+Landroid/media/AudioManager$VolumeCacheQuery;
Landroid/media/AudioManager-IA;
Landroid/media/AudioManager;
Landroid/media/AudioManagerInternal$RingerModeDelegate;
@@ -28455,6 +28530,7 @@
Landroid/media/IMediaRouter2;
Landroid/media/IMediaRouter2Manager$Stub;
Landroid/media/IMediaRouter2Manager;
+Landroid/media/IMediaRouterClient$Stub$Proxy;
Landroid/media/IMediaRouterClient$Stub;
Landroid/media/IMediaRouterClient;
Landroid/media/IMediaRouterService$Stub$Proxy;
@@ -28507,7 +28583,9 @@
Landroid/media/MediaCodec$CryptoInfo$Pattern;
Landroid/media/MediaCodec$CryptoInfo;
Landroid/media/MediaCodec$EventHandler;
+Landroid/media/MediaCodec$GlobalResourceInfo;
Landroid/media/MediaCodec$IncompatibleWithBlockModelException;
+Landroid/media/MediaCodec$InstanceResourceInfo;
Landroid/media/MediaCodec$InvalidBufferFlagsException;
Landroid/media/MediaCodec$LinearBlock;
Landroid/media/MediaCodec$OnFrameRenderedListener;
@@ -28857,6 +28935,7 @@
Landroid/media/session/ISessionController$Stub$Proxy;
Landroid/media/session/ISessionController$Stub;
Landroid/media/session/ISessionController;
+Landroid/media/session/ISessionControllerCallback$Stub$Proxy;
Landroid/media/session/ISessionControllerCallback$Stub;
Landroid/media/session/ISessionControllerCallback;
Landroid/media/session/ISessionManager$Stub$Proxy;
@@ -28985,6 +29064,8 @@
Landroid/net/LocalSocket;
Landroid/net/LocalSocketAddress$Namespace;
Landroid/net/LocalSocketAddress;
+Landroid/net/LocalSocketImpl$SocketInputStream;
+Landroid/net/LocalSocketImpl$SocketOutputStream;
Landroid/net/LocalSocketImpl;
Landroid/net/MatchAllNetworkSpecifier$1;
Landroid/net/MatchAllNetworkSpecifier;
@@ -29033,11 +29114,15 @@
Landroid/net/Uri$AbstractHierarchicalUri;
Landroid/net/Uri$AbstractPart;
Landroid/net/Uri$Builder;
+Landroid/net/Uri$HierarchicalUri;
Landroid/net/Uri$NotCachedHolder;
+Landroid/net/Uri$OpaqueUri;
Landroid/net/Uri$Part$EmptyPart;
Landroid/net/Uri$Part;
Landroid/net/Uri$PathPart;
+Landroid/net/Uri$PathSegments;
Landroid/net/Uri$PathSegmentsBuilder;
+Landroid/net/Uri$StringUri;
Landroid/net/Uri-IA;
Landroid/net/Uri;
Landroid/net/UriCodec;
@@ -29287,7 +29372,6 @@
Landroid/nfc/NfcOemExtension$$ExternalSyntheticLambda9;
Landroid/nfc/NfcOemExtension$Callback;
Landroid/nfc/NfcOemExtension$NfcOemExtensionCallback;
-Landroid/nfc/NfcOemExtension-IA;
Landroid/nfc/NfcOemExtension;
Landroid/nfc/NfcRoutingTableEntry;
Landroid/nfc/NfcServiceManager$ServiceRegisterer;
@@ -29440,6 +29524,7 @@
Landroid/os/BinderProxy$BinderProxyMapSizeException;
Landroid/os/BinderProxy$NoImagePreloadHolder;
Landroid/os/BinderProxy$ProxyMap;
+Landroid/os/BinderProxy;
Landroid/os/BluetoothServiceManager$ServiceRegisterer;
Landroid/os/BluetoothServiceManager;
Landroid/os/BugreportManager;
@@ -29676,6 +29761,7 @@
Landroid/os/LimitExceededException;
Landroid/os/LocaleList$1;
Landroid/os/LocaleList;
+Landroid/os/Looper$NoImagePreloadHolder;
Landroid/os/Looper$Observer;
Landroid/os/Looper;
Landroid/os/MemoryFile;
@@ -29715,7 +29801,7 @@
Landroid/os/PackageTagsList$1;
Landroid/os/PackageTagsList;
Landroid/os/Parcel$1;
-Landroid/os/Parcel$ClassLoaderProvider;
+Landroid/os/Parcel$2;
Landroid/os/Parcel$LazyValue;
Landroid/os/Parcel$ReadWriteHelper;
Landroid/os/Parcel$SquashReadHelper;
@@ -29844,6 +29930,7 @@
Landroid/os/StrictMode$2;
Landroid/os/StrictMode$3;
Landroid/os/StrictMode$4;
+Landroid/os/StrictMode$5;
Landroid/os/StrictMode$6;
Landroid/os/StrictMode$7;
Landroid/os/StrictMode$8;
@@ -30646,6 +30733,7 @@
Landroid/service/notification/NotificationListenerFilter$1;
Landroid/service/notification/NotificationListenerFilter;
Landroid/service/notification/NotificationListenerService$MyHandler;
+Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
Landroid/service/notification/NotificationListenerService$Ranking;
Landroid/service/notification/NotificationListenerService$RankingMap$1;
Landroid/service/notification/NotificationListenerService$RankingMap;
@@ -30660,6 +30748,7 @@
Landroid/service/notification/ScheduleCalendar;
Landroid/service/notification/SnoozeCriterion$1;
Landroid/service/notification/SnoozeCriterion;
+Landroid/service/notification/StatusBarNotification$$ExternalSyntheticLambda0;
Landroid/service/notification/StatusBarNotification$1;
Landroid/service/notification/StatusBarNotification;
Landroid/service/notification/ZenDeviceEffects$1;
@@ -30839,6 +30928,7 @@
Landroid/system/keystore2/KeyParameters;
Landroid/system/keystore2/OperationChallenge$1;
Landroid/system/keystore2/OperationChallenge;
+Landroid/system/suspend/internal/ISuspendControlServiceInternal$Stub$Proxy;
Landroid/system/suspend/internal/ISuspendControlServiceInternal$Stub;
Landroid/system/suspend/internal/ISuspendControlServiceInternal;
Landroid/system/suspend/internal/WakeLockInfo$1;
@@ -31126,6 +31216,7 @@
Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda62;
Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda6;
Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda9;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;
Landroid/telephony/PhoneStateListener;
Landroid/telephony/PhysicalChannelConfig$1;
Landroid/telephony/PhysicalChannelConfig$Builder;
@@ -31232,6 +31323,7 @@
Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda52;
Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda63;
Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda65;
+Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;
Landroid/telephony/TelephonyCallback$ImsCallDisconnectCauseListener;
Landroid/telephony/TelephonyCallback$LinkCapacityEstimateChangedListener;
Landroid/telephony/TelephonyCallback$MediaQualityStatusChangedListener;
@@ -31293,6 +31385,7 @@
Landroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda1;
Landroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda2;
Landroid/telephony/TelephonyRegistryManager$1$$ExternalSyntheticLambda0;
+Landroid/telephony/TelephonyRegistryManager$1;
Landroid/telephony/TelephonyRegistryManager$2;
Landroid/telephony/TelephonyRegistryManager$3;
Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda0;
@@ -31674,6 +31767,7 @@
Landroid/text/SpanWatcher;
Landroid/text/Spannable$Factory;
Landroid/text/Spannable;
+Landroid/text/SpannableString;
Landroid/text/SpannableStringBuilder;
Landroid/text/SpannableStringInternal;
Landroid/text/Spanned;
@@ -31924,6 +32018,7 @@
Landroid/util/AndroidException;
Landroid/util/AndroidRuntimeException;
Landroid/util/ArrayMap$1;
+Landroid/util/ArrayMap;
Landroid/util/ArraySet$1;
Landroid/util/ArraySet;
Landroid/util/AtomicFile;
@@ -31961,6 +32056,7 @@
Landroid/util/FloatProperty;
Landroid/util/Half;
Landroid/util/IconDrawableFactory;
+Landroid/util/IndentingPrintWriter;
Landroid/util/IntArray;
Landroid/util/IntProperty;
Landroid/util/JsonReader$1;
@@ -31992,6 +32088,11 @@
Landroid/util/LongSparseLongArray;
Landroid/util/LruCache;
Landroid/util/MalformedJsonException;
+Landroid/util/MapCollections$ArrayIterator;
+Landroid/util/MapCollections$EntrySet;
+Landroid/util/MapCollections$KeySet;
+Landroid/util/MapCollections$MapIterator;
+Landroid/util/MapCollections$ValuesCollection;
Landroid/util/MapCollections;
Landroid/util/MathUtils;
Landroid/util/MemoryIntArray$1;
@@ -32021,6 +32122,7 @@
Landroid/util/Rational;
Landroid/util/RecurrenceRule$1;
Landroid/util/RecurrenceRule$NonrecurringIterator;
+Landroid/util/RecurrenceRule$RecurringIterator;
Landroid/util/RecurrenceRule;
Landroid/util/ReflectiveProperty;
Landroid/util/RotationUtils;
@@ -32038,6 +32140,7 @@
Landroid/util/SparseLongArray;
Landroid/util/SparseSetArray;
Landroid/util/Spline$LinearSpline;
+Landroid/util/Spline$MonotoneCubicSpline;
Landroid/util/Spline;
Landroid/util/StateSet;
Landroid/util/StringBuilderPrinter;
@@ -32220,6 +32323,7 @@
Landroid/view/IDisplayFoldListener$Stub$Proxy;
Landroid/view/IDisplayFoldListener$Stub;
Landroid/view/IDisplayFoldListener;
+Landroid/view/IDisplayWindowInsetsController$Stub$Proxy;
Landroid/view/IDisplayWindowInsetsController$Stub;
Landroid/view/IDisplayWindowInsetsController;
Landroid/view/IDisplayWindowListener$Stub$Proxy;
@@ -32265,6 +32369,7 @@
Landroid/view/ISurfaceControlViewHostParent;
Landroid/view/ISystemGestureExclusionListener$Stub;
Landroid/view/ISystemGestureExclusionListener;
+Landroid/view/IWallpaperVisibilityListener$Stub$Proxy;
Landroid/view/IWallpaperVisibilityListener$Stub;
Landroid/view/IWallpaperVisibilityListener;
Landroid/view/IWindow$Stub;
@@ -32658,7 +32763,6 @@
Landroid/view/ViewRootImpl$$ExternalSyntheticLambda8;
Landroid/view/ViewRootImpl$$ExternalSyntheticLambda9;
Landroid/view/ViewRootImpl$10;
-Landroid/view/ViewRootImpl$11$$ExternalSyntheticLambda3;
Landroid/view/ViewRootImpl$11;
Landroid/view/ViewRootImpl$1;
Landroid/view/ViewRootImpl$2;
@@ -32704,6 +32808,7 @@
Landroid/view/ViewRootImpl$ViewPostImeInputStage;
Landroid/view/ViewRootImpl$ViewPreImeInputStage;
Landroid/view/ViewRootImpl$ViewRootHandler;
+Landroid/view/ViewRootImpl$W;
Landroid/view/ViewRootImpl$WindowInputEventReceiver;
Landroid/view/ViewRootImpl-IA;
Landroid/view/ViewRootImpl;
@@ -32772,6 +32877,7 @@
Landroid/view/WindowManagerGlobal$TrustedPresentationListener;
Landroid/view/WindowManagerGlobal-IA;
Landroid/view/WindowManagerGlobal;
+Landroid/view/WindowManagerImpl;
Landroid/view/WindowManagerPolicyConstants$PointerEventListener;
Landroid/view/WindowManagerPolicyConstants;
Landroid/view/WindowMetrics;
@@ -32789,6 +32895,7 @@
Landroid/view/accessibility/AccessibilityManager$$ExternalSyntheticLambda1;
Landroid/view/accessibility/AccessibilityManager$$ExternalSyntheticLambda3;
Landroid/view/accessibility/AccessibilityManager$1$$ExternalSyntheticLambda0;
+Landroid/view/accessibility/AccessibilityManager$1;
Landroid/view/accessibility/AccessibilityManager$AccessibilityPolicy;
Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;
Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
@@ -32832,6 +32939,7 @@
Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;
Landroid/view/accessibility/IAccessibilityManager$Stub;
Landroid/view/accessibility/IAccessibilityManager;
+Landroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;
Landroid/view/accessibility/IAccessibilityManagerClient$Stub;
Landroid/view/accessibility/IAccessibilityManagerClient;
Landroid/view/accessibility/WeakSparseArray$WeakReferenceWithId;
@@ -33013,6 +33121,7 @@
Landroid/view/inputmethod/IInputMethodSessionInvoker$$ExternalSyntheticLambda8;
Landroid/view/inputmethod/IInputMethodSessionInvoker;
Landroid/view/inputmethod/ImeTracker$1$$ExternalSyntheticLambda0;
+Landroid/view/inputmethod/ImeTracker$1;
Landroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda0;
Landroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda1;
Landroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda2;
@@ -33559,10 +33668,12 @@
Landroid/widget/RemoteViews$$ExternalSyntheticLambda5;
Landroid/widget/RemoteViews$$ExternalSyntheticLambda6;
Landroid/widget/RemoteViews$$ExternalSyntheticLambda7;
+Landroid/widget/RemoteViews$$ExternalSyntheticLambda8;
Landroid/widget/RemoteViews$1;
Landroid/widget/RemoteViews$2;
Landroid/widget/RemoteViews$Action;
Landroid/widget/RemoteViews$ActionException;
+Landroid/widget/RemoteViews$ApplicationInfoCache$$ExternalSyntheticLambda0;
Landroid/widget/RemoteViews$ApplicationInfoCache;
Landroid/widget/RemoteViews$AsyncApplyTask;
Landroid/widget/RemoteViews$AttributeReflectionAction;
@@ -33783,6 +33894,12 @@
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda30;
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda31;
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda32;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda33;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda34;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda35;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda36;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda37;
+Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda38;
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda3;
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda4;
Landroid/window/DesktopModeFlags$$ExternalSyntheticLambda5;
@@ -33817,6 +33934,7 @@
Landroid/window/ISurfaceSyncGroup;
Landroid/window/ISurfaceSyncGroupCompletedListener$Stub;
Landroid/window/ISurfaceSyncGroupCompletedListener;
+Landroid/window/ITaskFragmentOrganizer$Stub$Proxy;
Landroid/window/ITaskFragmentOrganizer$Stub;
Landroid/window/ITaskFragmentOrganizer;
Landroid/window/ITaskFragmentOrganizerController$Stub;
@@ -33925,6 +34043,7 @@
Landroid/window/WindowContainerTransaction;
Landroid/window/WindowContext;
Landroid/window/WindowContextController;
+Landroid/window/WindowContextInfo$1;
Landroid/window/WindowContextInfo;
Landroid/window/WindowInfosListener$DisplayInfo;
Landroid/window/WindowInfosListener;
@@ -34155,6 +34274,7 @@
Lcom/android/icu/charset/CharsetDecoderICU;
Lcom/android/icu/charset/CharsetEncoderICU;
Lcom/android/icu/charset/CharsetFactory;
+Lcom/android/icu/charset/CharsetICU;
Lcom/android/icu/charset/NativeConverter;
Lcom/android/icu/text/CompatibleDecimalFormatFactory;
Lcom/android/icu/text/DateSorterBridge;
@@ -34667,6 +34787,7 @@
Lcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;
Lcom/android/internal/appwidget/IAppWidgetService$Stub;
Lcom/android/internal/appwidget/IAppWidgetService;
+Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
Lcom/android/internal/backup/IBackupTransport$Stub;
Lcom/android/internal/backup/IBackupTransport;
Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;
@@ -34797,6 +34918,7 @@
Lcom/android/internal/hidden_from_bootclasspath/android/service/notification/FeatureFlags;
Lcom/android/internal/hidden_from_bootclasspath/android/service/notification/FeatureFlagsImpl;
Lcom/android/internal/hidden_from_bootclasspath/android/service/notification/Flags;
+Lcom/android/internal/hidden_from_bootclasspath/android/view/contentcapture/flags/Flags;
Lcom/android/internal/hidden_from_bootclasspath/com/android/libcore/FeatureFlags;
Lcom/android/internal/hidden_from_bootclasspath/com/android/libcore/FeatureFlagsImpl;
Lcom/android/internal/hidden_from_bootclasspath/com/android/libcore/Flags;
@@ -34851,6 +34973,7 @@
Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub$Proxy;
Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations$Stub;
Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;
+Lcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;
Lcom/android/internal/inputmethod/IInputMethodSession$Stub;
Lcom/android/internal/inputmethod/IInputMethodSession;
Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection$Stub;
@@ -34862,6 +34985,7 @@
Lcom/android/internal/inputmethod/ImeTracingClientImpl;
Lcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda3;
Lcom/android/internal/inputmethod/ImeTracingPerfettoImpl$$ExternalSyntheticLambda4;
+Lcom/android/internal/inputmethod/ImeTracingPerfettoImpl;
Lcom/android/internal/inputmethod/ImeTracingServerImpl;
Lcom/android/internal/inputmethod/InputBindResult$1;
Lcom/android/internal/inputmethod/InputBindResult-IA;
@@ -34991,6 +35115,7 @@
Lcom/android/internal/os/CachedDeviceState$TimeInStateStopwatch;
Lcom/android/internal/os/CachedDeviceState;
Lcom/android/internal/os/ClassLoaderFactory;
+Lcom/android/internal/os/Clock$1;
Lcom/android/internal/os/Clock;
Lcom/android/internal/os/DebugStore$DebugStoreNative;
Lcom/android/internal/os/DebugStore$DebugStoreNativeImpl;
@@ -35066,6 +35191,8 @@
Lcom/android/internal/os/ProcessCpuTracker$FilterStats;
Lcom/android/internal/os/ProcessCpuTracker$Stats;
Lcom/android/internal/os/ProcessCpuTracker;
+Lcom/android/internal/os/ProcfsMemoryUtil$MemorySnapshot;
+Lcom/android/internal/os/ProcfsMemoryUtil;
Lcom/android/internal/os/RailStats;
Lcom/android/internal/os/RoSystemProperties;
Lcom/android/internal/os/RpmStats$PowerStateElement;
@@ -35328,6 +35455,7 @@
Lcom/android/internal/telephony/CellNetworkScanResult$1;
Lcom/android/internal/telephony/CellNetworkScanResult;
Lcom/android/internal/telephony/CellularNetworkService$CellularNetworkServiceProvider$1;
+Lcom/android/internal/telephony/CellularNetworkService$CellularNetworkServiceProvider;
Lcom/android/internal/telephony/CellularNetworkService;
Lcom/android/internal/telephony/ClientWakelockAccountant;
Lcom/android/internal/telephony/ClientWakelockTracker;
@@ -35415,6 +35543,7 @@
Lcom/android/internal/telephony/INumberVerificationCallback$Stub$Proxy;
Lcom/android/internal/telephony/INumberVerificationCallback$Stub;
Lcom/android/internal/telephony/INumberVerificationCallback;
+Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;
Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;
Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
Lcom/android/internal/telephony/IOns$Stub$Proxy;
@@ -35520,6 +35649,7 @@
Lcom/android/internal/telephony/NetworkFactoryLegacyImpl$NetworkRequestInfo;
Lcom/android/internal/telephony/NetworkFactoryLegacyImpl;
Lcom/android/internal/telephony/NetworkFactoryShim;
+Lcom/android/internal/telephony/NetworkRegistrationManager$NetworkRegStateCallback;
Lcom/android/internal/telephony/NetworkRegistrationManager$NetworkServiceConnection;
Lcom/android/internal/telephony/NetworkRegistrationManager$RegManagerDeathRecipient;
Lcom/android/internal/telephony/NetworkRegistrationManager;
@@ -35605,6 +35735,7 @@
Lcom/android/internal/telephony/PhoneSubInfoController$$ExternalSyntheticLambda9;
Lcom/android/internal/telephony/PhoneSubInfoController$CallPhoneMethodHelper;
Lcom/android/internal/telephony/PhoneSubInfoController$PermissionCheckHelper;
+Lcom/android/internal/telephony/PhoneSubInfoController;
Lcom/android/internal/telephony/ProxyController$1;
Lcom/android/internal/telephony/ProxyController;
Lcom/android/internal/telephony/RIL$RadioProxyDeathRecipient;
@@ -36177,6 +36308,7 @@
Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$MmTelFeatureListener;
Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$PhoneStateListener;
Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$SharedPreferenceProxy;
+Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$VtDataUsageProvider;
Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;
Lcom/android/internal/telephony/imsphone/ImsPhoneCommandInterface;
Lcom/android/internal/telephony/imsphone/ImsPhoneConnection$$ExternalSyntheticLambda0;
@@ -36713,6 +36845,7 @@
Lcom/android/internal/util/FastMath;
Lcom/android/internal/util/FastPrintWriter$DummyWriter;
Lcom/android/internal/util/FastPrintWriter-IA;
+Lcom/android/internal/util/FastPrintWriter;
Lcom/android/internal/util/FastXmlSerializer;
Lcom/android/internal/util/FileRotator$FileInfo;
Lcom/android/internal/util/FileRotator$Reader;
@@ -36733,6 +36866,7 @@
Lcom/android/internal/util/HexDump;
Lcom/android/internal/util/IState;
Lcom/android/internal/util/ImageUtils;
+Lcom/android/internal/util/IndentingPrintWriter;
Lcom/android/internal/util/IntPair;
Lcom/android/internal/util/JournaledFile;
Lcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda0;
@@ -36804,6 +36938,7 @@
Lcom/android/internal/util/XmlPullParserWrapper;
Lcom/android/internal/util/XmlSerializerWrapper;
Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
+Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
Lcom/android/internal/util/XmlUtils$ReadMapCallback;
Lcom/android/internal/util/XmlUtils$WriteMapCallback;
Lcom/android/internal/util/XmlUtils;
@@ -36849,6 +36984,7 @@
Lcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType$ReturnType;
Lcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;
Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
Lcom/android/internal/util/function/pooled/PooledPredicate;
Lcom/android/internal/util/function/pooled/PooledRunnable;
Lcom/android/internal/util/function/pooled/PooledSupplier$OfDouble;
@@ -37014,6 +37150,10 @@
Lcom/android/nfc/x/android/nfc/FeatureFlags;
Lcom/android/nfc/x/android/nfc/FeatureFlagsImpl;
Lcom/android/nfc/x/android/nfc/Flags;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;
+Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;
+Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+Lcom/android/org/kxml2/io/KXmlParser;
Lcom/android/os/coregraphics/HwuiStatsLog;
Lcom/android/phone/ecc/nano/CodedInputByteBufferNano;
Lcom/android/phone/ecc/nano/CodedOutputByteBufferNano$OutOfSpaceException;
@@ -37592,6 +37732,80 @@
Lgov/nist/javax/sip/stack/UDPMessageChannel$PingBackTimerTask;
Lgov/nist/javax/sip/stack/UDPMessageChannel;
Lgov/nist/javax/sip/stack/UDPMessageProcessor;
+Ljava/io/ObjectOutputStream$PutFieldImpl;
+Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+Ljava/nio/ByteBufferAsFloatBuffer;
+Ljava/nio/ByteBufferAsIntBuffer;
+Ljava/nio/ByteBufferAsLongBuffer;
+Ljava/nio/DirectByteBuffer;
+Ljava/nio/HeapByteBuffer;
+Ljava/security/MessageDigest$Delegate;
+Ljava/time/Clock$SystemClock;
+Ljava/util/ArrayDeque$DeqIterator;
+Ljava/util/ArrayList$Itr;
+Ljava/util/Arrays$ArrayItr;
+Ljava/util/Arrays$ArrayList;
+Ljava/util/Collections$3;
+Ljava/util/Collections$EmptyIterator;
+Ljava/util/Collections$EmptyList;
+Ljava/util/Collections$EmptySet;
+Ljava/util/Collections$SingletonMap;
+Ljava/util/Collections$UnmodifiableCollection$1;
+Ljava/util/Collections$UnmodifiableCollection;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;
+Ljava/util/Collections$UnmodifiableMap;
+Ljava/util/Collections$UnmodifiableRandomAccessList;
+Ljava/util/Collections$UnmodifiableSet;
+Ljava/util/Collections$UnmodifiableSortedSet;
+Ljava/util/HashMap$EntryIterator;
+Ljava/util/HashMap$EntrySet;
+Ljava/util/HashMap$KeyIterator;
+Ljava/util/HashMap$KeySet;
+Ljava/util/HashMap$Node;
+Ljava/util/HashMap$TreeNode;
+Ljava/util/HashMap$ValueIterator;
+Ljava/util/HashMap$Values;
+Ljava/util/ImmutableCollections$List12;
+Ljava/util/ImmutableCollections$ListItr;
+Ljava/util/ImmutableCollections$ListN;
+Ljava/util/ImmutableCollections$MapN;
+Ljava/util/ImmutableCollections$Set12;
+Ljava/util/ImmutableCollections$SetN;
+Ljava/util/LinkedHashMap$Entry;
+Ljava/util/LinkedHashMap$LinkedEntryIterator;
+Ljava/util/LinkedHashMap$LinkedEntrySet;
+Ljava/util/LinkedHashMap$LinkedKeyIterator;
+Ljava/util/LinkedHashMap$LinkedKeySet;
+Ljava/util/LinkedHashMap$LinkedValueIterator;
+Ljava/util/LinkedHashMap$LinkedValues;
+Ljava/util/LinkedList$ListItr;
+Ljava/util/TreeMap$EntryIterator;
+Ljava/util/TreeMap$EntrySet;
+Ljava/util/TreeMap$KeyIterator;
+Ljava/util/TreeMap$TreeMapEntry;
+Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
+Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;
+Ljava/util/concurrent/ConcurrentHashMap$MapEntry;
+Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
+Ljava/util/concurrent/ConcurrentHashMap$ValuesView;
+Ljava/util/concurrent/ConcurrentLinkedQueue$Itr;
+Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+Ljava/util/concurrent/Executors$AutoShutdownDelegatedExecutorService;
+Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
+Ljava/util/function/DoubleUnaryOperator$$ExternalSyntheticLambda2;
+Ljava/util/stream/DistinctOps$1;
+Ljava/util/stream/IntPipeline$10;
+Ljava/util/stream/IntPipeline$1;
+Ljava/util/stream/IntPipeline$4;
+Ljava/util/stream/IntPipeline$Head;
+Ljava/util/stream/ReferencePipeline$2;
+Ljava/util/stream/ReferencePipeline$3;
+Ljava/util/stream/ReferencePipeline$4;
+Ljava/util/stream/ReferencePipeline$Head;
+Ljava/util/stream/SortedOps$OfRef;
Ljavax/microedition/khronos/egl/EGL10;
Ljavax/microedition/khronos/egl/EGL11;
Ljavax/microedition/khronos/egl/EGL;
@@ -37706,6 +37920,8 @@
Ljavax/sip/message/MessageFactory;
Ljavax/sip/message/Request;
Ljavax/sip/message/Response;
+Llibcore/util/NativeAllocationRegistry$CleanerRunner;
+Llibcore/util/ZoneInfo;
Lorg/apache/http/conn/ConnectTimeoutException;
Lorg/apache/http/conn/scheme/HostNameResolver;
Lorg/apache/http/conn/scheme/LayeredSocketFactory;
@@ -37721,6 +37937,7 @@
Lorg/apache/http/params/CoreConnectionPNames;
Lorg/apache/http/params/HttpConnectionParams;
Lorg/apache/http/params/HttpParams;
+Lorg/ccil/cowan/tagsoup/AttributesImpl;
Lorg/ccil/cowan/tagsoup/AutoDetector;
Lorg/ccil/cowan/tagsoup/CommandLine;
Lorg/ccil/cowan/tagsoup/Element;
@@ -37742,6 +37959,7 @@
Lorg/ccil/cowan/tagsoup/jaxp/SAX1ParserAdapter;
Lorg/ccil/cowan/tagsoup/jaxp/SAXFactoryImpl;
Lorg/ccil/cowan/tagsoup/jaxp/SAXParserImpl;
+Lsun/nio/ch/FileChannelImpl;
[Landroid/accounts/Account;
[Landroid/accounts/AuthenticatorDescription;
[Landroid/animation/Animator;
diff --git a/boot/preloaded-classes b/boot/preloaded-classes
index 47abe6b..f87828e 100644
--- a/boot/preloaded-classes
+++ b/boot/preloaded-classes
@@ -59,6 +59,7 @@
android.accounts.AccountManager$AmsTask$Response
android.accounts.AccountManager$AmsTask
android.accounts.AccountManager$BaseFutureTask$1
+android.accounts.AccountManager$BaseFutureTask$Response
android.accounts.AccountManager$BaseFutureTask
android.accounts.AccountManager$Future2Task$1
android.accounts.AccountManager$Future2Task
@@ -73,6 +74,7 @@
android.accounts.AuthenticatorDescription-IA
android.accounts.AuthenticatorDescription
android.accounts.AuthenticatorException
+android.accounts.IAccountAuthenticator$Stub$Proxy
android.accounts.IAccountAuthenticator$Stub
android.accounts.IAccountAuthenticator
android.accounts.IAccountAuthenticatorResponse$Stub$Proxy
@@ -81,6 +83,7 @@
android.accounts.IAccountManager$Stub$Proxy
android.accounts.IAccountManager$Stub
android.accounts.IAccountManager
+android.accounts.IAccountManagerResponse$Stub$Proxy
android.accounts.IAccountManagerResponse$Stub
android.accounts.IAccountManagerResponse
android.accounts.NetworkErrorException
@@ -93,6 +96,8 @@
android.aconfig.nano.Aconfig$parsed_flag
android.aconfig.nano.Aconfig$parsed_flags
android.aconfig.nano.Aconfig$tracepoint
+android.adpf.FeatureFlags
+android.adpf.FeatureFlagsImpl
android.adpf.Flags
android.animation.AnimationHandler$$ExternalSyntheticLambda0
android.animation.AnimationHandler$1
@@ -220,6 +225,7 @@
android.app.ActivityManager$$ExternalSyntheticLambda1
android.app.ActivityManager$$ExternalSyntheticLambda2
android.app.ActivityManager$1
+android.app.ActivityManager$2
android.app.ActivityManager$3
android.app.ActivityManager$4
android.app.ActivityManager$AppTask
@@ -270,11 +276,14 @@
android.app.ActivityThread$3
android.app.ActivityThread$4
android.app.ActivityThread$5
+android.app.ActivityThread$6
android.app.ActivityThread$ActivityClientRecord$1
android.app.ActivityThread$ActivityClientRecord
+android.app.ActivityThread$AndroidOs
android.app.ActivityThread$AppBindData
android.app.ActivityThread$ApplicationThread$$ExternalSyntheticLambda2
android.app.ActivityThread$ApplicationThread$1
+android.app.ActivityThread$ApplicationThread
android.app.ActivityThread$BindServiceData
android.app.ActivityThread$ContextCleanupInfo
android.app.ActivityThread$CreateBackupAgentData
@@ -304,6 +313,7 @@
android.app.ActivityTransitionState
android.app.AlarmManager$AlarmClockInfo$1
android.app.AlarmManager$AlarmClockInfo
+android.app.AlarmManager$ListenerWrapper
android.app.AlarmManager$OnAlarmListener
android.app.AlarmManager
android.app.AlertDialog$Builder
@@ -324,6 +334,7 @@
android.app.AppOpsManager$$ExternalSyntheticLambda8
android.app.AppOpsManager$1
android.app.AppOpsManager$2
+android.app.AppOpsManager$3
android.app.AppOpsManager$4
android.app.AppOpsManager$AppOpsCollector
android.app.AppOpsManager$AttributedHistoricalOps$1
@@ -367,6 +378,7 @@
android.app.AppOpsManagerInternal
android.app.Application$ActivityLifecycleCallbacks
android.app.Application$OnProvideAssistDataListener
+android.app.Application
android.app.ApplicationErrorReport$1
android.app.ApplicationErrorReport$AnrInfo
android.app.ApplicationErrorReport$BatteryInfo
@@ -392,6 +404,7 @@
android.app.ApplicationPackageManager$MoveCallbackDelegate
android.app.ApplicationPackageManager$ResourceName
android.app.ApplicationPackageManager-IA
+android.app.ApplicationPackageManager
android.app.AsyncNotedAppOp$1
android.app.AsyncNotedAppOp
android.app.AutomaticZenRule$1
@@ -420,6 +433,7 @@
android.app.ContentProviderHolder
android.app.ContextImpl$1
android.app.ContextImpl$ApplicationContentResolver
+android.app.ContextImpl
android.app.DexLoadReporter
android.app.Dialog$$ExternalSyntheticLambda0
android.app.Dialog$$ExternalSyntheticLambda1
@@ -505,6 +519,7 @@
android.app.IApplicationStartInfoCompleteListener$Stub$Proxy
android.app.IApplicationStartInfoCompleteListener$Stub
android.app.IApplicationStartInfoCompleteListener
+android.app.IApplicationThread$Stub$Proxy
android.app.IApplicationThread$Stub
android.app.IApplicationThread
android.app.IAssistDataReceiver$Stub$Proxy
@@ -519,6 +534,7 @@
android.app.IGameManagerService$Stub$Proxy
android.app.IGameManagerService$Stub
android.app.IGameManagerService
+android.app.IInstantAppResolver$Stub$Proxy
android.app.IInstantAppResolver$Stub
android.app.IInstantAppResolver
android.app.IInstrumentationWatcher$Stub$Proxy
@@ -547,11 +563,13 @@
android.app.ISearchManager$Stub$Proxy
android.app.ISearchManager$Stub
android.app.ISearchManager
+android.app.IServiceConnection$Stub$Proxy
android.app.IServiceConnection$Stub
android.app.IServiceConnection
android.app.IStopUserCallback$Stub$Proxy
android.app.IStopUserCallback$Stub
android.app.IStopUserCallback
+android.app.ITaskStackListener$Stub$Proxy
android.app.ITaskStackListener$Stub
android.app.ITaskStackListener
android.app.ITransientNotification$Stub$Proxy
@@ -571,6 +589,7 @@
android.app.IUidFrozenStateChangedCallback$Stub$Proxy
android.app.IUidFrozenStateChangedCallback$Stub
android.app.IUidFrozenStateChangedCallback
+android.app.IUidObserver$Stub$Proxy
android.app.IUidObserver$Stub
android.app.IUidObserver
android.app.IUnsafeIntentStrictModeCallback$Stub
@@ -599,6 +618,7 @@
android.app.IntentReceiverLeaked
android.app.IntentService$ServiceHandler
android.app.IntentService
+android.app.JobSchedulerImpl
android.app.KeyguardManager$1
android.app.KeyguardManager$2
android.app.KeyguardManager$KeyguardDismissCallback
@@ -606,9 +626,11 @@
android.app.ListActivity
android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0
android.app.LoadedApk$ReceiverDispatcher$Args
+android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
android.app.LoadedApk$ReceiverDispatcher
android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
android.app.LoadedApk$ServiceDispatcher$DeathMonitor
+android.app.LoadedApk$ServiceDispatcher$InnerConnection
android.app.LoadedApk$ServiceDispatcher$RunConnection
android.app.LoadedApk$ServiceDispatcher
android.app.LoadedApk$SplitDependencyLoaderImpl
@@ -665,6 +687,7 @@
android.app.NotificationManager$NotificationKey
android.app.NotificationManager$Policy$1
android.app.NotificationManager$Policy
+android.app.NotificationManager$RateLimiter
android.app.NotificationManager
android.app.OnActivityPausedListener
android.app.PackageInstallObserver$1
@@ -675,6 +698,7 @@
android.app.PendingIntent$1
android.app.PendingIntent$CancelListener
android.app.PendingIntent$CanceledException
+android.app.PendingIntent$FinishedDispatcher
android.app.PendingIntent$OnFinished
android.app.PendingIntent$OnMarshaledListener
android.app.PendingIntent
@@ -760,6 +784,7 @@
android.app.SharedPreferencesImpl$MemoryCommitResult
android.app.SharedPreferencesImpl$SharedPreferencesThreadFactory
android.app.SharedPreferencesImpl-IA
+android.app.SharedPreferencesImpl
android.app.StackTrace
android.app.StatusBarManager
android.app.SyncNotedAppOp$1
@@ -1161,6 +1186,7 @@
android.app.job.JobService$1
android.app.job.JobService
android.app.job.JobServiceEngine$JobHandler
+android.app.job.JobServiceEngine$JobInterface
android.app.job.JobServiceEngine
android.app.job.JobWorkItem$1
android.app.job.JobWorkItem
@@ -1241,7 +1267,10 @@
android.app.servertransaction.TopResumedActivityChangeItem
android.app.servertransaction.TransactionExecutor
android.app.servertransaction.TransactionExecutorHelper
+android.app.servertransaction.WindowStateInsetsControlChangeItem$1
+android.app.servertransaction.WindowStateInsetsControlChangeItem
android.app.servertransaction.WindowStateTransactionItem$TransactionListener
+android.app.servertransaction.WindowStateTransactionItem
android.app.slice.ISliceManager$Stub$Proxy
android.app.slice.ISliceManager$Stub
android.app.slice.ISliceManager
@@ -1463,6 +1492,7 @@
android.content.ComponentName$WithComponentName
android.content.ComponentName
android.content.ContentCaptureOptions$1
+android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda0
android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda1
android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda2
android.content.ContentCaptureOptions$ContentProtectionOptions
@@ -1484,10 +1514,12 @@
android.content.ContentProviderOperation$Builder
android.content.ContentProviderOperation-IA
android.content.ContentProviderOperation
+android.content.ContentProviderProxy
android.content.ContentProviderResult$1
android.content.ContentProviderResult
android.content.ContentResolver$1
android.content.ContentResolver$2
+android.content.ContentResolver$CursorWrapperInner
android.content.ContentResolver$OpenResourceIdResult
android.content.ContentResolver$ParcelFileDescriptorInner
android.content.ContentResolver$ResultListener
@@ -1518,6 +1550,7 @@
android.content.IContentService$Stub$Proxy
android.content.IContentService$Stub
android.content.IContentService
+android.content.IIntentReceiver$Stub$Proxy
android.content.IIntentReceiver$Stub
android.content.IIntentReceiver
android.content.IIntentSender$Stub$Proxy
@@ -1691,6 +1724,7 @@
android.content.pm.ILauncherApps$Stub$Proxy
android.content.pm.ILauncherApps$Stub
android.content.pm.ILauncherApps
+android.content.pm.IOnAppsChangedListener$Stub$Proxy
android.content.pm.IOnAppsChangedListener$Stub
android.content.pm.IOnAppsChangedListener
android.content.pm.IOnChecksumsReadyListener$Stub$Proxy
@@ -2036,6 +2070,7 @@
android.content.res.ThemedResourceCache
android.content.res.TypedArray
android.content.res.Validator
+android.content.res.XmlBlock$Parser
android.content.res.XmlBlock
android.content.res.XmlResourceParser
android.content.res.loader.AssetsProvider
@@ -2069,6 +2104,7 @@
android.database.ContentObservable
android.database.ContentObserver$$ExternalSyntheticLambda0
android.database.ContentObserver$$ExternalSyntheticLambda1
+android.database.ContentObserver$Transport
android.database.ContentObserver
android.database.CrossProcessCursor
android.database.CrossProcessCursorWrapper
@@ -2087,6 +2123,7 @@
android.database.DatabaseUtils
android.database.DefaultDatabaseErrorHandler
android.database.IBulkCursor
+android.database.IContentObserver$Stub$Proxy
android.database.IContentObserver$Stub
android.database.IContentObserver
android.database.MatrixCursor$RowBuilder
@@ -2123,6 +2160,7 @@
android.database.sqlite.SQLiteConnectionPool-IA
android.database.sqlite.SQLiteConnectionPool
android.database.sqlite.SQLiteConstraintException
+android.database.sqlite.SQLiteCursor
android.database.sqlite.SQLiteCursorDriver
android.database.sqlite.SQLiteCustomFunction
android.database.sqlite.SQLiteDatabase$$ExternalSyntheticLambda0
@@ -2149,6 +2187,7 @@
android.database.sqlite.SQLiteFullException
android.database.sqlite.SQLiteGlobal
android.database.sqlite.SQLiteMisuseException
+android.database.sqlite.SQLiteOpenHelper$$ExternalSyntheticLambda0
android.database.sqlite.SQLiteOpenHelper
android.database.sqlite.SQLiteOutOfMemoryException
android.database.sqlite.SQLiteProgram
@@ -2221,12 +2260,16 @@
android.graphics.ColorSpace$Lab
android.graphics.ColorSpace$Model
android.graphics.ColorSpace$Named
+android.graphics.ColorSpace$OkLab
android.graphics.ColorSpace$RenderIntent
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda0
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda1
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda2
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda3
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda4
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda5
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda6
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda9
android.graphics.ColorSpace$Rgb$Native
android.graphics.ColorSpace$Rgb$NoImagePreloadHolder
android.graphics.ColorSpace$Rgb$TransferParameters
@@ -2532,6 +2575,7 @@
android.graphics.fonts.Font
android.graphics.fonts.FontCustomizationParser$Result
android.graphics.fonts.FontCustomizationParser
+android.graphics.fonts.FontFamily$Builder$NoImagePreloadHolder
android.graphics.fonts.FontFamily$Builder
android.graphics.fonts.FontFamily
android.graphics.fonts.FontFileUtil
@@ -2622,6 +2666,7 @@
android.hardware.SystemSensorManager$InjectEventQueue
android.hardware.SystemSensorManager$SensorEventQueue
android.hardware.SystemSensorManager$TriggerEventQueue
+android.hardware.SystemSensorManager
android.hardware.TriggerEvent
android.hardware.TriggerEventListener
android.hardware.biometrics.BiometricAuthenticator$AuthenticationCallback
@@ -2906,6 +2951,7 @@
android.hardware.display.DisplayManagerGlobal$1
android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0
android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
+android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
android.hardware.display.DisplayManagerGlobal
android.hardware.display.DisplayManagerInternal$DisplayPowerCallbacks
android.hardware.display.DisplayManagerInternal$DisplayPowerRequest
@@ -2922,6 +2968,7 @@
android.hardware.display.IDisplayManager$Stub$Proxy
android.hardware.display.IDisplayManager$Stub
android.hardware.display.IDisplayManager
+android.hardware.display.IDisplayManagerCallback$Stub$Proxy
android.hardware.display.IDisplayManagerCallback$Stub
android.hardware.display.IDisplayManagerCallback
android.hardware.display.IVirtualDisplayCallback$Stub$Proxy
@@ -2996,6 +3043,7 @@
android.hardware.hdmi.HdmiRecordSources$RecordSource
android.hardware.input.HostUsiVersion$1
android.hardware.input.HostUsiVersion
+android.hardware.input.IInputDevicesChangedListener$Stub$Proxy
android.hardware.input.IInputDevicesChangedListener$Stub
android.hardware.input.IInputDevicesChangedListener
android.hardware.input.IInputManager$Stub$Proxy
@@ -3011,6 +3059,7 @@
android.hardware.input.InputManager$InputDeviceListener
android.hardware.input.InputManager
android.hardware.input.InputManagerGlobal$InputDeviceListenerDelegate
+android.hardware.input.InputManagerGlobal$InputDevicesChangedListener
android.hardware.input.InputManagerGlobal$OnTabletModeChangedListenerDelegate
android.hardware.input.InputManagerGlobal-IA
android.hardware.input.InputManagerGlobal
@@ -4604,6 +4653,7 @@
android.icu.text.ReplaceableString
android.icu.text.RuleBasedBreakIterator$BreakCache
android.icu.text.RuleBasedBreakIterator$DictionaryCache
+android.icu.text.RuleBasedBreakIterator
android.icu.text.RuleBasedCollator$CollationBuffer
android.icu.text.RuleBasedCollator$CollationKeyByteSink
android.icu.text.RuleBasedCollator$FCDUTF16NFDIterator
@@ -4951,8 +5001,13 @@
android.internal.aconfig.storage.AconfigStorageException
android.internal.aconfig.storage.ByteBufferReader
android.internal.aconfig.storage.FileType
+android.internal.aconfig.storage.FlagTable$Header
+android.internal.aconfig.storage.FlagTable
+android.internal.aconfig.storage.FlagValueList$Header
+android.internal.aconfig.storage.FlagValueList
android.internal.aconfig.storage.PackageTable$Header
android.internal.aconfig.storage.PackageTable
+android.internal.aconfig.storage.TableUtils$StorageFilesBundle
android.internal.framework.protobuf.nano.InvalidProtocolBufferNanoException
android.internal.framework.protobuf.nano.MessageNano
android.internal.hidl.base.V1_0.DebugInfo
@@ -4979,6 +5034,7 @@
android.internal.telephony.sysprop.TelephonyProperties$$ExternalSyntheticLambda8
android.internal.telephony.sysprop.TelephonyProperties$$ExternalSyntheticLambda9
android.internal.telephony.sysprop.TelephonyProperties
+android.location.CountryDetector
android.location.Geofence$1
android.location.Geofence
android.location.IFusedGeofenceHardware$Stub$Proxy
@@ -4987,11 +5043,14 @@
android.location.IGpsGeofenceHardware$Stub$Proxy
android.location.IGpsGeofenceHardware$Stub
android.location.IGpsGeofenceHardware
+android.location.ILocationManager$Stub
+android.location.ILocationManager
android.location.Location$$ExternalSyntheticLambda0
android.location.Location$1
android.location.Location$BearingDistanceCache
android.location.Location-IA
android.location.Location
+android.location.LocationManager
android.location.LocationTime$1
android.location.LocationTime
android.location.flags.FeatureFlags
@@ -5023,6 +5082,7 @@
android.media.AudioGainConfig
android.media.AudioHandle
android.media.AudioManager$1
+android.media.AudioManager$2
android.media.AudioManager$3
android.media.AudioManager$4
android.media.AudioManager$AudioPlaybackCallback
@@ -5156,6 +5216,7 @@
android.media.IMediaRouter2
android.media.IMediaRouter2Manager$Stub
android.media.IMediaRouter2Manager
+android.media.IMediaRouterClient$Stub$Proxy
android.media.IMediaRouterClient$Stub
android.media.IMediaRouterClient
android.media.IMediaRouterService$Stub$Proxy
@@ -5318,6 +5379,7 @@
android.media.MediaRouter$Static$Client$$ExternalSyntheticLambda0
android.media.MediaRouter$Static$Client$$ExternalSyntheticLambda1
android.media.MediaRouter$Static$Client$1
+android.media.MediaRouter$Static$Client
android.media.MediaRouter$Static
android.media.MediaRouter$UserRouteInfo$SessionVolumeProvider
android.media.MediaRouter$UserRouteInfo
@@ -5526,6 +5588,7 @@
android.media.quality.MediaQualityManager
android.media.quality.PictureProfileHandle$1
android.media.quality.PictureProfileHandle
+android.media.session.IActiveSessionsListener$Stub$Proxy
android.media.session.IActiveSessionsListener$Stub
android.media.session.IActiveSessionsListener
android.media.session.IOnMediaKeyEventDispatchedListener$Stub$Proxy
@@ -5552,6 +5615,7 @@
android.media.session.ISessionController$Stub$Proxy
android.media.session.ISessionController$Stub
android.media.session.ISessionController
+android.media.session.ISessionControllerCallback$Stub$Proxy
android.media.session.ISessionControllerCallback$Stub
android.media.session.ISessionControllerCallback
android.media.session.ISessionManager$Stub$Proxy
@@ -5588,6 +5652,7 @@
android.media.session.MediaSessionManager$RemoteUserInfo
android.media.session.MediaSessionManager$Session2TokensChangedWrapper
android.media.session.MediaSessionManager$SessionsChangedWrapper$1$$ExternalSyntheticLambda0
+android.media.session.MediaSessionManager$SessionsChangedWrapper$1
android.media.session.MediaSessionManager$SessionsChangedWrapper
android.media.session.MediaSessionManager-IA
android.media.session.MediaSessionManager
@@ -5679,6 +5744,8 @@
android.net.LocalSocket
android.net.LocalSocketAddress$Namespace
android.net.LocalSocketAddress
+android.net.LocalSocketImpl$SocketInputStream
+android.net.LocalSocketImpl$SocketOutputStream
android.net.LocalSocketImpl
android.net.MatchAllNetworkSpecifier$1
android.net.MatchAllNetworkSpecifier
@@ -5727,11 +5794,15 @@
android.net.Uri$AbstractHierarchicalUri
android.net.Uri$AbstractPart
android.net.Uri$Builder
+android.net.Uri$HierarchicalUri
android.net.Uri$NotCachedHolder
+android.net.Uri$OpaqueUri
android.net.Uri$Part$EmptyPart
android.net.Uri$Part
android.net.Uri$PathPart
+android.net.Uri$PathSegments
android.net.Uri$PathSegmentsBuilder
+android.net.Uri$StringUri
android.net.Uri-IA
android.net.Uri
android.net.UriCodec
@@ -5981,7 +6052,6 @@
android.nfc.NfcOemExtension$$ExternalSyntheticLambda9
android.nfc.NfcOemExtension$Callback
android.nfc.NfcOemExtension$NfcOemExtensionCallback
-android.nfc.NfcOemExtension-IA
android.nfc.NfcOemExtension
android.nfc.NfcRoutingTableEntry
android.nfc.NfcServiceManager$ServiceRegisterer
@@ -6134,6 +6204,7 @@
android.os.BinderProxy$BinderProxyMapSizeException
android.os.BinderProxy$NoImagePreloadHolder
android.os.BinderProxy$ProxyMap
+android.os.BinderProxy
android.os.BluetoothServiceManager$ServiceRegisterer
android.os.BluetoothServiceManager
android.os.BugreportManager
@@ -6208,6 +6279,7 @@
android.os.Handler$MessengerImpl
android.os.Handler-IA
android.os.Handler
+android.os.HandlerExecutor
android.os.HandlerThread
android.os.HardwarePropertiesManager
android.os.HidlMemory
@@ -6292,6 +6364,7 @@
android.os.IRecoverySystemProgressListener$Stub$Proxy
android.os.IRecoverySystemProgressListener$Stub
android.os.IRecoverySystemProgressListener
+android.os.IRemoteCallback$Stub$Proxy
android.os.IRemoteCallback$Stub
android.os.IRemoteCallback
android.os.ISchedulingPolicyService$Stub
@@ -6365,6 +6438,7 @@
android.os.LimitExceededException
android.os.LocaleList$1
android.os.LocaleList
+android.os.Looper$NoImagePreloadHolder
android.os.Looper$Observer
android.os.Looper
android.os.MemoryFile
@@ -6403,7 +6477,7 @@
android.os.PackageTagsList$1
android.os.PackageTagsList
android.os.Parcel$1
-android.os.Parcel$ClassLoaderProvider
+android.os.Parcel$2
android.os.Parcel$LazyValue
android.os.Parcel$ReadWriteHelper
android.os.Parcel$SquashReadHelper
@@ -6412,6 +6486,7 @@
android.os.ParcelDuration
android.os.ParcelFileDescriptor$1
android.os.ParcelFileDescriptor$2
+android.os.ParcelFileDescriptor$AutoCloseInputStream
android.os.ParcelFileDescriptor$AutoCloseOutputStream
android.os.ParcelFileDescriptor$OnCloseListener
android.os.ParcelFileDescriptor$Status
@@ -6531,12 +6606,14 @@
android.os.StrictMode$2
android.os.StrictMode$3
android.os.StrictMode$4
+android.os.StrictMode$5
android.os.StrictMode$6
android.os.StrictMode$7
android.os.StrictMode$8
android.os.StrictMode$9
android.os.StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda0
android.os.StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1
+android.os.StrictMode$AndroidBlockGuardPolicy
android.os.StrictMode$AndroidCloseGuardReporter
android.os.StrictMode$InstanceTracker
android.os.StrictMode$OnThreadViolationListener
@@ -7009,6 +7086,7 @@
android.security.KeyStoreSecurityLevel
android.security.NetworkSecurityPolicy
android.security.Scrypt
+android.security.advancedprotection.AdvancedProtectionManager
android.security.attestationverification.AttestationVerificationManager
android.security.authenticationpolicy.AuthenticationPolicyManager
android.security.intrusiondetection.IntrusionDetectionManager
@@ -7312,6 +7390,7 @@
android.service.notification.Condition$1
android.service.notification.Condition
android.service.notification.ConditionProviderService$H
+android.service.notification.ConditionProviderService$Provider
android.service.notification.ConditionProviderService-IA
android.service.notification.ConditionProviderService
android.service.notification.IConditionProvider$Stub
@@ -7327,6 +7406,7 @@
android.service.notification.NotificationListenerFilter$1
android.service.notification.NotificationListenerFilter
android.service.notification.NotificationListenerService$MyHandler
+android.service.notification.NotificationListenerService$NotificationListenerWrapper
android.service.notification.NotificationListenerService$Ranking
android.service.notification.NotificationListenerService$RankingMap$1
android.service.notification.NotificationListenerService$RankingMap
@@ -7341,6 +7421,7 @@
android.service.notification.ScheduleCalendar
android.service.notification.SnoozeCriterion$1
android.service.notification.SnoozeCriterion
+android.service.notification.StatusBarNotification$$ExternalSyntheticLambda0
android.service.notification.StatusBarNotification$1
android.service.notification.StatusBarNotification
android.service.notification.ZenDeviceEffects$1
@@ -7382,6 +7463,7 @@
android.service.storage.IExternalStorageService$Stub$Proxy
android.service.storage.IExternalStorageService$Stub
android.service.storage.IExternalStorageService
+android.service.textclassifier.ITextClassifierCallback$Stub$Proxy
android.service.textclassifier.ITextClassifierCallback$Stub
android.service.textclassifier.ITextClassifierCallback
android.service.textclassifier.ITextClassifierService$Stub$Proxy
@@ -7516,6 +7598,7 @@
android.system.keystore2.KeyParameters
android.system.keystore2.OperationChallenge$1
android.system.keystore2.OperationChallenge
+android.system.suspend.internal.ISuspendControlServiceInternal$Stub$Proxy
android.system.suspend.internal.ISuspendControlServiceInternal$Stub
android.system.suspend.internal.ISuspendControlServiceInternal
android.system.suspend.internal.WakeLockInfo$1
@@ -7658,6 +7741,7 @@
android.telephony.CellIdentityGsm$1
android.telephony.CellIdentityGsm
android.telephony.CellIdentityLte$1
+android.telephony.CellIdentityLte
android.telephony.CellIdentityNr$1
android.telephony.CellIdentityNr
android.telephony.CellIdentityTdscdma$1
@@ -7685,6 +7769,7 @@
android.telephony.CellSignalStrengthCdma
android.telephony.CellSignalStrengthGsm$1
android.telephony.CellSignalStrengthGsm-IA
+android.telephony.CellSignalStrengthGsm
android.telephony.CellSignalStrengthLte$1
android.telephony.CellSignalStrengthLte-IA
android.telephony.CellSignalStrengthLte
@@ -7696,6 +7781,7 @@
android.telephony.CellSignalStrengthTdscdma
android.telephony.CellSignalStrengthWcdma$1
android.telephony.CellSignalStrengthWcdma-IA
+android.telephony.CellSignalStrengthWcdma
android.telephony.CellularIdentifierDisclosure
android.telephony.ClientRequestStats$1
android.telephony.ClientRequestStats
@@ -7800,6 +7886,7 @@
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda62
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda6
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda9
+android.telephony.PhoneStateListener$IPhoneStateListenerStub
android.telephony.PhoneStateListener
android.telephony.PhysicalChannelConfig$1
android.telephony.PhysicalChannelConfig$Builder
@@ -7906,6 +7993,7 @@
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda52
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda63
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda65
+android.telephony.TelephonyCallback$IPhoneStateListenerStub
android.telephony.TelephonyCallback$ImsCallDisconnectCauseListener
android.telephony.TelephonyCallback$LinkCapacityEstimateChangedListener
android.telephony.TelephonyCallback$MediaQualityStatusChangedListener
@@ -7967,7 +8055,9 @@
android.telephony.TelephonyRegistryManager$$ExternalSyntheticLambda1
android.telephony.TelephonyRegistryManager$$ExternalSyntheticLambda2
android.telephony.TelephonyRegistryManager$1$$ExternalSyntheticLambda0
+android.telephony.TelephonyRegistryManager$1
android.telephony.TelephonyRegistryManager$2
+android.telephony.TelephonyRegistryManager$3
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda0
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda1
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda2
@@ -8347,6 +8437,7 @@
android.text.SpanWatcher
android.text.Spannable$Factory
android.text.Spannable
+android.text.SpannableString
android.text.SpannableStringBuilder
android.text.SpannableStringInternal
android.text.Spanned
@@ -8508,9 +8599,11 @@
android.tracing.FeatureFlags
android.tracing.FeatureFlagsImpl
android.tracing.Flags
+android.tracing.inputmethod.InputMethodDataSource
android.tracing.perfetto.CreateIncrementalStateArgs
android.tracing.perfetto.CreateTlsStateArgs
android.tracing.perfetto.DataSource
+android.tracing.perfetto.DataSourceInstance
android.tracing.perfetto.DataSourceParams$Builder
android.tracing.perfetto.DataSourceParams
android.tracing.perfetto.FlushCallbackArguments
@@ -8595,6 +8688,7 @@
android.util.AndroidException
android.util.AndroidRuntimeException
android.util.ArrayMap$1
+android.util.ArrayMap
android.util.ArraySet$1
android.util.ArraySet
android.util.AtomicFile
@@ -8632,6 +8726,7 @@
android.util.FloatProperty
android.util.Half
android.util.IconDrawableFactory
+android.util.IndentingPrintWriter
android.util.IntArray
android.util.IntProperty
android.util.JsonReader$1
@@ -8663,6 +8758,11 @@
android.util.LongSparseLongArray
android.util.LruCache
android.util.MalformedJsonException
+android.util.MapCollections$ArrayIterator
+android.util.MapCollections$EntrySet
+android.util.MapCollections$KeySet
+android.util.MapCollections$MapIterator
+android.util.MapCollections$ValuesCollection
android.util.MapCollections
android.util.MathUtils
android.util.MemoryIntArray$1
@@ -8692,6 +8792,7 @@
android.util.Rational
android.util.RecurrenceRule$1
android.util.RecurrenceRule$NonrecurringIterator
+android.util.RecurrenceRule$RecurringIterator
android.util.RecurrenceRule
android.util.ReflectiveProperty
android.util.RotationUtils
@@ -8709,6 +8810,7 @@
android.util.SparseLongArray
android.util.SparseSetArray
android.util.Spline$LinearSpline
+android.util.Spline$MonotoneCubicSpline
android.util.Spline
android.util.StateSet
android.util.StringBuilderPrinter
@@ -8890,8 +8992,10 @@
android.view.IDisplayFoldListener$Stub$Proxy
android.view.IDisplayFoldListener$Stub
android.view.IDisplayFoldListener
+android.view.IDisplayWindowInsetsController$Stub$Proxy
android.view.IDisplayWindowInsetsController$Stub
android.view.IDisplayWindowInsetsController
+android.view.IDisplayWindowListener$Stub$Proxy
android.view.IDisplayWindowListener$Stub
android.view.IDisplayWindowListener
android.view.IDockedStackListener$Stub$Proxy
@@ -8934,6 +9038,7 @@
android.view.ISurfaceControlViewHostParent
android.view.ISystemGestureExclusionListener$Stub
android.view.ISystemGestureExclusionListener
+android.view.IWallpaperVisibilityListener$Stub$Proxy
android.view.IWallpaperVisibilityListener$Stub
android.view.IWallpaperVisibilityListener
android.view.IWindow$Stub
@@ -9132,7 +9237,9 @@
android.view.SurfaceControl$RefreshRateRange
android.view.SurfaceControl$RefreshRateRanges
android.view.SurfaceControl$StaticDisplayInfo
+android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda0
android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda1
+android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda3
android.view.SurfaceControl$Transaction$1
android.view.SurfaceControl$Transaction$2
android.view.SurfaceControl$Transaction
@@ -9250,6 +9357,7 @@
android.view.View$ScrollabilityCache
android.view.View$SendAccessibilityEventThrottle
android.view.View$SendViewScrolledAccessibilityEvent
+android.view.View$SensitiveAutofillHintsHelper
android.view.View$TintInfo
android.view.View$TooltipInfo
android.view.View$TransformationInfo
@@ -9314,6 +9422,7 @@
android.view.ViewRootImpl$$ExternalSyntheticLambda20
android.view.ViewRootImpl$$ExternalSyntheticLambda21
android.view.ViewRootImpl$$ExternalSyntheticLambda22
+android.view.ViewRootImpl$$ExternalSyntheticLambda23
android.view.ViewRootImpl$$ExternalSyntheticLambda2
android.view.ViewRootImpl$$ExternalSyntheticLambda3
android.view.ViewRootImpl$$ExternalSyntheticLambda4
@@ -9368,6 +9477,7 @@
android.view.ViewRootImpl$ViewPostImeInputStage
android.view.ViewRootImpl$ViewPreImeInputStage
android.view.ViewRootImpl$ViewRootHandler
+android.view.ViewRootImpl$W
android.view.ViewRootImpl$WindowInputEventReceiver
android.view.ViewRootImpl-IA
android.view.ViewRootImpl
@@ -9436,6 +9546,7 @@
android.view.WindowManagerGlobal$TrustedPresentationListener
android.view.WindowManagerGlobal-IA
android.view.WindowManagerGlobal
+android.view.WindowManagerImpl
android.view.WindowManagerPolicyConstants$PointerEventListener
android.view.WindowManagerPolicyConstants
android.view.WindowMetrics
@@ -9453,6 +9564,7 @@
android.view.accessibility.AccessibilityManager$$ExternalSyntheticLambda1
android.view.accessibility.AccessibilityManager$$ExternalSyntheticLambda3
android.view.accessibility.AccessibilityManager$1$$ExternalSyntheticLambda0
+android.view.accessibility.AccessibilityManager$1
android.view.accessibility.AccessibilityManager$AccessibilityPolicy
android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener
android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
@@ -9496,6 +9608,7 @@
android.view.accessibility.IAccessibilityManager$Stub$Proxy
android.view.accessibility.IAccessibilityManager$Stub
android.view.accessibility.IAccessibilityManager
+android.view.accessibility.IAccessibilityManagerClient$Stub$Proxy
android.view.accessibility.IAccessibilityManagerClient$Stub
android.view.accessibility.IAccessibilityManagerClient
android.view.accessibility.WeakSparseArray$WeakReferenceWithId
@@ -9677,6 +9790,7 @@
android.view.inputmethod.IInputMethodSessionInvoker$$ExternalSyntheticLambda8
android.view.inputmethod.IInputMethodSessionInvoker
android.view.inputmethod.ImeTracker$1$$ExternalSyntheticLambda0
+android.view.inputmethod.ImeTracker$1
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda0
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda1
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda2
@@ -10226,6 +10340,7 @@
android.widget.RemoteViews$2
android.widget.RemoteViews$Action
android.widget.RemoteViews$ActionException
+android.widget.RemoteViews$ApplicationInfoCache$$ExternalSyntheticLambda0
android.widget.RemoteViews$ApplicationInfoCache
android.widget.RemoteViews$AsyncApplyTask
android.widget.RemoteViews$AttributeReflectionAction
@@ -10413,6 +10528,7 @@
android.window.BackProgressAnimator$1
android.window.BackProgressAnimator$ProgressCallback
android.window.BackProgressAnimator
+android.window.BackTouchTracker$TouchTrackerState
android.window.BackTouchTracker
android.window.ClientWindowFrames$1
android.window.ClientWindowFrames-IA
@@ -10479,6 +10595,7 @@
android.window.ISurfaceSyncGroup
android.window.ISurfaceSyncGroupCompletedListener$Stub
android.window.ISurfaceSyncGroupCompletedListener
+android.window.ITaskFragmentOrganizer$Stub$Proxy
android.window.ITaskFragmentOrganizer$Stub
android.window.ITaskFragmentOrganizer
android.window.ITaskFragmentOrganizerController$Stub
@@ -10816,6 +10933,7 @@
com.android.icu.charset.CharsetDecoderICU
com.android.icu.charset.CharsetEncoderICU
com.android.icu.charset.CharsetFactory
+com.android.icu.charset.CharsetICU
com.android.icu.charset.NativeConverter
com.android.icu.text.CompatibleDecimalFormatFactory
com.android.icu.text.DateSorterBridge
@@ -11241,6 +11359,7 @@
com.android.internal.app.AlertController$RecycleListView
com.android.internal.app.AlertController
com.android.internal.app.AssistUtils
+com.android.internal.app.IAppOpsActiveCallback$Stub$Proxy
com.android.internal.app.IAppOpsActiveCallback$Stub
com.android.internal.app.IAppOpsActiveCallback
com.android.internal.app.IAppOpsAsyncNotedCallback$Stub
@@ -11327,6 +11446,7 @@
com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
com.android.internal.appwidget.IAppWidgetService$Stub
com.android.internal.appwidget.IAppWidgetService
+com.android.internal.backup.IBackupTransport$Stub$Proxy
com.android.internal.backup.IBackupTransport$Stub
com.android.internal.backup.IBackupTransport
com.android.internal.colorextraction.ColorExtractor$GradientColors
@@ -11511,6 +11631,7 @@
com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub$Proxy
com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub
com.android.internal.inputmethod.IInputMethodPrivilegedOperations
+com.android.internal.inputmethod.IInputMethodSession$Stub$Proxy
com.android.internal.inputmethod.IInputMethodSession$Stub
com.android.internal.inputmethod.IInputMethodSession
com.android.internal.inputmethod.IRemoteAccessibilityInputConnection$Stub
@@ -11520,6 +11641,9 @@
com.android.internal.inputmethod.IRemoteInputConnection
com.android.internal.inputmethod.ImeTracing
com.android.internal.inputmethod.ImeTracingClientImpl
+com.android.internal.inputmethod.ImeTracingPerfettoImpl$$ExternalSyntheticLambda3
+com.android.internal.inputmethod.ImeTracingPerfettoImpl$$ExternalSyntheticLambda4
+com.android.internal.inputmethod.ImeTracingPerfettoImpl
com.android.internal.inputmethod.ImeTracingServerImpl
com.android.internal.inputmethod.InputBindResult$1
com.android.internal.inputmethod.InputBindResult-IA
@@ -11647,6 +11771,7 @@
com.android.internal.os.CachedDeviceState$TimeInStateStopwatch
com.android.internal.os.CachedDeviceState
com.android.internal.os.ClassLoaderFactory
+com.android.internal.os.Clock$1
com.android.internal.os.Clock
com.android.internal.os.DebugStore$DebugStoreNative
com.android.internal.os.DebugStore$DebugStoreNativeImpl
@@ -11722,6 +11847,8 @@
com.android.internal.os.ProcessCpuTracker$FilterStats
com.android.internal.os.ProcessCpuTracker$Stats
com.android.internal.os.ProcessCpuTracker
+com.android.internal.os.ProcfsMemoryUtil$MemorySnapshot
+com.android.internal.os.ProcfsMemoryUtil
com.android.internal.os.RailStats
com.android.internal.os.RoSystemProperties
com.android.internal.os.RpmStats$PowerStateElement
@@ -11834,8 +11961,14 @@
com.android.internal.protolog.PerfettoProtoLogImpl
com.android.internal.protolog.ProtoLog
com.android.internal.protolog.ProtoLogCacheUpdater
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda0
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda1
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda2
+com.android.internal.protolog.ProtoLogDataSource$GroupConfig
com.android.internal.protolog.ProtoLogDataSource$Instance$TracingInstanceStartCallback
com.android.internal.protolog.ProtoLogDataSource$Instance$TracingInstanceStopCallback
+com.android.internal.protolog.ProtoLogDataSource$Instance
+com.android.internal.protolog.ProtoLogDataSource$ProtoLogConfig
com.android.internal.protolog.ProtoLogDataSource
com.android.internal.protolog.ProtoLogGroup
com.android.internal.protolog.ProtoLogImpl
@@ -11978,6 +12111,7 @@
com.android.internal.telephony.CellNetworkScanResult$1
com.android.internal.telephony.CellNetworkScanResult
com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider$1
+com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider
com.android.internal.telephony.CellularNetworkService
com.android.internal.telephony.ClientWakelockAccountant
com.android.internal.telephony.ClientWakelockTracker
@@ -12065,6 +12199,7 @@
com.android.internal.telephony.INumberVerificationCallback$Stub$Proxy
com.android.internal.telephony.INumberVerificationCallback$Stub
com.android.internal.telephony.INumberVerificationCallback
+com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy
com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
com.android.internal.telephony.IOnSubscriptionsChangedListener
com.android.internal.telephony.IOns$Stub$Proxy
@@ -12170,6 +12305,7 @@
com.android.internal.telephony.NetworkFactoryLegacyImpl$NetworkRequestInfo
com.android.internal.telephony.NetworkFactoryLegacyImpl
com.android.internal.telephony.NetworkFactoryShim
+com.android.internal.telephony.NetworkRegistrationManager$NetworkRegStateCallback
com.android.internal.telephony.NetworkRegistrationManager$NetworkServiceConnection
com.android.internal.telephony.NetworkRegistrationManager$RegManagerDeathRecipient
com.android.internal.telephony.NetworkRegistrationManager
@@ -12255,6 +12391,7 @@
com.android.internal.telephony.PhoneSubInfoController$$ExternalSyntheticLambda9
com.android.internal.telephony.PhoneSubInfoController$CallPhoneMethodHelper
com.android.internal.telephony.PhoneSubInfoController$PermissionCheckHelper
+com.android.internal.telephony.PhoneSubInfoController
com.android.internal.telephony.ProxyController$1
com.android.internal.telephony.ProxyController
com.android.internal.telephony.RIL$RadioProxyDeathRecipient
@@ -12827,6 +12964,7 @@
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$MmTelFeatureListener
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$SharedPreferenceProxy
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$VtDataUsageProvider
com.android.internal.telephony.imsphone.ImsPhoneCallTracker
com.android.internal.telephony.imsphone.ImsPhoneCommandInterface
com.android.internal.telephony.imsphone.ImsPhoneConnection$$ExternalSyntheticLambda0
@@ -13363,6 +13501,7 @@
com.android.internal.util.FastMath
com.android.internal.util.FastPrintWriter$DummyWriter
com.android.internal.util.FastPrintWriter-IA
+com.android.internal.util.FastPrintWriter
com.android.internal.util.FastXmlSerializer
com.android.internal.util.FileRotator$FileInfo
com.android.internal.util.FileRotator$Reader
@@ -13383,6 +13522,7 @@
com.android.internal.util.HexDump
com.android.internal.util.IState
com.android.internal.util.ImageUtils
+com.android.internal.util.IndentingPrintWriter
com.android.internal.util.IntPair
com.android.internal.util.JournaledFile
com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda0
@@ -13452,6 +13592,7 @@
com.android.internal.util.XmlPullParserWrapper
com.android.internal.util.XmlSerializerWrapper
com.android.internal.util.XmlUtils$ForcedTypedXmlPullParser
+com.android.internal.util.XmlUtils$ForcedTypedXmlSerializer
com.android.internal.util.XmlUtils$ReadMapCallback
com.android.internal.util.XmlUtils$WriteMapCallback
com.android.internal.util.XmlUtils
@@ -13497,6 +13638,7 @@
com.android.internal.util.function.pooled.PooledLambdaImpl$LambdaType$ReturnType
com.android.internal.util.function.pooled.PooledLambdaImpl$LambdaType
com.android.internal.util.function.pooled.PooledLambdaImpl$Pool
+com.android.internal.util.function.pooled.PooledLambdaImpl
com.android.internal.util.function.pooled.PooledPredicate
com.android.internal.util.function.pooled.PooledRunnable
com.android.internal.util.function.pooled.PooledSupplier$OfDouble
@@ -13662,6 +13804,11 @@
com.android.nfc.x.android.nfc.FeatureFlags
com.android.nfc.x.android.nfc.FeatureFlagsImpl
com.android.nfc.x.android.nfc.Flags
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.BCDSAPublicKey
+com.android.org.conscrypt.OpenSSLRSAPublicKey
+com.android.org.conscrypt.OpenSSLX509Certificate
+com.android.org.kxml2.io.KXmlParser
+com.android.os.coregraphics.HwuiStatsLog
com.android.phone.ecc.nano.CodedInputByteBufferNano
com.android.phone.ecc.nano.CodedOutputByteBufferNano$OutOfSpaceException
com.android.phone.ecc.nano.CodedOutputByteBufferNano
@@ -14238,6 +14385,75 @@
gov.nist.javax.sip.stack.UDPMessageChannel$PingBackTimerTask
gov.nist.javax.sip.stack.UDPMessageChannel
gov.nist.javax.sip.stack.UDPMessageProcessor
+java.lang.ThreadLocal$SuppliedThreadLocal
+java.nio.ByteBufferAsFloatBuffer
+java.nio.ByteBufferAsIntBuffer
+java.nio.ByteBufferAsLongBuffer
+java.nio.DirectByteBuffer
+java.nio.HeapByteBuffer
+java.security.MessageDigest$Delegate
+java.time.Clock$SystemClock
+java.util.ArrayDeque$DeqIterator
+java.util.ArrayList$Itr
+java.util.Arrays$ArrayItr
+java.util.Arrays$ArrayList
+java.util.Collections$3
+java.util.Collections$EmptyIterator
+java.util.Collections$EmptyList
+java.util.Collections$EmptySet
+java.util.Collections$SingletonMap
+java.util.Collections$UnmodifiableCollection$1
+java.util.Collections$UnmodifiableCollection
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
+java.util.Collections$UnmodifiableMap
+java.util.Collections$UnmodifiableRandomAccessList
+java.util.Collections$UnmodifiableSet
+java.util.Collections$UnmodifiableSortedSet
+java.util.HashMap$EntryIterator
+java.util.HashMap$EntrySet
+java.util.HashMap$KeyIterator
+java.util.HashMap$KeySet
+java.util.HashMap$Node
+java.util.HashMap$TreeNode
+java.util.HashMap$ValueIterator
+java.util.HashMap$Values
+java.util.ImmutableCollections$List12
+java.util.ImmutableCollections$ListItr
+java.util.ImmutableCollections$ListN
+java.util.ImmutableCollections$MapN
+java.util.ImmutableCollections$Set12
+java.util.ImmutableCollections$SetN
+java.util.LinkedHashMap$LinkedKeyIterator
+java.util.LinkedHashMap$LinkedKeySet
+java.util.LinkedHashMap$LinkedValueIterator
+java.util.LinkedHashMap$LinkedValues
+java.util.LinkedList$ListItr
+java.util.TreeMap$EntryIterator
+java.util.TreeMap$EntrySet
+java.util.TreeMap$KeyIterator
+java.util.TreeMap$TreeMapEntry
+java.util.concurrent.ConcurrentHashMap$EntryIterator
+java.util.concurrent.ConcurrentHashMap$EntrySetView
+java.util.concurrent.ConcurrentHashMap$MapEntry
+java.util.concurrent.ConcurrentHashMap$ValueIterator
+java.util.concurrent.ConcurrentHashMap$ValuesView
+java.util.concurrent.ConcurrentLinkedQueue$Itr
+java.util.concurrent.CopyOnWriteArrayList$COWIterator
+java.util.concurrent.Executors$AutoShutdownDelegatedExecutorService
+java.util.concurrent.Executors$DelegatedScheduledExecutorService
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
+java.util.function.DoubleUnaryOperator$$ExternalSyntheticLambda2
+java.util.stream.IntPipeline$10
+java.util.stream.IntPipeline$1
+java.util.stream.IntPipeline$4
+java.util.stream.IntPipeline$Head
+java.util.stream.ReferencePipeline$2
+java.util.stream.ReferencePipeline$3
+java.util.stream.ReferencePipeline$4
+java.util.stream.ReferencePipeline$Head
+java.util.stream.SortedOps$OfRef
javax.microedition.khronos.egl.EGL10
javax.microedition.khronos.egl.EGL11
javax.microedition.khronos.egl.EGL
@@ -14352,6 +14568,7 @@
javax.sip.message.MessageFactory
javax.sip.message.Request
javax.sip.message.Response
+libcore.util.ZoneInfo
org.apache.http.conn.ConnectTimeoutException
org.apache.http.conn.scheme.HostNameResolver
org.apache.http.conn.scheme.LayeredSocketFactory
@@ -14366,6 +14583,7 @@
org.apache.http.params.CoreConnectionPNames
org.apache.http.params.HttpConnectionParams
org.apache.http.params.HttpParams
+org.ccil.cowan.tagsoup.AttributesImpl
org.ccil.cowan.tagsoup.AutoDetector
org.ccil.cowan.tagsoup.CommandLine
org.ccil.cowan.tagsoup.Element
@@ -14387,6 +14605,7 @@
org.ccil.cowan.tagsoup.jaxp.SAX1ParserAdapter
org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl
org.ccil.cowan.tagsoup.jaxp.SAXParserImpl
+sun.nio.ch.FileChannelImpl
[Landroid.accounts.Account;
[Landroid.accounts.AuthenticatorDescription;
[Landroid.animation.Animator;
@@ -14812,6 +15031,7 @@
[Landroid.widget.SpellChecker$SpellParser;
[Landroid.widget.TextView$BufferType;
[Landroid.widget.TextView$ChangeWatcher;
+[Landroid.window.BackTouchTracker$TouchTrackerState;
[Landroid.window.DesktopModeFlags$ToggleOverride;
[Landroid.window.DesktopModeFlags;
[Landroid.window.TransitionFilter$Requirement;
diff --git a/cmds/idmap2/OWNERS b/cmds/idmap2/OWNERS
index 062ffd4..def9f40 100644
--- a/cmds/idmap2/OWNERS
+++ b/cmds/idmap2/OWNERS
@@ -1,4 +1,3 @@
set noparent
-toddke@google.com
patb@google.com
zyy@google.com
diff --git a/cmds/incidentd/OWNERS b/cmds/incidentd/OWNERS
index bcdcfc3..db8fa9f 100644
--- a/cmds/incidentd/OWNERS
+++ b/cmds/incidentd/OWNERS
@@ -1,4 +1,3 @@
joeo@google.com
yaochen@google.com
yanmin@google.com
-zhouwenjie@google.com
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 70a94a0..4147fd7 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -59,6 +59,7 @@
android.accounts.AccountManager$AmsTask$Response
android.accounts.AccountManager$AmsTask
android.accounts.AccountManager$BaseFutureTask$1
+android.accounts.AccountManager$BaseFutureTask$Response
android.accounts.AccountManager$BaseFutureTask
android.accounts.AccountManager$Future2Task$1
android.accounts.AccountManager$Future2Task
@@ -73,6 +74,7 @@
android.accounts.AuthenticatorDescription-IA
android.accounts.AuthenticatorDescription
android.accounts.AuthenticatorException
+android.accounts.IAccountAuthenticator$Stub$Proxy
android.accounts.IAccountAuthenticator$Stub
android.accounts.IAccountAuthenticator
android.accounts.IAccountAuthenticatorResponse$Stub$Proxy
@@ -81,6 +83,7 @@
android.accounts.IAccountManager$Stub$Proxy
android.accounts.IAccountManager$Stub
android.accounts.IAccountManager
+android.accounts.IAccountManagerResponse$Stub$Proxy
android.accounts.IAccountManagerResponse$Stub
android.accounts.IAccountManagerResponse
android.accounts.NetworkErrorException
@@ -93,6 +96,8 @@
android.aconfig.nano.Aconfig$parsed_flag
android.aconfig.nano.Aconfig$parsed_flags
android.aconfig.nano.Aconfig$tracepoint
+android.adpf.FeatureFlags
+android.adpf.FeatureFlagsImpl
android.adpf.Flags
android.animation.AnimationHandler$$ExternalSyntheticLambda0
android.animation.AnimationHandler$1
@@ -220,6 +225,7 @@
android.app.ActivityManager$$ExternalSyntheticLambda1
android.app.ActivityManager$$ExternalSyntheticLambda2
android.app.ActivityManager$1
+android.app.ActivityManager$2
android.app.ActivityManager$3
android.app.ActivityManager$4
android.app.ActivityManager$AppTask
@@ -270,11 +276,14 @@
android.app.ActivityThread$3
android.app.ActivityThread$4
android.app.ActivityThread$5
+android.app.ActivityThread$6
android.app.ActivityThread$ActivityClientRecord$1
android.app.ActivityThread$ActivityClientRecord
+android.app.ActivityThread$AndroidOs
android.app.ActivityThread$AppBindData
android.app.ActivityThread$ApplicationThread$$ExternalSyntheticLambda2
android.app.ActivityThread$ApplicationThread$1
+android.app.ActivityThread$ApplicationThread
android.app.ActivityThread$BindServiceData
android.app.ActivityThread$ContextCleanupInfo
android.app.ActivityThread$CreateBackupAgentData
@@ -304,6 +313,7 @@
android.app.ActivityTransitionState
android.app.AlarmManager$AlarmClockInfo$1
android.app.AlarmManager$AlarmClockInfo
+android.app.AlarmManager$ListenerWrapper
android.app.AlarmManager$OnAlarmListener
android.app.AlarmManager
android.app.AlertDialog$Builder
@@ -324,6 +334,7 @@
android.app.AppOpsManager$$ExternalSyntheticLambda8
android.app.AppOpsManager$1
android.app.AppOpsManager$2
+android.app.AppOpsManager$3
android.app.AppOpsManager$4
android.app.AppOpsManager$AppOpsCollector
android.app.AppOpsManager$AttributedHistoricalOps$1
@@ -367,6 +378,7 @@
android.app.AppOpsManagerInternal
android.app.Application$ActivityLifecycleCallbacks
android.app.Application$OnProvideAssistDataListener
+android.app.Application
android.app.ApplicationErrorReport$1
android.app.ApplicationErrorReport$AnrInfo
android.app.ApplicationErrorReport$BatteryInfo
@@ -392,6 +404,7 @@
android.app.ApplicationPackageManager$MoveCallbackDelegate
android.app.ApplicationPackageManager$ResourceName
android.app.ApplicationPackageManager-IA
+android.app.ApplicationPackageManager
android.app.AsyncNotedAppOp$1
android.app.AsyncNotedAppOp
android.app.AutomaticZenRule$1
@@ -420,6 +433,7 @@
android.app.ContentProviderHolder
android.app.ContextImpl$1
android.app.ContextImpl$ApplicationContentResolver
+android.app.ContextImpl
android.app.DexLoadReporter
android.app.Dialog$$ExternalSyntheticLambda0
android.app.Dialog$$ExternalSyntheticLambda1
@@ -505,6 +519,7 @@
android.app.IApplicationStartInfoCompleteListener$Stub$Proxy
android.app.IApplicationStartInfoCompleteListener$Stub
android.app.IApplicationStartInfoCompleteListener
+android.app.IApplicationThread$Stub$Proxy
android.app.IApplicationThread$Stub
android.app.IApplicationThread
android.app.IAssistDataReceiver$Stub$Proxy
@@ -519,6 +534,7 @@
android.app.IGameManagerService$Stub$Proxy
android.app.IGameManagerService$Stub
android.app.IGameManagerService
+android.app.IInstantAppResolver$Stub$Proxy
android.app.IInstantAppResolver$Stub
android.app.IInstantAppResolver
android.app.IInstrumentationWatcher$Stub$Proxy
@@ -547,11 +563,13 @@
android.app.ISearchManager$Stub$Proxy
android.app.ISearchManager$Stub
android.app.ISearchManager
+android.app.IServiceConnection$Stub$Proxy
android.app.IServiceConnection$Stub
android.app.IServiceConnection
android.app.IStopUserCallback$Stub$Proxy
android.app.IStopUserCallback$Stub
android.app.IStopUserCallback
+android.app.ITaskStackListener$Stub$Proxy
android.app.ITaskStackListener$Stub
android.app.ITaskStackListener
android.app.ITransientNotification$Stub$Proxy
@@ -571,6 +589,7 @@
android.app.IUidFrozenStateChangedCallback$Stub$Proxy
android.app.IUidFrozenStateChangedCallback$Stub
android.app.IUidFrozenStateChangedCallback
+android.app.IUidObserver$Stub$Proxy
android.app.IUidObserver$Stub
android.app.IUidObserver
android.app.IUnsafeIntentStrictModeCallback$Stub
@@ -599,6 +618,7 @@
android.app.IntentReceiverLeaked
android.app.IntentService$ServiceHandler
android.app.IntentService
+android.app.JobSchedulerImpl
android.app.KeyguardManager$1
android.app.KeyguardManager$2
android.app.KeyguardManager$KeyguardDismissCallback
@@ -606,9 +626,11 @@
android.app.ListActivity
android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0
android.app.LoadedApk$ReceiverDispatcher$Args
+android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
android.app.LoadedApk$ReceiverDispatcher
android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
android.app.LoadedApk$ServiceDispatcher$DeathMonitor
+android.app.LoadedApk$ServiceDispatcher$InnerConnection
android.app.LoadedApk$ServiceDispatcher$RunConnection
android.app.LoadedApk$ServiceDispatcher
android.app.LoadedApk$SplitDependencyLoaderImpl
@@ -665,6 +687,7 @@
android.app.NotificationManager$NotificationKey
android.app.NotificationManager$Policy$1
android.app.NotificationManager$Policy
+android.app.NotificationManager$RateLimiter
android.app.NotificationManager
android.app.OnActivityPausedListener
android.app.PackageInstallObserver$1
@@ -675,6 +698,7 @@
android.app.PendingIntent$1
android.app.PendingIntent$CancelListener
android.app.PendingIntent$CanceledException
+android.app.PendingIntent$FinishedDispatcher
android.app.PendingIntent$OnFinished
android.app.PendingIntent$OnMarshaledListener
android.app.PendingIntent
@@ -760,6 +784,7 @@
android.app.SharedPreferencesImpl$MemoryCommitResult
android.app.SharedPreferencesImpl$SharedPreferencesThreadFactory
android.app.SharedPreferencesImpl-IA
+android.app.SharedPreferencesImpl
android.app.StackTrace
android.app.StatusBarManager
android.app.SyncNotedAppOp$1
@@ -1161,6 +1186,7 @@
android.app.job.JobService$1
android.app.job.JobService
android.app.job.JobServiceEngine$JobHandler
+android.app.job.JobServiceEngine$JobInterface
android.app.job.JobServiceEngine
android.app.job.JobWorkItem$1
android.app.job.JobWorkItem
@@ -1241,7 +1267,10 @@
android.app.servertransaction.TopResumedActivityChangeItem
android.app.servertransaction.TransactionExecutor
android.app.servertransaction.TransactionExecutorHelper
+android.app.servertransaction.WindowStateInsetsControlChangeItem$1
+android.app.servertransaction.WindowStateInsetsControlChangeItem
android.app.servertransaction.WindowStateTransactionItem$TransactionListener
+android.app.servertransaction.WindowStateTransactionItem
android.app.slice.ISliceManager$Stub$Proxy
android.app.slice.ISliceManager$Stub
android.app.slice.ISliceManager
@@ -1467,6 +1496,7 @@
android.content.ComponentName$WithComponentName
android.content.ComponentName
android.content.ContentCaptureOptions$1
+android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda0
android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda1
android.content.ContentCaptureOptions$ContentProtectionOptions$$ExternalSyntheticLambda2
android.content.ContentCaptureOptions$ContentProtectionOptions
@@ -1488,10 +1518,12 @@
android.content.ContentProviderOperation$Builder
android.content.ContentProviderOperation-IA
android.content.ContentProviderOperation
+android.content.ContentProviderProxy
android.content.ContentProviderResult$1
android.content.ContentProviderResult
android.content.ContentResolver$1
android.content.ContentResolver$2
+android.content.ContentResolver$CursorWrapperInner
android.content.ContentResolver$OpenResourceIdResult
android.content.ContentResolver$ParcelFileDescriptorInner
android.content.ContentResolver$ResultListener
@@ -1522,6 +1554,7 @@
android.content.IContentService$Stub$Proxy
android.content.IContentService$Stub
android.content.IContentService
+android.content.IIntentReceiver$Stub$Proxy
android.content.IIntentReceiver$Stub
android.content.IIntentReceiver
android.content.IIntentSender$Stub$Proxy
@@ -1695,6 +1728,7 @@
android.content.pm.ILauncherApps$Stub$Proxy
android.content.pm.ILauncherApps$Stub
android.content.pm.ILauncherApps
+android.content.pm.IOnAppsChangedListener$Stub$Proxy
android.content.pm.IOnAppsChangedListener$Stub
android.content.pm.IOnAppsChangedListener
android.content.pm.IOnChecksumsReadyListener$Stub$Proxy
@@ -2040,6 +2074,7 @@
android.content.res.ThemedResourceCache
android.content.res.TypedArray
android.content.res.Validator
+android.content.res.XmlBlock$Parser
android.content.res.XmlBlock
android.content.res.XmlResourceParser
android.content.res.loader.AssetsProvider
@@ -2074,6 +2109,7 @@
android.database.ContentObservable
android.database.ContentObserver$$ExternalSyntheticLambda0
android.database.ContentObserver$$ExternalSyntheticLambda1
+android.database.ContentObserver$Transport
android.database.ContentObserver
android.database.CrossProcessCursor
android.database.CrossProcessCursorWrapper
@@ -2092,6 +2128,7 @@
android.database.DatabaseUtils
android.database.DefaultDatabaseErrorHandler
android.database.IBulkCursor
+android.database.IContentObserver$Stub$Proxy
android.database.IContentObserver$Stub
android.database.IContentObserver
android.database.MatrixCursor$RowBuilder
@@ -2128,6 +2165,7 @@
android.database.sqlite.SQLiteConnectionPool-IA
android.database.sqlite.SQLiteConnectionPool
android.database.sqlite.SQLiteConstraintException
+android.database.sqlite.SQLiteCursor
android.database.sqlite.SQLiteCursorDriver
android.database.sqlite.SQLiteCustomFunction
android.database.sqlite.SQLiteDatabase$$ExternalSyntheticLambda0
@@ -2154,6 +2192,7 @@
android.database.sqlite.SQLiteFullException
android.database.sqlite.SQLiteGlobal
android.database.sqlite.SQLiteMisuseException
+android.database.sqlite.SQLiteOpenHelper$$ExternalSyntheticLambda0
android.database.sqlite.SQLiteOpenHelper
android.database.sqlite.SQLiteOutOfMemoryException
android.database.sqlite.SQLiteProgram
@@ -2226,12 +2265,16 @@
android.graphics.ColorSpace$Lab
android.graphics.ColorSpace$Model
android.graphics.ColorSpace$Named
+android.graphics.ColorSpace$OkLab
android.graphics.ColorSpace$RenderIntent
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda0
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda1
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda2
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda3
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda4
android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda5
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda6
+android.graphics.ColorSpace$Rgb$$ExternalSyntheticLambda9
android.graphics.ColorSpace$Rgb$Native
android.graphics.ColorSpace$Rgb$NoImagePreloadHolder
android.graphics.ColorSpace$Rgb$TransferParameters
@@ -2537,6 +2580,7 @@
android.graphics.fonts.Font
android.graphics.fonts.FontCustomizationParser$Result
android.graphics.fonts.FontCustomizationParser
+android.graphics.fonts.FontFamily$Builder$NoImagePreloadHolder
android.graphics.fonts.FontFamily$Builder
android.graphics.fonts.FontFamily
android.graphics.fonts.FontFileUtil
@@ -2627,6 +2671,7 @@
android.hardware.SystemSensorManager$InjectEventQueue
android.hardware.SystemSensorManager$SensorEventQueue
android.hardware.SystemSensorManager$TriggerEventQueue
+android.hardware.SystemSensorManager
android.hardware.TriggerEvent
android.hardware.TriggerEventListener
android.hardware.biometrics.BiometricAuthenticator$AuthenticationCallback
@@ -2911,6 +2956,7 @@
android.hardware.display.DisplayManagerGlobal$1
android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0
android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
+android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
android.hardware.display.DisplayManagerGlobal
android.hardware.display.DisplayManagerInternal$DisplayPowerCallbacks
android.hardware.display.DisplayManagerInternal$DisplayPowerRequest
@@ -2927,6 +2973,7 @@
android.hardware.display.IDisplayManager$Stub$Proxy
android.hardware.display.IDisplayManager$Stub
android.hardware.display.IDisplayManager
+android.hardware.display.IDisplayManagerCallback$Stub$Proxy
android.hardware.display.IDisplayManagerCallback$Stub
android.hardware.display.IDisplayManagerCallback
android.hardware.display.IVirtualDisplayCallback$Stub$Proxy
@@ -3001,6 +3048,7 @@
android.hardware.hdmi.HdmiRecordSources$RecordSource
android.hardware.input.HostUsiVersion$1
android.hardware.input.HostUsiVersion
+android.hardware.input.IInputDevicesChangedListener$Stub$Proxy
android.hardware.input.IInputDevicesChangedListener$Stub
android.hardware.input.IInputDevicesChangedListener
android.hardware.input.IInputManager$Stub$Proxy
@@ -3016,6 +3064,7 @@
android.hardware.input.InputManager$InputDeviceListener
android.hardware.input.InputManager
android.hardware.input.InputManagerGlobal$InputDeviceListenerDelegate
+android.hardware.input.InputManagerGlobal$InputDevicesChangedListener
android.hardware.input.InputManagerGlobal$OnTabletModeChangedListenerDelegate
android.hardware.input.InputManagerGlobal-IA
android.hardware.input.InputManagerGlobal
@@ -4609,6 +4658,7 @@
android.icu.text.ReplaceableString
android.icu.text.RuleBasedBreakIterator$BreakCache
android.icu.text.RuleBasedBreakIterator$DictionaryCache
+android.icu.text.RuleBasedBreakIterator
android.icu.text.RuleBasedCollator$CollationBuffer
android.icu.text.RuleBasedCollator$CollationKeyByteSink
android.icu.text.RuleBasedCollator$FCDUTF16NFDIterator
@@ -4956,8 +5006,13 @@
android.internal.aconfig.storage.AconfigStorageException
android.internal.aconfig.storage.ByteBufferReader
android.internal.aconfig.storage.FileType
+android.internal.aconfig.storage.FlagTable$Header
+android.internal.aconfig.storage.FlagTable
+android.internal.aconfig.storage.FlagValueList$Header
+android.internal.aconfig.storage.FlagValueList
android.internal.aconfig.storage.PackageTable$Header
android.internal.aconfig.storage.PackageTable
+android.internal.aconfig.storage.TableUtils$StorageFilesBundle
android.internal.framework.protobuf.nano.InvalidProtocolBufferNanoException
android.internal.framework.protobuf.nano.MessageNano
android.internal.hidl.base.V1_0.DebugInfo
@@ -4984,6 +5039,7 @@
android.internal.telephony.sysprop.TelephonyProperties$$ExternalSyntheticLambda8
android.internal.telephony.sysprop.TelephonyProperties$$ExternalSyntheticLambda9
android.internal.telephony.sysprop.TelephonyProperties
+android.location.CountryDetector
android.location.Geofence$1
android.location.Geofence
android.location.IFusedGeofenceHardware$Stub$Proxy
@@ -4992,11 +5048,14 @@
android.location.IGpsGeofenceHardware$Stub$Proxy
android.location.IGpsGeofenceHardware$Stub
android.location.IGpsGeofenceHardware
+android.location.ILocationManager$Stub
+android.location.ILocationManager
android.location.Location$$ExternalSyntheticLambda0
android.location.Location$1
android.location.Location$BearingDistanceCache
android.location.Location-IA
android.location.Location
+android.location.LocationManager
android.location.LocationTime$1
android.location.LocationTime
android.location.flags.FeatureFlags
@@ -5028,6 +5087,7 @@
android.media.AudioGainConfig
android.media.AudioHandle
android.media.AudioManager$1
+android.media.AudioManager$2
android.media.AudioManager$3
android.media.AudioManager$4
android.media.AudioManager$AudioPlaybackCallback
@@ -5161,6 +5221,7 @@
android.media.IMediaRouter2
android.media.IMediaRouter2Manager$Stub
android.media.IMediaRouter2Manager
+android.media.IMediaRouterClient$Stub$Proxy
android.media.IMediaRouterClient$Stub
android.media.IMediaRouterClient
android.media.IMediaRouterService$Stub$Proxy
@@ -5323,6 +5384,7 @@
android.media.MediaRouter$Static$Client$$ExternalSyntheticLambda0
android.media.MediaRouter$Static$Client$$ExternalSyntheticLambda1
android.media.MediaRouter$Static$Client$1
+android.media.MediaRouter$Static$Client
android.media.MediaRouter$Static
android.media.MediaRouter$UserRouteInfo$SessionVolumeProvider
android.media.MediaRouter$UserRouteInfo
@@ -5531,6 +5593,7 @@
android.media.quality.MediaQualityManager
android.media.quality.PictureProfileHandle$1
android.media.quality.PictureProfileHandle
+android.media.session.IActiveSessionsListener$Stub$Proxy
android.media.session.IActiveSessionsListener$Stub
android.media.session.IActiveSessionsListener
android.media.session.IOnMediaKeyEventDispatchedListener$Stub$Proxy
@@ -5557,6 +5620,7 @@
android.media.session.ISessionController$Stub$Proxy
android.media.session.ISessionController$Stub
android.media.session.ISessionController
+android.media.session.ISessionControllerCallback$Stub$Proxy
android.media.session.ISessionControllerCallback$Stub
android.media.session.ISessionControllerCallback
android.media.session.ISessionManager$Stub$Proxy
@@ -5593,6 +5657,7 @@
android.media.session.MediaSessionManager$RemoteUserInfo
android.media.session.MediaSessionManager$Session2TokensChangedWrapper
android.media.session.MediaSessionManager$SessionsChangedWrapper$1$$ExternalSyntheticLambda0
+android.media.session.MediaSessionManager$SessionsChangedWrapper$1
android.media.session.MediaSessionManager$SessionsChangedWrapper
android.media.session.MediaSessionManager-IA
android.media.session.MediaSessionManager
@@ -5684,6 +5749,8 @@
android.net.LocalSocket
android.net.LocalSocketAddress$Namespace
android.net.LocalSocketAddress
+android.net.LocalSocketImpl$SocketInputStream
+android.net.LocalSocketImpl$SocketOutputStream
android.net.LocalSocketImpl
android.net.MatchAllNetworkSpecifier$1
android.net.MatchAllNetworkSpecifier
@@ -5732,11 +5799,15 @@
android.net.Uri$AbstractHierarchicalUri
android.net.Uri$AbstractPart
android.net.Uri$Builder
+android.net.Uri$HierarchicalUri
android.net.Uri$NotCachedHolder
+android.net.Uri$OpaqueUri
android.net.Uri$Part$EmptyPart
android.net.Uri$Part
android.net.Uri$PathPart
+android.net.Uri$PathSegments
android.net.Uri$PathSegmentsBuilder
+android.net.Uri$StringUri
android.net.Uri-IA
android.net.Uri
android.net.UriCodec
@@ -5986,7 +6057,6 @@
android.nfc.NfcOemExtension$$ExternalSyntheticLambda9
android.nfc.NfcOemExtension$Callback
android.nfc.NfcOemExtension$NfcOemExtensionCallback
-android.nfc.NfcOemExtension-IA
android.nfc.NfcOemExtension
android.nfc.NfcRoutingTableEntry
android.nfc.NfcServiceManager$ServiceRegisterer
@@ -6139,6 +6209,7 @@
android.os.BinderProxy$BinderProxyMapSizeException
android.os.BinderProxy$NoImagePreloadHolder
android.os.BinderProxy$ProxyMap
+android.os.BinderProxy
android.os.BluetoothServiceManager$ServiceRegisterer
android.os.BluetoothServiceManager
android.os.BugreportManager
@@ -6213,6 +6284,7 @@
android.os.Handler$MessengerImpl
android.os.Handler-IA
android.os.Handler
+android.os.HandlerExecutor
android.os.HandlerThread
android.os.HardwarePropertiesManager
android.os.HidlMemory
@@ -6297,6 +6369,7 @@
android.os.IRecoverySystemProgressListener$Stub$Proxy
android.os.IRecoverySystemProgressListener$Stub
android.os.IRecoverySystemProgressListener
+android.os.IRemoteCallback$Stub$Proxy
android.os.IRemoteCallback$Stub
android.os.IRemoteCallback
android.os.ISchedulingPolicyService$Stub
@@ -6370,6 +6443,7 @@
android.os.LimitExceededException
android.os.LocaleList$1
android.os.LocaleList
+android.os.Looper$NoImagePreloadHolder
android.os.Looper$Observer
android.os.Looper
android.os.MemoryFile
@@ -6408,7 +6482,7 @@
android.os.PackageTagsList$1
android.os.PackageTagsList
android.os.Parcel$1
-android.os.Parcel$ClassLoaderProvider
+android.os.Parcel$2
android.os.Parcel$LazyValue
android.os.Parcel$ReadWriteHelper
android.os.Parcel$SquashReadHelper
@@ -6417,6 +6491,7 @@
android.os.ParcelDuration
android.os.ParcelFileDescriptor$1
android.os.ParcelFileDescriptor$2
+android.os.ParcelFileDescriptor$AutoCloseInputStream
android.os.ParcelFileDescriptor$AutoCloseOutputStream
android.os.ParcelFileDescriptor$OnCloseListener
android.os.ParcelFileDescriptor$Status
@@ -6536,12 +6611,14 @@
android.os.StrictMode$2
android.os.StrictMode$3
android.os.StrictMode$4
+android.os.StrictMode$5
android.os.StrictMode$6
android.os.StrictMode$7
android.os.StrictMode$8
android.os.StrictMode$9
android.os.StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda0
android.os.StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1
+android.os.StrictMode$AndroidBlockGuardPolicy
android.os.StrictMode$AndroidCloseGuardReporter
android.os.StrictMode$InstanceTracker
android.os.StrictMode$OnThreadViolationListener
@@ -7014,6 +7091,7 @@
android.security.KeyStoreSecurityLevel
android.security.NetworkSecurityPolicy
android.security.Scrypt
+android.security.advancedprotection.AdvancedProtectionManager
android.security.attestationverification.AttestationVerificationManager
android.security.authenticationpolicy.AuthenticationPolicyManager
android.security.intrusiondetection.IntrusionDetectionManager
@@ -7317,6 +7395,7 @@
android.service.notification.Condition$1
android.service.notification.Condition
android.service.notification.ConditionProviderService$H
+android.service.notification.ConditionProviderService$Provider
android.service.notification.ConditionProviderService-IA
android.service.notification.ConditionProviderService
android.service.notification.IConditionProvider$Stub
@@ -7332,6 +7411,7 @@
android.service.notification.NotificationListenerFilter$1
android.service.notification.NotificationListenerFilter
android.service.notification.NotificationListenerService$MyHandler
+android.service.notification.NotificationListenerService$NotificationListenerWrapper
android.service.notification.NotificationListenerService$Ranking
android.service.notification.NotificationListenerService$RankingMap$1
android.service.notification.NotificationListenerService$RankingMap
@@ -7346,6 +7426,7 @@
android.service.notification.ScheduleCalendar
android.service.notification.SnoozeCriterion$1
android.service.notification.SnoozeCriterion
+android.service.notification.StatusBarNotification$$ExternalSyntheticLambda0
android.service.notification.StatusBarNotification$1
android.service.notification.StatusBarNotification
android.service.notification.ZenDeviceEffects$1
@@ -7387,6 +7468,7 @@
android.service.storage.IExternalStorageService$Stub$Proxy
android.service.storage.IExternalStorageService$Stub
android.service.storage.IExternalStorageService
+android.service.textclassifier.ITextClassifierCallback$Stub$Proxy
android.service.textclassifier.ITextClassifierCallback$Stub
android.service.textclassifier.ITextClassifierCallback
android.service.textclassifier.ITextClassifierService$Stub$Proxy
@@ -7549,6 +7631,7 @@
android.system.keystore2.KeyParameters
android.system.keystore2.OperationChallenge$1
android.system.keystore2.OperationChallenge
+android.system.suspend.internal.ISuspendControlServiceInternal$Stub$Proxy
android.system.suspend.internal.ISuspendControlServiceInternal$Stub
android.system.suspend.internal.ISuspendControlServiceInternal
android.system.suspend.internal.WakeLockInfo$1
@@ -7691,6 +7774,7 @@
android.telephony.CellIdentityGsm$1
android.telephony.CellIdentityGsm
android.telephony.CellIdentityLte$1
+android.telephony.CellIdentityLte
android.telephony.CellIdentityNr$1
android.telephony.CellIdentityNr
android.telephony.CellIdentityTdscdma$1
@@ -7718,6 +7802,7 @@
android.telephony.CellSignalStrengthCdma
android.telephony.CellSignalStrengthGsm$1
android.telephony.CellSignalStrengthGsm-IA
+android.telephony.CellSignalStrengthGsm
android.telephony.CellSignalStrengthLte$1
android.telephony.CellSignalStrengthLte-IA
android.telephony.CellSignalStrengthLte
@@ -7729,6 +7814,7 @@
android.telephony.CellSignalStrengthTdscdma
android.telephony.CellSignalStrengthWcdma$1
android.telephony.CellSignalStrengthWcdma-IA
+android.telephony.CellSignalStrengthWcdma
android.telephony.CellularIdentifierDisclosure
android.telephony.ClientRequestStats$1
android.telephony.ClientRequestStats
@@ -7833,6 +7919,7 @@
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda62
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda6
android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda9
+android.telephony.PhoneStateListener$IPhoneStateListenerStub
android.telephony.PhoneStateListener
android.telephony.PhysicalChannelConfig$1
android.telephony.PhysicalChannelConfig$Builder
@@ -7939,6 +8026,7 @@
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda52
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda63
android.telephony.TelephonyCallback$IPhoneStateListenerStub$$ExternalSyntheticLambda65
+android.telephony.TelephonyCallback$IPhoneStateListenerStub
android.telephony.TelephonyCallback$ImsCallDisconnectCauseListener
android.telephony.TelephonyCallback$LinkCapacityEstimateChangedListener
android.telephony.TelephonyCallback$MediaQualityStatusChangedListener
@@ -8000,7 +8088,9 @@
android.telephony.TelephonyRegistryManager$$ExternalSyntheticLambda1
android.telephony.TelephonyRegistryManager$$ExternalSyntheticLambda2
android.telephony.TelephonyRegistryManager$1$$ExternalSyntheticLambda0
+android.telephony.TelephonyRegistryManager$1
android.telephony.TelephonyRegistryManager$2
+android.telephony.TelephonyRegistryManager$3
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda0
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda1
android.telephony.TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper$$ExternalSyntheticLambda2
@@ -8380,6 +8470,7 @@
android.text.SpanWatcher
android.text.Spannable$Factory
android.text.Spannable
+android.text.SpannableString
android.text.SpannableStringBuilder
android.text.SpannableStringInternal
android.text.Spanned
@@ -8541,9 +8632,11 @@
android.tracing.FeatureFlags
android.tracing.FeatureFlagsImpl
android.tracing.Flags
+android.tracing.inputmethod.InputMethodDataSource
android.tracing.perfetto.CreateIncrementalStateArgs
android.tracing.perfetto.CreateTlsStateArgs
android.tracing.perfetto.DataSource
+android.tracing.perfetto.DataSourceInstance
android.tracing.perfetto.DataSourceParams$Builder
android.tracing.perfetto.DataSourceParams
android.tracing.perfetto.FlushCallbackArguments
@@ -8628,6 +8721,7 @@
android.util.AndroidException
android.util.AndroidRuntimeException
android.util.ArrayMap$1
+android.util.ArrayMap
android.util.ArraySet$1
android.util.ArraySet
android.util.AtomicFile
@@ -8665,6 +8759,7 @@
android.util.FloatProperty
android.util.Half
android.util.IconDrawableFactory
+android.util.IndentingPrintWriter
android.util.IntArray
android.util.IntProperty
android.util.JsonReader$1
@@ -8696,6 +8791,11 @@
android.util.LongSparseLongArray
android.util.LruCache
android.util.MalformedJsonException
+android.util.MapCollections$ArrayIterator
+android.util.MapCollections$EntrySet
+android.util.MapCollections$KeySet
+android.util.MapCollections$MapIterator
+android.util.MapCollections$ValuesCollection
android.util.MapCollections
android.util.MathUtils
android.util.MemoryIntArray$1
@@ -8725,6 +8825,7 @@
android.util.Rational
android.util.RecurrenceRule$1
android.util.RecurrenceRule$NonrecurringIterator
+android.util.RecurrenceRule$RecurringIterator
android.util.RecurrenceRule
android.util.ReflectiveProperty
android.util.RotationUtils
@@ -8742,6 +8843,7 @@
android.util.SparseLongArray
android.util.SparseSetArray
android.util.Spline$LinearSpline
+android.util.Spline$MonotoneCubicSpline
android.util.Spline
android.util.StateSet
android.util.StringBuilderPrinter
@@ -8923,8 +9025,10 @@
android.view.IDisplayFoldListener$Stub$Proxy
android.view.IDisplayFoldListener$Stub
android.view.IDisplayFoldListener
+android.view.IDisplayWindowInsetsController$Stub$Proxy
android.view.IDisplayWindowInsetsController$Stub
android.view.IDisplayWindowInsetsController
+android.view.IDisplayWindowListener$Stub$Proxy
android.view.IDisplayWindowListener$Stub
android.view.IDisplayWindowListener
android.view.IDockedStackListener$Stub$Proxy
@@ -8967,6 +9071,7 @@
android.view.ISurfaceControlViewHostParent
android.view.ISystemGestureExclusionListener$Stub
android.view.ISystemGestureExclusionListener
+android.view.IWallpaperVisibilityListener$Stub$Proxy
android.view.IWallpaperVisibilityListener$Stub
android.view.IWallpaperVisibilityListener
android.view.IWindow$Stub
@@ -9165,7 +9270,9 @@
android.view.SurfaceControl$RefreshRateRange
android.view.SurfaceControl$RefreshRateRanges
android.view.SurfaceControl$StaticDisplayInfo
+android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda0
android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda1
+android.view.SurfaceControl$Transaction$$ExternalSyntheticLambda3
android.view.SurfaceControl$Transaction$1
android.view.SurfaceControl$Transaction$2
android.view.SurfaceControl$Transaction
@@ -9283,6 +9390,7 @@
android.view.View$ScrollabilityCache
android.view.View$SendAccessibilityEventThrottle
android.view.View$SendViewScrolledAccessibilityEvent
+android.view.View$SensitiveAutofillHintsHelper
android.view.View$TintInfo
android.view.View$TooltipInfo
android.view.View$TransformationInfo
@@ -9347,6 +9455,7 @@
android.view.ViewRootImpl$$ExternalSyntheticLambda20
android.view.ViewRootImpl$$ExternalSyntheticLambda21
android.view.ViewRootImpl$$ExternalSyntheticLambda22
+android.view.ViewRootImpl$$ExternalSyntheticLambda23
android.view.ViewRootImpl$$ExternalSyntheticLambda2
android.view.ViewRootImpl$$ExternalSyntheticLambda3
android.view.ViewRootImpl$$ExternalSyntheticLambda4
@@ -9401,6 +9510,7 @@
android.view.ViewRootImpl$ViewPostImeInputStage
android.view.ViewRootImpl$ViewPreImeInputStage
android.view.ViewRootImpl$ViewRootHandler
+android.view.ViewRootImpl$W
android.view.ViewRootImpl$WindowInputEventReceiver
android.view.ViewRootImpl-IA
android.view.ViewRootImpl
@@ -9469,6 +9579,7 @@
android.view.WindowManagerGlobal$TrustedPresentationListener
android.view.WindowManagerGlobal-IA
android.view.WindowManagerGlobal
+android.view.WindowManagerImpl
android.view.WindowManagerPolicyConstants$PointerEventListener
android.view.WindowManagerPolicyConstants
android.view.WindowMetrics
@@ -9486,6 +9597,7 @@
android.view.accessibility.AccessibilityManager$$ExternalSyntheticLambda1
android.view.accessibility.AccessibilityManager$$ExternalSyntheticLambda3
android.view.accessibility.AccessibilityManager$1$$ExternalSyntheticLambda0
+android.view.accessibility.AccessibilityManager$1
android.view.accessibility.AccessibilityManager$AccessibilityPolicy
android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener
android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
@@ -9529,6 +9641,7 @@
android.view.accessibility.IAccessibilityManager$Stub$Proxy
android.view.accessibility.IAccessibilityManager$Stub
android.view.accessibility.IAccessibilityManager
+android.view.accessibility.IAccessibilityManagerClient$Stub$Proxy
android.view.accessibility.IAccessibilityManagerClient$Stub
android.view.accessibility.IAccessibilityManagerClient
android.view.accessibility.WeakSparseArray$WeakReferenceWithId
@@ -9710,6 +9823,7 @@
android.view.inputmethod.IInputMethodSessionInvoker$$ExternalSyntheticLambda8
android.view.inputmethod.IInputMethodSessionInvoker
android.view.inputmethod.ImeTracker$1$$ExternalSyntheticLambda0
+android.view.inputmethod.ImeTracker$1
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda0
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda1
android.view.inputmethod.ImeTracker$Debug$$ExternalSyntheticLambda2
@@ -10259,6 +10373,7 @@
android.widget.RemoteViews$2
android.widget.RemoteViews$Action
android.widget.RemoteViews$ActionException
+android.widget.RemoteViews$ApplicationInfoCache$$ExternalSyntheticLambda0
android.widget.RemoteViews$ApplicationInfoCache
android.widget.RemoteViews$AsyncApplyTask
android.widget.RemoteViews$AttributeReflectionAction
@@ -10446,6 +10561,7 @@
android.window.BackProgressAnimator$1
android.window.BackProgressAnimator$ProgressCallback
android.window.BackProgressAnimator
+android.window.BackTouchTracker$TouchTrackerState
android.window.BackTouchTracker
android.window.ClientWindowFrames$1
android.window.ClientWindowFrames-IA
@@ -10512,6 +10628,7 @@
android.window.ISurfaceSyncGroup
android.window.ISurfaceSyncGroupCompletedListener$Stub
android.window.ISurfaceSyncGroupCompletedListener
+android.window.ITaskFragmentOrganizer$Stub$Proxy
android.window.ITaskFragmentOrganizer$Stub
android.window.ITaskFragmentOrganizer
android.window.ITaskFragmentOrganizerController$Stub
@@ -10852,6 +10969,7 @@
com.android.icu.charset.CharsetDecoderICU
com.android.icu.charset.CharsetEncoderICU
com.android.icu.charset.CharsetFactory
+com.android.icu.charset.CharsetICU
com.android.icu.charset.NativeConverter
com.android.icu.text.CompatibleDecimalFormatFactory
com.android.icu.text.DateSorterBridge
@@ -11277,6 +11395,7 @@
com.android.internal.app.AlertController$RecycleListView
com.android.internal.app.AlertController
com.android.internal.app.AssistUtils
+com.android.internal.app.IAppOpsActiveCallback$Stub$Proxy
com.android.internal.app.IAppOpsActiveCallback$Stub
com.android.internal.app.IAppOpsActiveCallback
com.android.internal.app.IAppOpsAsyncNotedCallback$Stub
@@ -11363,6 +11482,7 @@
com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
com.android.internal.appwidget.IAppWidgetService$Stub
com.android.internal.appwidget.IAppWidgetService
+com.android.internal.backup.IBackupTransport$Stub$Proxy
com.android.internal.backup.IBackupTransport$Stub
com.android.internal.backup.IBackupTransport
com.android.internal.colorextraction.ColorExtractor$GradientColors
@@ -11547,6 +11667,7 @@
com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub$Proxy
com.android.internal.inputmethod.IInputMethodPrivilegedOperations$Stub
com.android.internal.inputmethod.IInputMethodPrivilegedOperations
+com.android.internal.inputmethod.IInputMethodSession$Stub$Proxy
com.android.internal.inputmethod.IInputMethodSession$Stub
com.android.internal.inputmethod.IInputMethodSession
com.android.internal.inputmethod.IRemoteAccessibilityInputConnection$Stub
@@ -11556,6 +11677,9 @@
com.android.internal.inputmethod.IRemoteInputConnection
com.android.internal.inputmethod.ImeTracing
com.android.internal.inputmethod.ImeTracingClientImpl
+com.android.internal.inputmethod.ImeTracingPerfettoImpl$$ExternalSyntheticLambda3
+com.android.internal.inputmethod.ImeTracingPerfettoImpl$$ExternalSyntheticLambda4
+com.android.internal.inputmethod.ImeTracingPerfettoImpl
com.android.internal.inputmethod.ImeTracingServerImpl
com.android.internal.inputmethod.InputBindResult$1
com.android.internal.inputmethod.InputBindResult-IA
@@ -11683,6 +11807,7 @@
com.android.internal.os.CachedDeviceState$TimeInStateStopwatch
com.android.internal.os.CachedDeviceState
com.android.internal.os.ClassLoaderFactory
+com.android.internal.os.Clock$1
com.android.internal.os.Clock
com.android.internal.os.DebugStore$DebugStoreNative
com.android.internal.os.DebugStore$DebugStoreNativeImpl
@@ -11758,6 +11883,8 @@
com.android.internal.os.ProcessCpuTracker$FilterStats
com.android.internal.os.ProcessCpuTracker$Stats
com.android.internal.os.ProcessCpuTracker
+com.android.internal.os.ProcfsMemoryUtil$MemorySnapshot
+com.android.internal.os.ProcfsMemoryUtil
com.android.internal.os.RailStats
com.android.internal.os.RoSystemProperties
com.android.internal.os.RpmStats$PowerStateElement
@@ -11870,8 +11997,14 @@
com.android.internal.protolog.PerfettoProtoLogImpl
com.android.internal.protolog.ProtoLog
com.android.internal.protolog.ProtoLogCacheUpdater
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda0
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda1
+com.android.internal.protolog.ProtoLogDataSource$$ExternalSyntheticLambda2
+com.android.internal.protolog.ProtoLogDataSource$GroupConfig
com.android.internal.protolog.ProtoLogDataSource$Instance$TracingInstanceStartCallback
com.android.internal.protolog.ProtoLogDataSource$Instance$TracingInstanceStopCallback
+com.android.internal.protolog.ProtoLogDataSource$Instance
+com.android.internal.protolog.ProtoLogDataSource$ProtoLogConfig
com.android.internal.protolog.ProtoLogDataSource
com.android.internal.protolog.ProtoLogGroup
com.android.internal.protolog.ProtoLogImpl
@@ -12014,6 +12147,7 @@
com.android.internal.telephony.CellNetworkScanResult$1
com.android.internal.telephony.CellNetworkScanResult
com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider$1
+com.android.internal.telephony.CellularNetworkService$CellularNetworkServiceProvider
com.android.internal.telephony.CellularNetworkService
com.android.internal.telephony.ClientWakelockAccountant
com.android.internal.telephony.ClientWakelockTracker
@@ -12101,6 +12235,7 @@
com.android.internal.telephony.INumberVerificationCallback$Stub$Proxy
com.android.internal.telephony.INumberVerificationCallback$Stub
com.android.internal.telephony.INumberVerificationCallback
+com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy
com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
com.android.internal.telephony.IOnSubscriptionsChangedListener
com.android.internal.telephony.IOns$Stub$Proxy
@@ -12206,6 +12341,7 @@
com.android.internal.telephony.NetworkFactoryLegacyImpl$NetworkRequestInfo
com.android.internal.telephony.NetworkFactoryLegacyImpl
com.android.internal.telephony.NetworkFactoryShim
+com.android.internal.telephony.NetworkRegistrationManager$NetworkRegStateCallback
com.android.internal.telephony.NetworkRegistrationManager$NetworkServiceConnection
com.android.internal.telephony.NetworkRegistrationManager$RegManagerDeathRecipient
com.android.internal.telephony.NetworkRegistrationManager
@@ -12291,6 +12427,7 @@
com.android.internal.telephony.PhoneSubInfoController$$ExternalSyntheticLambda9
com.android.internal.telephony.PhoneSubInfoController$CallPhoneMethodHelper
com.android.internal.telephony.PhoneSubInfoController$PermissionCheckHelper
+com.android.internal.telephony.PhoneSubInfoController
com.android.internal.telephony.ProxyController$1
com.android.internal.telephony.ProxyController
com.android.internal.telephony.RIL$RadioProxyDeathRecipient
@@ -12863,6 +13000,7 @@
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$MmTelFeatureListener
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener
com.android.internal.telephony.imsphone.ImsPhoneCallTracker$SharedPreferenceProxy
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$VtDataUsageProvider
com.android.internal.telephony.imsphone.ImsPhoneCallTracker
com.android.internal.telephony.imsphone.ImsPhoneCommandInterface
com.android.internal.telephony.imsphone.ImsPhoneConnection$$ExternalSyntheticLambda0
@@ -13399,6 +13537,7 @@
com.android.internal.util.FastMath
com.android.internal.util.FastPrintWriter$DummyWriter
com.android.internal.util.FastPrintWriter-IA
+com.android.internal.util.FastPrintWriter
com.android.internal.util.FastXmlSerializer
com.android.internal.util.FileRotator$FileInfo
com.android.internal.util.FileRotator$Reader
@@ -13419,6 +13558,7 @@
com.android.internal.util.HexDump
com.android.internal.util.IState
com.android.internal.util.ImageUtils
+com.android.internal.util.IndentingPrintWriter
com.android.internal.util.IntPair
com.android.internal.util.JournaledFile
com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda0
@@ -13488,6 +13628,7 @@
com.android.internal.util.XmlPullParserWrapper
com.android.internal.util.XmlSerializerWrapper
com.android.internal.util.XmlUtils$ForcedTypedXmlPullParser
+com.android.internal.util.XmlUtils$ForcedTypedXmlSerializer
com.android.internal.util.XmlUtils$ReadMapCallback
com.android.internal.util.XmlUtils$WriteMapCallback
com.android.internal.util.XmlUtils
@@ -13533,6 +13674,7 @@
com.android.internal.util.function.pooled.PooledLambdaImpl$LambdaType$ReturnType
com.android.internal.util.function.pooled.PooledLambdaImpl$LambdaType
com.android.internal.util.function.pooled.PooledLambdaImpl$Pool
+com.android.internal.util.function.pooled.PooledLambdaImpl
com.android.internal.util.function.pooled.PooledPredicate
com.android.internal.util.function.pooled.PooledRunnable
com.android.internal.util.function.pooled.PooledSupplier$OfDouble
@@ -14025,6 +14167,7 @@
com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA
com.android.org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings
com.android.org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.BCDSAPublicKey
com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil
com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi
com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi$NoPadding
@@ -14134,8 +14277,13 @@
com.android.org.bouncycastle.util.encoders.Hex
com.android.org.bouncycastle.util.encoders.HexEncoder
com.android.org.bouncycastle.util.io.Streams
+com.android.org.conscrypt.OpenSSLRSAPublicKey
+com.android.org.conscrypt.OpenSSLX509Certificate
com.android.org.kxml2.io.KXmlParser$ContentSource
com.android.org.kxml2.io.KXmlParser$ValueContext
+com.android.org.kxml2.io.KXmlParser
+com.android.org.kxml2.io.KXmlSerializer
+com.android.os.coregraphics.HwuiStatsLog
com.android.phone.ecc.nano.CodedInputByteBufferNano
com.android.phone.ecc.nano.CodedOutputByteBufferNano$OutOfSpaceException
com.android.phone.ecc.nano.CodedOutputByteBufferNano
@@ -14303,6 +14451,7 @@
dalvik.system.AppSpecializationHooks
dalvik.system.BaseDexClassLoader$Reporter
dalvik.system.BaseDexClassLoader
+dalvik.system.BlockGuard$1
dalvik.system.BlockGuard$2
dalvik.system.BlockGuard$3
dalvik.system.BlockGuard$BlockGuardPolicyException
@@ -14761,6 +14910,7 @@
java.awt.font.TextAttribute
java.io.Bits
java.io.BufferedInputStream
+java.io.BufferedOutputStream
java.io.BufferedReader
java.io.BufferedWriter
java.io.ByteArrayInputStream
@@ -14827,6 +14977,7 @@
java.io.ObjectOutputStream$DebugTraceInfoStack
java.io.ObjectOutputStream$HandleTable
java.io.ObjectOutputStream$PutField
+java.io.ObjectOutputStream$PutFieldImpl
java.io.ObjectOutputStream$ReplaceTable
java.io.ObjectOutputStream
java.io.ObjectStreamClass$$ExternalSyntheticLambda0
@@ -15039,6 +15190,7 @@
java.lang.Thread
java.lang.ThreadDeath
java.lang.ThreadGroup
+java.lang.ThreadLocal$SuppliedThreadLocal
java.lang.ThreadLocal$ThreadLocalMap$Entry
java.lang.ThreadLocal$ThreadLocalMap
java.lang.ThreadLocal-IA
@@ -15054,8 +15206,10 @@
java.lang.UNIXProcess$2
java.lang.UNIXProcess$3
java.lang.UNIXProcess$ProcessPipeInputStream
+java.lang.UNIXProcess$ProcessPipeOutputStream
java.lang.UNIXProcess$ProcessReaperThreadFactory$1
java.lang.UNIXProcess$ProcessReaperThreadFactory
+java.lang.UNIXProcess
java.lang.UnsatisfiedLinkError
java.lang.UnsupportedClassVersionError
java.lang.UnsupportedOperationException
@@ -15310,8 +15464,10 @@
java.net.SocketException
java.net.SocketImpl
java.net.SocketImplFactory
+java.net.SocketInputStream
java.net.SocketOption
java.net.SocketOptions
+java.net.SocketOutputStream
java.net.SocketPermission
java.net.SocketTimeoutException
java.net.SocksConsts
@@ -15338,12 +15494,18 @@
java.nio.ByteBuffer
java.nio.ByteBufferAsCharBuffer
java.nio.ByteBufferAsDoubleBuffer
+java.nio.ByteBufferAsFloatBuffer
+java.nio.ByteBufferAsIntBuffer
+java.nio.ByteBufferAsLongBuffer
java.nio.ByteBufferAsShortBuffer
java.nio.ByteOrder
java.nio.CharBuffer
java.nio.DirectByteBuffer$MemoryRef
+java.nio.DirectByteBuffer
java.nio.DoubleBuffer
java.nio.FloatBuffer
+java.nio.HeapByteBuffer
+java.nio.HeapCharBuffer
java.nio.HeapIntBuffer
java.nio.IntBuffer
java.nio.InvalidMarkException
@@ -15495,6 +15657,7 @@
java.security.KeyStore
java.security.KeyStoreException
java.security.KeyStoreSpi
+java.security.MessageDigest$Delegate
java.security.MessageDigest
java.security.MessageDigestSpi
java.security.NoSuchAlgorithmException
@@ -15656,6 +15819,7 @@
java.text.RuleBasedCollator
java.text.SimpleDateFormat
java.text.StringCharacterIterator
+java.time.Clock$SystemClock
java.time.Clock
java.time.DateTimeException
java.time.DayOfWeek
@@ -15674,6 +15838,7 @@
java.time.Year
java.time.ZoneId
java.time.ZoneOffset
+java.time.ZoneRegion
java.time.ZonedDateTime$$ExternalSyntheticLambda0
java.time.ZonedDateTime$1
java.time.ZonedDateTime
@@ -15764,6 +15929,7 @@
java.time.zone.ZoneRulesException
java.time.zone.ZoneRulesProvider
java.util.AbstractCollection
+java.util.AbstractList$Itr
java.util.AbstractList$ListItr
java.util.AbstractList$RandomAccessSpliterator
java.util.AbstractList$RandomAccessSubList
@@ -15773,6 +15939,7 @@
java.util.AbstractList
java.util.AbstractMap$1
java.util.AbstractMap$2$1
+java.util.AbstractMap$2
java.util.AbstractMap$SimpleEntry
java.util.AbstractMap$SimpleImmutableEntry
java.util.AbstractMap$ViewCollection
@@ -15781,10 +15948,15 @@
java.util.AbstractSequentialList
java.util.AbstractSet
java.util.ArrayDeque$$ExternalSyntheticLambda1
+java.util.ArrayDeque$DeqIterator
+java.util.ArrayDeque$DescendingIterator
java.util.ArrayDeque
java.util.ArrayList$ArrayListSpliterator
+java.util.ArrayList$Itr
java.util.ArrayList$ListItr
+java.util.ArrayList$SubList$1
java.util.ArrayList$SubList$2
+java.util.ArrayList$SubList
java.util.ArrayList
java.util.ArrayPrefixHelpers$CumulateTask
java.util.ArrayPrefixHelpers$DoubleCumulateTask
@@ -15794,6 +15966,8 @@
java.util.Arrays$$ExternalSyntheticLambda1
java.util.Arrays$$ExternalSyntheticLambda2
java.util.Arrays$$ExternalSyntheticLambda3
+java.util.Arrays$ArrayItr
+java.util.Arrays$ArrayList
java.util.Arrays$NaturalOrder
java.util.Arrays
java.util.ArraysParallelSortHelpers$FJObject$Sorter
@@ -15805,7 +15979,9 @@
java.util.Calendar$Builder
java.util.Calendar
java.util.Collection
+java.util.Collections$1
java.util.Collections$2
+java.util.Collections$3
java.util.Collections$AsLIFOQueue
java.util.Collections$CheckedCollection
java.util.Collections$CheckedList
@@ -15819,29 +15995,50 @@
java.util.Collections$CheckedSortedSet
java.util.Collections$CopiesList
java.util.Collections$EmptyEnumeration
+java.util.Collections$EmptyIterator
+java.util.Collections$EmptyList
java.util.Collections$EmptyListIterator
+java.util.Collections$EmptyMap
+java.util.Collections$EmptySet
java.util.Collections$ReverseComparator2
java.util.Collections$ReverseComparator
java.util.Collections$SequencedSetFromMap
java.util.Collections$SetFromMap
+java.util.Collections$SingletonList
+java.util.Collections$SingletonMap
+java.util.Collections$SingletonSet
+java.util.Collections$SynchronizedCollection
java.util.Collections$SynchronizedList
+java.util.Collections$SynchronizedMap
java.util.Collections$SynchronizedNavigableMap
java.util.Collections$SynchronizedNavigableSet
+java.util.Collections$SynchronizedRandomAccessList
+java.util.Collections$SynchronizedSet
java.util.Collections$SynchronizedSortedMap
java.util.Collections$SynchronizedSortedSet
+java.util.Collections$UnmodifiableCollection$1
+java.util.Collections$UnmodifiableCollection
java.util.Collections$UnmodifiableList$1
java.util.Collections$UnmodifiableList
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
+java.util.Collections$UnmodifiableMap
java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap
java.util.Collections$UnmodifiableNavigableMap
java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet
java.util.Collections$UnmodifiableNavigableSet
+java.util.Collections$UnmodifiableRandomAccessList
java.util.Collections$UnmodifiableSequencedCollection
java.util.Collections$UnmodifiableSequencedMap
java.util.Collections$UnmodifiableSequencedSet
+java.util.Collections$UnmodifiableSet
java.util.Collections$UnmodifiableSortedMap
+java.util.Collections$UnmodifiableSortedSet
java.util.Collections-IA
java.util.Collections
java.util.ComparableTimSort
+java.util.Comparator$$ExternalSyntheticLambda0
java.util.Comparator$$ExternalSyntheticLambda1
java.util.Comparator$$ExternalSyntheticLambda2
java.util.Comparator$$ExternalSyntheticLambda3
@@ -15888,15 +16085,25 @@
java.util.Formatter$FormatString
java.util.Formatter
java.util.FormatterClosedException
+java.util.GregorianCalendar
+java.util.HashMap$EntryIterator
+java.util.HashMap$EntrySet
java.util.HashMap$EntrySpliterator
java.util.HashMap$HashIterator
java.util.HashMap$HashMapSpliterator
+java.util.HashMap$KeyIterator
+java.util.HashMap$KeySet
java.util.HashMap$KeySpliterator
+java.util.HashMap$Node
+java.util.HashMap$TreeNode
java.util.HashMap$UnsafeHolder
+java.util.HashMap$ValueIterator
java.util.HashMap$ValueSpliterator
+java.util.HashMap$Values
java.util.HashMap
java.util.HashSet
java.util.Hashtable$EntrySet
+java.util.Hashtable$Enumerator
java.util.Hashtable$HashtableEntry
java.util.Hashtable$KeySet
java.util.Hashtable$ValueCollection
@@ -15927,9 +16134,16 @@
java.util.ImmutableCollections$AbstractImmutableSet
java.util.ImmutableCollections$Access$1
java.util.ImmutableCollections$Access
+java.util.ImmutableCollections$List12
+java.util.ImmutableCollections$ListItr
+java.util.ImmutableCollections$ListN
+java.util.ImmutableCollections$Map1
java.util.ImmutableCollections$MapN$1
java.util.ImmutableCollections$MapN$MapNIterator
+java.util.ImmutableCollections$MapN
+java.util.ImmutableCollections$Set12
java.util.ImmutableCollections$SetN$SetNIterator
+java.util.ImmutableCollections$SetN
java.util.ImmutableCollections$SubList
java.util.ImmutableCollections-IA
java.util.InputMismatchException
@@ -15937,10 +16151,19 @@
java.util.JumboEnumSet$EnumSetIterator
java.util.JumboEnumSet
java.util.KeyValueHolder
+java.util.LinkedHashMap$Entry
+java.util.LinkedHashMap$LinkedEntryIterator
+java.util.LinkedHashMap$LinkedEntrySet
java.util.LinkedHashMap$LinkedHashIterator
+java.util.LinkedHashMap$LinkedKeyIterator
+java.util.LinkedHashMap$LinkedKeySet
+java.util.LinkedHashMap$LinkedValueIterator
+java.util.LinkedHashMap$LinkedValues
java.util.LinkedHashMap$ReversedLinkedHashMapView
java.util.LinkedHashMap
java.util.LinkedHashSet
+java.util.LinkedList$DescendingIterator
+java.util.LinkedList$ListItr
java.util.LinkedList$Node
java.util.LinkedList
java.util.List
@@ -15977,6 +16200,7 @@
java.util.PrimitiveIterator$OfInt$$ExternalSyntheticLambda0
java.util.PrimitiveIterator$OfInt
java.util.PrimitiveIterator
+java.util.PriorityQueue$Itr
java.util.PriorityQueue
java.util.Properties$EntrySet
java.util.Properties$LineReader
@@ -16048,13 +16272,18 @@
java.util.TreeMap$AscendingSubMap$AscendingEntrySetView
java.util.TreeMap$AscendingSubMap
java.util.TreeMap$DescendingSubMap
+java.util.TreeMap$EntryIterator
+java.util.TreeMap$EntrySet
+java.util.TreeMap$KeyIterator
java.util.TreeMap$KeySet
java.util.TreeMap$NavigableSubMap$DescendingSubMapKeyIterator
java.util.TreeMap$NavigableSubMap$EntrySetView
java.util.TreeMap$NavigableSubMap$SubMapEntryIterator
java.util.TreeMap$NavigableSubMap$SubMapIterator
+java.util.TreeMap$NavigableSubMap$SubMapKeyIterator
java.util.TreeMap$NavigableSubMap
java.util.TreeMap$PrivateEntryIterator
+java.util.TreeMap$TreeMapEntry
java.util.TreeMap$ValueIterator
java.util.TreeMap$Values
java.util.TreeMap
@@ -16073,6 +16302,8 @@
java.util.WeakHashMap$EntryIterator
java.util.WeakHashMap$EntrySet
java.util.WeakHashMap$HashIterator
+java.util.WeakHashMap$KeyIterator
+java.util.WeakHashMap$KeySet
java.util.WeakHashMap$ValueIterator
java.util.WeakHashMap$Values
java.util.WeakHashMap-IA
@@ -16099,6 +16330,8 @@
java.util.concurrent.ConcurrentHashMap$BulkTask
java.util.concurrent.ConcurrentHashMap$CollectionView
java.util.concurrent.ConcurrentHashMap$CounterCell
+java.util.concurrent.ConcurrentHashMap$EntryIterator
+java.util.concurrent.ConcurrentHashMap$EntrySetView
java.util.concurrent.ConcurrentHashMap$ForEachEntryTask
java.util.concurrent.ConcurrentHashMap$ForEachKeyTask
java.util.concurrent.ConcurrentHashMap$ForEachMappingTask
@@ -16111,6 +16344,7 @@
java.util.concurrent.ConcurrentHashMap$KeyIterator
java.util.concurrent.ConcurrentHashMap$KeySetView
java.util.concurrent.ConcurrentHashMap$KeySpliterator
+java.util.concurrent.ConcurrentHashMap$MapEntry
java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask
java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask
java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask
@@ -16141,11 +16375,14 @@
java.util.concurrent.ConcurrentHashMap$Traverser
java.util.concurrent.ConcurrentHashMap$TreeBin
java.util.concurrent.ConcurrentHashMap$TreeNode
+java.util.concurrent.ConcurrentHashMap$ValueIterator
+java.util.concurrent.ConcurrentHashMap$ValuesView
java.util.concurrent.ConcurrentHashMap
java.util.concurrent.ConcurrentLinkedDeque$Node
java.util.concurrent.ConcurrentLinkedDeque
java.util.concurrent.ConcurrentLinkedQueue$$ExternalSyntheticLambda0
java.util.concurrent.ConcurrentLinkedQueue$$ExternalSyntheticLambda2
+java.util.concurrent.ConcurrentLinkedQueue$Itr
java.util.concurrent.ConcurrentLinkedQueue$Node
java.util.concurrent.ConcurrentLinkedQueue
java.util.concurrent.ConcurrentMap$$ExternalSyntheticLambda0
@@ -16160,6 +16397,8 @@
java.util.concurrent.ConcurrentSkipListMap
java.util.concurrent.ConcurrentSkipListSet
java.util.concurrent.CopyOnWriteArrayList$$ExternalSyntheticLambda2
+java.util.concurrent.CopyOnWriteArrayList$COWIterator
+java.util.concurrent.CopyOnWriteArrayList
java.util.concurrent.CopyOnWriteArraySet
java.util.concurrent.CountDownLatch$Sync
java.util.concurrent.CountDownLatch
@@ -16170,8 +16409,11 @@
java.util.concurrent.Executor
java.util.concurrent.ExecutorService
java.util.concurrent.Executors$AutoShutdownDelegatedExecutorService$$ExternalSyntheticLambda0
+java.util.concurrent.Executors$AutoShutdownDelegatedExecutorService$$ExternalSyntheticLambda1
+java.util.concurrent.Executors$AutoShutdownDelegatedExecutorService
java.util.concurrent.Executors$DefaultThreadFactory
java.util.concurrent.Executors$DelegatedExecutorService
+java.util.concurrent.Executors$DelegatedScheduledExecutorService
java.util.concurrent.Executors$RunnableAdapter
java.util.concurrent.Executors
java.util.concurrent.ForkJoinPool$1
@@ -16206,6 +16448,8 @@
java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
+java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
+java.util.concurrent.ScheduledThreadPoolExecutor
java.util.concurrent.Semaphore$FairSync
java.util.concurrent.Semaphore$NonfairSync
java.util.concurrent.Semaphore$Sync
@@ -16216,6 +16460,7 @@
java.util.concurrent.ThreadPoolExecutor$AbortPolicy
java.util.concurrent.ThreadPoolExecutor$DiscardPolicy
java.util.concurrent.ThreadPoolExecutor$Worker
+java.util.concurrent.ThreadPoolExecutor
java.util.concurrent.TimeUnit$1
java.util.concurrent.TimeUnit
java.util.concurrent.TimeoutException
@@ -16255,9 +16500,11 @@
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantReadWriteLock$FairSync
java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
java.util.concurrent.locks.ReentrantReadWriteLock$Sync$HoldCounter
java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
java.util.concurrent.locks.ReentrantReadWriteLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
java.util.concurrent.locks.ReentrantReadWriteLock
java.util.function.BiConsumer
java.util.function.BiFunction$$ExternalSyntheticLambda0
@@ -16273,6 +16520,7 @@
java.util.function.DoubleSupplier
java.util.function.DoubleUnaryOperator$$ExternalSyntheticLambda0
java.util.function.DoubleUnaryOperator$$ExternalSyntheticLambda1
+java.util.function.DoubleUnaryOperator$$ExternalSyntheticLambda2
java.util.function.DoubleUnaryOperator
java.util.function.Function$$ExternalSyntheticLambda0
java.util.function.Function$$ExternalSyntheticLambda1
@@ -16426,6 +16674,7 @@
java.util.stream.Collectors
java.util.stream.DistinctOps$1$1
java.util.stream.DistinctOps$1$2
+java.util.stream.DistinctOps$1
java.util.stream.DistinctOps
java.util.stream.DoublePipeline$$ExternalSyntheticLambda0
java.util.stream.DoublePipeline$$ExternalSyntheticLambda4
@@ -16457,8 +16706,12 @@
java.util.stream.IntPipeline$$ExternalSyntheticLambda7
java.util.stream.IntPipeline$$ExternalSyntheticLambda8
java.util.stream.IntPipeline$1$1
+java.util.stream.IntPipeline$10
+java.util.stream.IntPipeline$1
java.util.stream.IntPipeline$4$1
+java.util.stream.IntPipeline$4
java.util.stream.IntPipeline$9
+java.util.stream.IntPipeline$Head
java.util.stream.IntPipeline$StatelessOp
java.util.stream.IntPipeline
java.util.stream.IntStream
@@ -16529,14 +16782,18 @@
java.util.stream.ReferencePipeline$15$1
java.util.stream.ReferencePipeline$15
java.util.stream.ReferencePipeline$2$1
+java.util.stream.ReferencePipeline$2
java.util.stream.ReferencePipeline$3$1
+java.util.stream.ReferencePipeline$3
java.util.stream.ReferencePipeline$4$1
+java.util.stream.ReferencePipeline$4
java.util.stream.ReferencePipeline$5$1
java.util.stream.ReferencePipeline$5
java.util.stream.ReferencePipeline$6$1
java.util.stream.ReferencePipeline$6
java.util.stream.ReferencePipeline$7$1
java.util.stream.ReferencePipeline$7
+java.util.stream.ReferencePipeline$Head
java.util.stream.ReferencePipeline$StatefulOp
java.util.stream.ReferencePipeline$StatelessOp
java.util.stream.ReferencePipeline
@@ -16550,6 +16807,7 @@
java.util.stream.SliceOps$1
java.util.stream.SliceOps
java.util.stream.SortedOps$AbstractRefSortingSink
+java.util.stream.SortedOps$OfRef
java.util.stream.SortedOps$RefSortingSink$$ExternalSyntheticLambda0
java.util.stream.SortedOps$RefSortingSink
java.util.stream.SortedOps$SizedRefSortingSink
@@ -16875,6 +17133,7 @@
jdk.internal.misc.VM
jdk.internal.misc.VirtualThreads
jdk.internal.ref.CleanerFactory
+jdk.internal.ref.CleanerImpl$PhantomCleanableRef
jdk.internal.ref.CleanerImpl
jdk.internal.ref.PhantomCleanable
jdk.internal.reflect.Reflection
@@ -16975,6 +17234,7 @@
libcore.util.Objects
libcore.util.SneakyThrow
libcore.util.XmlObjectFactory
+libcore.util.ZoneInfo
org.apache.harmony.dalvik.ddmc.Chunk
org.apache.harmony.dalvik.ddmc.ChunkHandler
org.apache.harmony.dalvik.ddmc.DdmServer
@@ -17021,6 +17281,7 @@
org.apache.http.params.CoreConnectionPNames
org.apache.http.params.HttpConnectionParams
org.apache.http.params.HttpParams
+org.ccil.cowan.tagsoup.AttributesImpl
org.ccil.cowan.tagsoup.AutoDetector
org.ccil.cowan.tagsoup.CommandLine
org.ccil.cowan.tagsoup.Element
@@ -17137,6 +17398,7 @@
sun.nio.ch.FileChannelImpl$SimpleFileLockTable
sun.nio.ch.FileChannelImpl$Unmapper
sun.nio.ch.FileChannelImpl-IA
+sun.nio.ch.FileChannelImpl
sun.nio.ch.FileDescriptorHolderSocketImpl
sun.nio.ch.FileDispatcher
sun.nio.ch.FileDispatcherImpl
@@ -17408,6 +17670,7 @@
sun.util.locale.BaseLocale
sun.util.locale.Extension
sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
+sun.util.locale.InternalLocaleBuilder$CaseInsensitiveString
sun.util.locale.InternalLocaleBuilder-IA
sun.util.locale.InternalLocaleBuilder
sun.util.locale.LanguageTag
@@ -17865,6 +18128,7 @@
[Landroid.widget.SpellChecker$SpellParser;
[Landroid.widget.TextView$BufferType;
[Landroid.widget.TextView$ChangeWatcher;
+[Landroid.window.BackTouchTracker$TouchTrackerState;
[Landroid.window.DesktopModeFlags$ToggleOverride;
[Landroid.window.DesktopModeFlags;
[Landroid.window.TransitionFilter$Requirement;
@@ -17976,6 +18240,7 @@
[Ljava.io.ObjectStreamClass$ClassDataSlot;
[Ljava.io.ObjectStreamClass$MemberSignature;
[Ljava.io.ObjectStreamField;
+[Ljava.io.Serializable;
[Ljava.lang.Boolean;
[Ljava.lang.Byte;
[Ljava.lang.CharSequence;
@@ -17989,6 +18254,7 @@
[Ljava.lang.Double;
[Ljava.lang.Enum;
[Ljava.lang.Integer;
+[Ljava.lang.Iterable;
[Ljava.lang.Long;
[Ljava.lang.Number;
[Ljava.lang.Object;
@@ -18004,6 +18270,7 @@
[Ljava.lang.Thread;
[Ljava.lang.ThreadGroup;
[Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
+[Ljava.lang.ThreadLocal;
[Ljava.lang.Throwable;
[Ljava.lang.Void;
[Ljava.lang.annotation.Annotation;
@@ -18085,6 +18352,7 @@
[Ljava.time.zone.ZoneOffsetTransitionRule$TimeDefinition;
[Ljava.time.zone.ZoneOffsetTransitionRule;
[Ljava.util.ArrayList;
+[Ljava.util.Comparator;
[Ljava.util.Comparators$NaturalOrderComparator;
[Ljava.util.Enumeration;
[Ljava.util.Formatter$Flags;
@@ -18097,7 +18365,9 @@
[Ljava.util.Locale$IsoCountryCode;
[Ljava.util.Locale;
[Ljava.util.Map$Entry;
+[Ljava.util.Set;
[Ljava.util.TimerTask;
+[Ljava.util.UUID;
[Ljava.util.WeakHashMap$Entry;
[Ljava.util.concurrent.ConcurrentHashMap$CounterCell;
[Ljava.util.concurrent.ConcurrentHashMap$Node;
@@ -18107,6 +18377,7 @@
[Ljava.util.concurrent.Future$State;
[Ljava.util.concurrent.RunnableScheduledFuture;
[Ljava.util.concurrent.TimeUnit;
+[Ljava.util.concurrent.atomic.AtomicReference;
[Ljava.util.concurrent.atomic.Striped64$Cell;
[Ljava.util.logging.Handler;
[Ljava.util.prefs.AbstractPreferences;
diff --git a/core/api/current.txt b/core/api/current.txt
index 3539ec1..1312753 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -18112,7 +18112,7 @@
method public void setThickness(@Px int);
method public void setThicknessRatio(@FloatRange(from=0.0f, fromInclusive=false) float);
method public void setUseLevel(boolean);
- field @FlaggedApi("com.android.graphics.flags.gradient_drawable_shape_rounded_cap") public static final int ARC = 4; // 0x4
+ field @FlaggedApi("com.android.graphics.flags.gradient_drawable_shape_arc_for_rounded_cap") public static final int ARC = 4; // 0x4
field public static final int LINE = 2; // 0x2
field public static final int LINEAR_GRADIENT = 0; // 0x0
field public static final int OVAL = 1; // 0x1
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 458c171..248f191 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1651,9 +1651,65 @@
/** @hide Similar to {@link OP_CONTROL_AUDIO}, but doesn't require capabilities. */
public static final int OP_CONTROL_AUDIO_PARTIAL = AppOpEnums.APP_OP_CONTROL_AUDIO_PARTIAL;
+ /**
+ * Access coarse eye tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_EYE_TRACKING_COARSE =
+ AppOpEnums.APP_OP_EYE_TRACKING_COARSE;
+
+ /**
+ * Access fine eye tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_EYE_TRACKING_FINE =
+ AppOpEnums.APP_OP_EYE_TRACKING_FINE;
+
+ /**
+ * Access face tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_FACE_TRACKING =
+ AppOpEnums.APP_OP_FACE_TRACKING;
+
+ /**
+ * Access hand tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_HAND_TRACKING =
+ AppOpEnums.APP_OP_HAND_TRACKING;
+
+ /**
+ * Access head tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_HEAD_TRACKING =
+ AppOpEnums.APP_OP_HEAD_TRACKING;
+
+ /**
+ * Access coarse scene tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_SCENE_UNDERSTANDING_COARSE =
+ AppOpEnums.APP_OP_SCENE_UNDERSTANDING_COARSE;
+
+ /**
+ * Access fine scene tracking data.
+ *
+ * @hide
+ */
+ public static final int OP_SCENE_UNDERSTANDING_FINE =
+ AppOpEnums.APP_OP_SCENE_UNDERSTANDING_FINE;
+
/** @hide */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public static final int _NUM_OP = 156;
+ public static final int _NUM_OP = 163;
/**
* All app ops represented as strings.
@@ -1813,6 +1869,13 @@
OPSTR_WRITE_SYSTEM_PREFERENCES,
OPSTR_CONTROL_AUDIO,
OPSTR_CONTROL_AUDIO_PARTIAL,
+ OPSTR_EYE_TRACKING_COARSE,
+ OPSTR_EYE_TRACKING_FINE,
+ OPSTR_FACE_TRACKING,
+ OPSTR_HAND_TRACKING,
+ OPSTR_HEAD_TRACKING,
+ OPSTR_SCENE_UNDERSTANDING_COARSE,
+ OPSTR_SCENE_UNDERSTANDING_FINE,
})
public @interface AppOpString {}
@@ -2579,6 +2642,36 @@
/** @hide Access to a audio playback and control APIs without capability requirements */
public static final String OPSTR_CONTROL_AUDIO_PARTIAL = "android:control_audio_partial";
+ /** @hide Access coarse eye tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_EYE_TRACKING_COARSE = "android:eye_tracking_coarse";
+
+ /** @hide Access fine eye tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_EYE_TRACKING_FINE = "android:eye_tracking_fine";
+
+ /** @hide Access face tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_FACE_TRACKING = "android:face_tracking";
+
+ /** @hide Access hand tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_HAND_TRACKING = "android:hand_tracking";
+
+ /** @hide Access head tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_HEAD_TRACKING = "android:head_tracking";
+
+ /** @hide Access coarse scene tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_SCENE_UNDERSTANDING_COARSE =
+ "android:scene_understanding_coarse";
+
+ /** @hide Access fine scene tracking data. */
+ @FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
+ public static final String OPSTR_SCENE_UNDERSTANDING_FINE =
+ "android:scene_understanding_fine";
+
/** {@link #sAppOpsToNote} not initialized yet for this op */
private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
/** Should not collect noting of this app-op in {@link #sAppOpsToNote} */
@@ -2657,6 +2750,14 @@
Flags.replaceBodySensorPermissionEnabled() ? OP_READ_HEART_RATE : OP_NONE,
Flags.replaceBodySensorPermissionEnabled() ? OP_READ_SKIN_TEMPERATURE : OP_NONE,
Flags.replaceBodySensorPermissionEnabled() ? OP_READ_OXYGEN_SATURATION : OP_NONE,
+ // Android XR
+ android.xr.Flags.xrManifestEntries() ? OP_EYE_TRACKING_COARSE : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_EYE_TRACKING_FINE : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_FACE_TRACKING : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_HAND_TRACKING : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_HEAD_TRACKING : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_SCENE_UNDERSTANDING_COARSE : OP_NONE,
+ android.xr.Flags.xrManifestEntries() ? OP_SCENE_UNDERSTANDING_FINE : OP_NONE,
};
/**
@@ -3192,6 +3293,41 @@
"CONTROL_AUDIO").setDefaultMode(AppOpsManager.MODE_FOREGROUND).build(),
new AppOpInfo.Builder(OP_CONTROL_AUDIO_PARTIAL, OPSTR_CONTROL_AUDIO_PARTIAL,
"CONTROL_AUDIO_PARTIAL").setDefaultMode(AppOpsManager.MODE_FOREGROUND).build(),
+ new AppOpInfo.Builder(OP_EYE_TRACKING_COARSE, OPSTR_EYE_TRACKING_COARSE,
+ "EYE_TRACKING_COARSE")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.EYE_TRACKING_COARSE : null)
+ .build(),
+ new AppOpInfo.Builder(OP_EYE_TRACKING_FINE, OPSTR_EYE_TRACKING_FINE,
+ "EYE_TRACKING_FINE")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.EYE_TRACKING_FINE : null)
+ .build(),
+ new AppOpInfo.Builder(OP_FACE_TRACKING, OPSTR_FACE_TRACKING,
+ "FACE_TRACKING")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.FACE_TRACKING : null)
+ .build(),
+ new AppOpInfo.Builder(OP_HAND_TRACKING, OPSTR_HAND_TRACKING,
+ "HAND_TRACKING")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.HAND_TRACKING : null)
+ .build(),
+ new AppOpInfo.Builder(OP_HEAD_TRACKING, OPSTR_HEAD_TRACKING,
+ "HEAD_TRACKING")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.HEAD_TRACKING : null)
+ .build(),
+ new AppOpInfo.Builder(OP_SCENE_UNDERSTANDING_COARSE, OPSTR_SCENE_UNDERSTANDING_COARSE,
+ "SCENE_UNDERSTANDING_COARSE")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.SCENE_UNDERSTANDING_COARSE : null)
+ .build(),
+ new AppOpInfo.Builder(OP_SCENE_UNDERSTANDING_FINE, OPSTR_SCENE_UNDERSTANDING_FINE,
+ "SCENE_UNDERSTANDING_FINE")
+ .setPermission(android.xr.Flags.xrManifestEntries()
+ ? Manifest.permission.SCENE_UNDERSTANDING_FINE : null)
+ .build(),
};
// The number of longs needed to form a full bitmask of app ops
@@ -3301,6 +3437,15 @@
}
/**
+ * Returns whether the provided {@code op} is a valid op code or not.
+ *
+ * @hide
+ */
+ public static boolean isValidOp(int op) {
+ return op >= 0 && op < sAppOpInfos.length;
+ }
+
+ /**
* @hide
*/
public static int strDebugOpToOp(String op) {
diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java
index fa977c9..2daa52b 100644
--- a/core/java/android/app/AutomaticZenRule.java
+++ b/core/java/android/app/AutomaticZenRule.java
@@ -228,7 +228,7 @@
public AutomaticZenRule(Parcel source) {
enabled = source.readInt() == ENABLED;
if (source.readInt() == ENABLED) {
- name = getTrimmedString(source.readString());
+ name = getTrimmedString(source.readString8());
}
interruptionFilter = source.readInt();
conditionId = getTrimmedUri(source.readParcelable(null, android.net.Uri.class));
@@ -238,11 +238,11 @@
source.readParcelable(null, android.content.ComponentName.class));
creationTime = source.readLong();
mZenPolicy = source.readParcelable(null, ZenPolicy.class);
- mPkg = source.readString();
+ mPkg = source.readString8();
mDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class);
mAllowManualInvocation = source.readBoolean();
mIconResId = source.readInt();
- mTriggerDescription = getTrimmedString(source.readString(), MAX_DESC_LENGTH);
+ mTriggerDescription = getTrimmedString(source.readString8(), MAX_DESC_LENGTH);
mType = source.readInt();
}
@@ -514,7 +514,7 @@
dest.writeInt(enabled ? ENABLED : DISABLED);
if (name != null) {
dest.writeInt(1);
- dest.writeString(name);
+ dest.writeString8(name);
} else {
dest.writeInt(0);
}
@@ -524,11 +524,11 @@
dest.writeParcelable(configurationActivity, 0);
dest.writeLong(creationTime);
dest.writeParcelable(mZenPolicy, 0);
- dest.writeString(mPkg);
+ dest.writeString8(mPkg);
dest.writeParcelable(mDeviceEffects, 0);
dest.writeBoolean(mAllowManualInvocation);
dest.writeInt(mIconResId);
- dest.writeString(mTriggerDescription);
+ dest.writeString8(mTriggerDescription);
dest.writeInt(mType);
}
diff --git a/core/java/android/app/DreamManager.java b/core/java/android/app/DreamManager.java
index c597a9d..555006b 100644
--- a/core/java/android/app/DreamManager.java
+++ b/core/java/android/app/DreamManager.java
@@ -71,8 +71,11 @@
@TestApi
@RequiresPermission(WRITE_SECURE_SETTINGS)
public void setScreensaverEnabled(boolean enabled) {
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.SCREENSAVER_ENABLED, enabled ? 1 : 0, UserHandle.USER_CURRENT);
+ try {
+ mService.setScreensaverEnabled(enabled);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
}
/**
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index eb9feb9..8af5b1b 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -189,6 +189,7 @@
* @param arguments Any additional arguments that were supplied when the
* instrumentation was started.
*/
+ @android.ravenwood.annotation.RavenwoodKeep
public void onCreate(Bundle arguments) {
}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 719e438..cc72d8f 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -25,6 +25,9 @@
import static android.app.admin.DevicePolicyResources.UNDEFINED;
import static android.graphics.drawable.Icon.TYPE_URI;
import static android.graphics.drawable.Icon.TYPE_URI_ADAPTIVE_BITMAP;
+import static android.util.TypedValue.COMPLEX_UNIT_PX;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static java.util.Objects.requireNonNull;
@@ -6001,6 +6004,8 @@
contentView.setViewVisibility(p.mTextViewId, View.GONE);
contentView.setTextViewText(p.mTextViewId, null);
}
+
+ updateExpanderAlignment(contentView, p, hasSecondLine);
setHeaderlessVerticalMargins(contentView, p, hasSecondLine);
// Update margins to leave space for the top line (but not for headerless views like
@@ -6010,12 +6015,29 @@
int margin = getContentMarginTop(mContext,
R.dimen.notification_2025_content_margin_top);
contentView.setViewLayoutMargin(R.id.notification_main_column,
- RemoteViews.MARGIN_TOP, margin, TypedValue.COMPLEX_UNIT_PX);
+ RemoteViews.MARGIN_TOP, margin, COMPLEX_UNIT_PX);
}
return contentView;
}
+ private static void updateExpanderAlignment(RemoteViews contentView,
+ StandardTemplateParams p, boolean hasSecondLine) {
+ if (notificationsRedesignTemplates() && p.mHeaderless) {
+ if (!hasSecondLine) {
+ // If there's no text, let's center the expand button vertically to align things
+ // more nicely. This is handled separately for notifications that use a
+ // NotificationHeaderView, see NotificationHeaderView#centerTopLine.
+ contentView.setViewLayoutHeight(R.id.expand_button, MATCH_PARENT,
+ COMPLEX_UNIT_PX);
+ } else {
+ // Otherwise, just use the default height for the button to keep it top-aligned.
+ contentView.setViewLayoutHeight(R.id.expand_button, WRAP_CONTENT,
+ COMPLEX_UNIT_PX);
+ }
+ }
+ }
+
private static void setHeaderlessVerticalMargins(RemoteViews contentView,
StandardTemplateParams p, boolean hasSecondLine) {
if (Flags.notificationsRedesignTemplates() || !p.mHeaderless) {
@@ -9504,14 +9526,21 @@
.viewType(viewType)
.highlightExpander(isConversationLayout)
.hideProgress(true)
- .text(null)
.hideLeftIcon(isOneToOne)
.hideRightIcon(hideRightIcons || isOneToOne);
if (notificationsRedesignTemplates()) {
+ String lastMessage = !mMessages.isEmpty()
+ ? mMessages.getLast().mText.toString() : null;
+
p.title(conversationTitle)
+ // The text is not actually displayed like this (since we're using a
+ // MessagingLinearLayout instead of the regular text), but we're using it to
+ // know whether the notification will have a second line in practice.
+ .text(lastMessage)
.hideAppName(isCollapsed);
} else {
p.title(isLegacyHeaderless ? conversationTitle : null)
+ .text(null)
.headerTextSecondary(isLegacyHeaderless ? null : conversationTitle);
}
RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(
@@ -9560,7 +9589,7 @@
int marginStart = res.getDimensionPixelSize(
R.dimen.notification_2025_content_margin_start);
contentView.setViewLayoutMargin(R.id.title,
- RemoteViews.MARGIN_START, marginStart, TypedValue.COMPLEX_UNIT_PX);
+ RemoteViews.MARGIN_START, marginStart, COMPLEX_UNIT_PX);
}
if (isLegacyHeaderless) {
// Collapsed legacy messaging style has a 1-line limit.
diff --git a/core/java/android/app/OWNERS b/core/java/android/app/OWNERS
index 7a811a1..5b0cf115 100644
--- a/core/java/android/app/OWNERS
+++ b/core/java/android/app/OWNERS
@@ -132,7 +132,7 @@
per-file ConfigurationController.java = file:/services/core/java/com/android/server/wm/OWNERS
per-file *ScreenCapture* = file:/services/core/java/com/android/server/wm/OWNERS
per-file ComponentOptions.java = file:/services/core/java/com/android/server/wm/OWNERS
-
+per-file Presentation.java = file:/services/core/java/com/android/server/wm/OWNERS
# Multitasking
per-file multitasking.aconfig = file:/services/core/java/com/android/server/wm/OWNERS
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java
index bdab39d..f39e2dd 100644
--- a/core/java/android/app/Presentation.java
+++ b/core/java/android/app/Presentation.java
@@ -20,6 +20,8 @@
import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
+import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays;
+
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -34,6 +36,8 @@
import android.view.Display;
import android.view.Gravity;
import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams.WindowType;
@@ -277,6 +281,11 @@
@Override
public void show() {
super.show();
+
+ WindowInsetsController controller = getWindow().getInsetsController();
+ if (controller != null && enablePresentationForConnectedDisplays()) {
+ controller.hide(WindowInsets.Type.systemBars());
+ }
}
/**
diff --git a/core/java/android/app/TEST_MAPPING b/core/java/android/app/TEST_MAPPING
index e93d8bdb..3a02188 100644
--- a/core/java/android/app/TEST_MAPPING
+++ b/core/java/android/app/TEST_MAPPING
@@ -169,6 +169,23 @@
"name": "CtsWindowManagerBackgroundActivityTestCases"
}
],
+ // v2/sysui/suite/test-mapping-sysui-screenshot-test
+ "sysui-screenshot-test": [
+ {
+ "name": "SystemUIGoogleScreenshotTests",
+ "options": [
+ {
+ "exclude-annotation": "org.junit.Ignore"
+ },
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ },
+ {
+ "exclude-annotation": "android.platform.test.annotations.Postsubmit"
+ }
+ ]
+ }
+ ],
"postsubmit": [
{
"file_patterns": ["(/|^)ActivityThreadClientTest.java"],
diff --git a/core/java/android/app/contentsuggestions/OWNERS b/core/java/android/app/contentsuggestions/OWNERS
index 5f8de77..3d21a6a 100644
--- a/core/java/android/app/contentsuggestions/OWNERS
+++ b/core/java/android/app/contentsuggestions/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 643919
hackz@google.com
-volnov@google.com
diff --git a/core/java/android/app/contextualsearch/flags.aconfig b/core/java/android/app/contextualsearch/flags.aconfig
index 1de034b..1a14b20 100644
--- a/core/java/android/app/contextualsearch/flags.aconfig
+++ b/core/java/android/app/contextualsearch/flags.aconfig
@@ -23,6 +23,18 @@
bug: "371065456"
}
+
+flag {
+ name: "report_secure_surfaces_in_assist_structure"
+ namespace: "windowing_frontend"
+ description: "SurfaceView reports when the surface is using a SECURE flag."
+ bug: "390504528"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+
flag {
name: "contextual_search_prevent_self_capture"
namespace: "sysui_integrations"
diff --git a/core/java/android/app/people/OWNERS b/core/java/android/app/people/OWNERS
index 7371a88..399511a 100644
--- a/core/java/android/app/people/OWNERS
+++ b/core/java/android/app/people/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 978868
-danningc@google.com
-juliacr@google.com
\ No newline at end of file
+juliacr@google.com
diff --git a/core/java/android/app/wearable/OWNERS b/core/java/android/app/wearable/OWNERS
index 497eaf0..56c8ca5 100644
--- a/core/java/android/app/wearable/OWNERS
+++ b/core/java/android/app/wearable/OWNERS
@@ -2,4 +2,3 @@
hackz@google.com
oni@google.com
tomchan@google.com
-volnov@google.com
\ No newline at end of file
diff --git a/core/java/android/companion/virtual/flags/flags.aconfig b/core/java/android/companion/virtual/flags/flags.aconfig
index 67ade79..0085e4f 100644
--- a/core/java/android/companion/virtual/flags/flags.aconfig
+++ b/core/java/android/companion/virtual/flags/flags.aconfig
@@ -143,3 +143,10 @@
is_fixed_read_only: true
bug: "370928384"
}
+
+flag {
+ name: "device_aware_settings_override"
+ namespace: "virtual_devices"
+ description: "Settings override for virtual devices"
+ bug: "371801645"
+}
diff --git a/core/java/android/content/integrity/OWNERS b/core/java/android/content/integrity/OWNERS
index 20c758a..ca65fda 100644
--- a/core/java/android/content/integrity/OWNERS
+++ b/core/java/android/content/integrity/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 722021
toddke@android.com
-toddke@google.com
patb@google.com
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index e645060..fd59ea9 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -1347,6 +1347,33 @@
314961188L;
/**
+ * Excludes the packages the override is applied to from the camera compatibility treatment for
+ * fixed-orientation apps, which simulates running on a portrait device, in the orientation
+ * requested by the app.
+ *
+ * <p>This treatment aims to mitigate camera issues on large screens, like stretched or sideways
+ * previews. It simulates running on a portrait device by:
+ * <ul>
+ * <li>Letterboxing the app window,
+ * <li>Cropping the camera buffer to match the app's requested orientation,
+ * <li>Setting the camera sensor orientation to portrait.
+ * <li>Setting the display rotation to match the app's requested orientation, given portrait
+ * natural orientation,
+ * <li>Refreshes the activity to trigger new camera setup, with sandboxed values.
+ * </ul>
+ *
+ * <p>By setting this override to {@code true}, it disables the camera compatibility treatment
+ * which simulates app's requested orientation.
+ *
+ * @hide
+ */
+ @ChangeId
+ @Overridable
+ @Disabled
+ public static final long OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION =
+ 398195815L; // buganizer id
+
+ /**
* This change id forces the packages it is applied to sandbox {@link android.view.View} API to
* an activity bounds for:
*
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 9e91f59..49fd634 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -5000,10 +5000,9 @@
* supports the Android XR Spatial APIs. The feature version indicates the highest version of
* the Android XR Spatial APIs supported by the device.
*
- * <p>Also see <a href="https://developer.android.com/xr">Getting started with Spatializing
- * your app</a>.
+ * <p>Also see <a href="https://developer.android.com/develop/xr">Develop with the Android XR
+ * SDK</a>.
*/
- // TODO(b/374330735): update public documentation once link content is finalized
@FlaggedApi(android.xr.Flags.FLAG_XR_MANIFEST_ENTRIES)
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_XR_API_SPATIAL =
diff --git a/core/java/android/content/pm/parsing/OWNERS b/core/java/android/content/pm/parsing/OWNERS
index 8049d5c..445a833 100644
--- a/core/java/android/content/pm/parsing/OWNERS
+++ b/core/java/android/content/pm/parsing/OWNERS
@@ -2,4 +2,3 @@
chiuwinson@google.com
patb@google.com
-toddke@google.com
diff --git a/core/java/android/content/pm/permission/OWNERS b/core/java/android/content/pm/permission/OWNERS
index cf7e689..8ef8474 100644
--- a/core/java/android/content/pm/permission/OWNERS
+++ b/core/java/android/content/pm/permission/OWNERS
@@ -3,6 +3,5 @@
include platform/frameworks/base:/core/java/android/permission/OWNERS
toddke@android.com
-toddke@google.com
patb@google.com
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java
index c4af871..bebca57 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -1499,7 +1499,7 @@
}
@VisibleForTesting
- static final class DisplayListenerDelegate {
+ public static final class DisplayListenerDelegate {
public final DisplayListener mListener;
public volatile long mInternalEventFlagsMask;
@@ -1536,7 +1536,7 @@
}
@VisibleForTesting
- boolean isEventFilterExplicit() {
+ public boolean isEventFilterExplicit() {
return mIsEventFilterExplicit;
}
@@ -1892,7 +1892,7 @@
}
@VisibleForTesting
- CopyOnWriteArrayList<DisplayListenerDelegate> getDisplayListeners() {
+ public CopyOnWriteArrayList<DisplayListenerDelegate> getDisplayListeners() {
return mDisplayListeners;
}
}
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index 953ee08..5b5360e 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -485,6 +485,9 @@
/**
* Returns the list of ContextHubInfo objects describing the available Context Hubs.
*
+ * To find the list of hubs that include all Hubs (including both Context Hubs and Vendor Hubs),
+ * use the {@link #getHubs()} method instead.
+ *
* @return the list of ContextHubInfo objects
*
* @see ContextHubInfo
@@ -499,8 +502,8 @@
}
/**
- * Returns the list of HubInfo objects describing the available hubs (including ContextHub and
- * VendorHub). This method is primarily used for debugging purposes as most clients care about
+ * Returns the list of HubInfo objects describing the available hubs (including Context Hubs and
+ * Vendor Hubs). This method is primarily used for debugging purposes as most clients care about
* endpoints and services more than hubs.
*
* @return the list of HubInfo objects
diff --git a/core/java/android/hardware/serial/OWNERS b/core/java/android/hardware/serial/OWNERS
new file mode 100644
index 0000000..bc2c66a
--- /dev/null
+++ b/core/java/android/hardware/serial/OWNERS
@@ -0,0 +1,6 @@
+kkaplon@google.com
+mjel@google.com
+chominskib@google.com
+wzwonarz@google.com
+gstepniewski@google.com
+xutan@google.com
\ No newline at end of file
diff --git a/core/java/android/hardware/serial/flags/flags.aconfig b/core/java/android/hardware/serial/flags/flags.aconfig
new file mode 100644
index 0000000..d8244ba
--- /dev/null
+++ b/core/java/android/hardware/serial/flags/flags.aconfig
@@ -0,0 +1,10 @@
+package: "android.hardware.serial"
+container: "system"
+
+flag {
+ name: "enable_serial_api"
+ namespace: "serial"
+ description: "Feature flag to enable serial API"
+ bug: "369155426"
+ is_exported: true
+}
\ No newline at end of file
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 1e6469c..0ceafa0 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -1515,7 +1515,7 @@
VERSION_CODES.VANILLA_ICE_CREAM * SDK_INT_MULTIPLIER;
/**
- * The upcoming, not yet finalized, version of Android.
+ * Android 36.0.
*/
public static final int BAKLAVA = VERSION_CODES.BAKLAVA * SDK_INT_MULTIPLIER;
}
diff --git a/core/java/android/os/CombinedMessageQueue/MessageQueue.java b/core/java/android/os/CombinedMessageQueue/MessageQueue.java
index 7497234..ce1717b 100644
--- a/core/java/android/os/CombinedMessageQueue/MessageQueue.java
+++ b/core/java/android/os/CombinedMessageQueue/MessageQueue.java
@@ -92,11 +92,8 @@
// queue for async messages when inserting a message at the tail.
private int mAsyncMessageCount;
- /**
- * @hide
- */
private final AtomicLong mMessageCount = new AtomicLong();
- private final Thread mThread;
+ private final String mThreadName;
private final long mTid;
/**
@@ -133,7 +130,7 @@
mUseConcurrent = sIsProcessAllowedToUseConcurrent;
mQuitAllowed = quitAllowed;
mPtr = nativeInit();
- mThread = Thread.currentThread();
+ mThreadName = Thread.currentThread().getName();
mTid = Process.myTid();
}
@@ -223,10 +220,10 @@
traceMessageCount();
PerfettoTrace.instant(PerfettoTrace.MQ_CATEGORY, "message_queue_send")
- .addFlow(msg.mEventId.get())
+ .setFlow(msg.mEventId.get())
.beginProto()
.beginNested(2004 /* message_queue */)
- .addField(2 /* receiving_thread_name */, mThread.getName())
+ .addField(2 /* receiving_thread_name */, mThreadName)
.addField(3 /* message_code */, msg.what)
.addField(4 /* message_delay_ms */, when - SystemClock.uptimeMillis())
.endNested()
@@ -237,7 +234,7 @@
/** @hide */
private void traceMessageCount() {
PerfettoTrace.counter(PerfettoTrace.MQ_CATEGORY, mMessageCount.get())
- .usingThreadCounterTrack(mTid, mThread.getName())
+ .usingThreadCounterTrack(mTid, mThreadName)
.emit();
}
diff --git a/core/java/android/os/IBinder.java b/core/java/android/os/IBinder.java
index 8cfd324..48e6249 100644
--- a/core/java/android/os/IBinder.java
+++ b/core/java/android/os/IBinder.java
@@ -451,7 +451,7 @@
* @param executor The executor on which to run the callback.
* @param callback The callback used to deliver state change notifications.
*
- * <p>@throws {@link UnsupportedOperationException} if the kernel binder driver does not support
+ * @throws {@link UnsupportedOperationException} if the kernel binder driver does not support
* this feature.
*/
@FlaggedApi(Flags.FLAG_BINDER_FROZEN_STATE_CHANGE_CALLBACK)
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java
index 1329b90..3ff6e05 100644
--- a/core/java/android/os/Looper.java
+++ b/core/java/android/os/Looper.java
@@ -205,7 +205,7 @@
.addField(1 /* sending_thread_name */, msg.mSendingThreadName)
.endNested()
.endProto()
- .addTerminatingFlow(msg.mEventId.get())
+ .setTerminatingFlow(msg.mEventId.get())
.emit();
// This must be in a local variabe, in case a UI event sets the logger
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index b22d177..69e84e3 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -23,7 +23,7 @@
import com.android.internal.annotations.VisibleForTesting;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
/**
*
@@ -43,7 +43,7 @@
*
* @hide Only for use within the system server.
*/
- public final AtomicInteger mEventId = new AtomicInteger();
+ public final AtomicLong mEventId = new AtomicLong();
/**
* User-defined message code so that the recipient can identify
diff --git a/core/java/android/os/OWNERS b/core/java/android/os/OWNERS
index 727dcba..a6785ba 100644
--- a/core/java/android/os/OWNERS
+++ b/core/java/android/os/OWNERS
@@ -78,7 +78,7 @@
per-file PatternMatcher* = file:/PACKAGE_MANAGER_OWNERS
# PermissionEnforcer
-per-file PermissionEnforcer.java = tweek@google.com, brufino@google.com
+per-file PermissionEnforcer.java = tweek@google.com
# RemoteCallbackList
per-file RemoteCallbackList.java = shayba@google.com
diff --git a/core/java/android/os/PerfettoTrackEventExtra.java b/core/java/android/os/PerfettoTrackEventExtra.java
index f4b5dfe..2848bcb 100644
--- a/core/java/android/os/PerfettoTrackEventExtra.java
+++ b/core/java/android/os/PerfettoTrackEventExtra.java
@@ -172,7 +172,6 @@
private final Pool<FieldDouble> mFieldDoubleCache;
private final Pool<FieldString> mFieldStringCache;
private final Pool<FieldNested> mFieldNestedCache;
- private final Pool<Flow> mFlowCache;
private final Pool<Builder> mBuilderCache;
private Builder() {
@@ -187,7 +186,6 @@
mFieldDoubleCache = mExtra.mFieldDoubleCache;
mFieldStringCache = mExtra.mFieldStringCache;
mFieldNestedCache = mExtra.mFieldNestedCache;
- mFlowCache = mExtra.mFlowCache;
mBuilderCache = mExtra.mBuilderCache;
mCounterInt64 = mExtra.getCounterInt64();
@@ -227,7 +225,6 @@
mFieldStringCache.reset();
mFieldNestedCache.reset();
mBuilderCache.reset();
- mFlowCache.reset();
mExtra.reset();
// Reset after on init in case the thread created builders without calling emit
@@ -325,39 +322,7 @@
/**
* Adds a flow with {@code id}.
*/
- public Builder addFlow(int id) {
- if (!mIsCategoryEnabled) {
- return this;
- }
- if (DEBUG) {
- checkParent();
- }
- Flow flow = mFlowCache.get(sFlowSupplier);
- flow.setProcessFlow(id);
- mExtra.addPerfettoPointer(flow);
- return this;
- }
-
- /**
- * Adds a terminating flow with {@code id}.
- */
- public Builder addTerminatingFlow(int id) {
- if (!mIsCategoryEnabled) {
- return this;
- }
- if (DEBUG) {
- checkParent();
- }
- Flow flow = mFlowCache.get(sFlowSupplier);
- flow.setProcessTerminatingFlow(id);
- mExtra.addPerfettoPointer(flow);
- return this;
- }
-
- /**
- * Adds a flow with {@code id}.
- */
- public Builder setFlow(int id) {
+ public Builder setFlow(long id) {
if (!mIsCategoryEnabled) {
return this;
}
@@ -372,7 +337,7 @@
/**
* Adds a terminating flow with {@code id}.
*/
- public Builder setTerminatingFlow(int id) {
+ public Builder setTerminatingFlow(long id) {
if (!mIsCategoryEnabled) {
return this;
}
@@ -670,7 +635,6 @@
private final Pool<FieldDouble> mFieldDoubleCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private final Pool<FieldString> mFieldStringCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private final Pool<FieldNested> mFieldNestedCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
- private final Pool<Flow> mFlowCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private final Pool<Builder> mBuilderCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private static final NativeAllocationRegistry sRegistry =
diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java
index 77b6d70..2736b60 100644
--- a/core/java/android/os/PowerManagerInternal.java
+++ b/core/java/android/os/PowerManagerInternal.java
@@ -357,4 +357,9 @@
* This may affect dream eligibility.
*/
public abstract void setDevicePostured(boolean isPostured);
+
+ /**
+ * Notifies PowerManager that settings have changed and that it should refresh its state.
+ */
+ public abstract void updateSettings();
}
diff --git a/core/java/android/preference/OWNERS b/core/java/android/preference/OWNERS
index b4cb9ec..38a5abd 100644
--- a/core/java/android/preference/OWNERS
+++ b/core/java/android/preference/OWNERS
@@ -1,5 +1,4 @@
lpf@google.com
-pavlis@google.com
clarabayarri@google.com
-per-file SeekBarVolumizer.java = jmtrivi@google.com
\ No newline at end of file
+per-file SeekBarVolumizer.java = jmtrivi@google.com
diff --git a/core/java/android/print/OWNERS b/core/java/android/print/OWNERS
index ce79f5d..15f6406 100644
--- a/core/java/android/print/OWNERS
+++ b/core/java/android/print/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 47273
anothermark@google.com
-kumarashishg@google.com
bmgordon@google.com
diff --git a/core/java/android/printservice/OWNERS b/core/java/android/printservice/OWNERS
index ce79f5d..15f6406 100644
--- a/core/java/android/printservice/OWNERS
+++ b/core/java/android/printservice/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 47273
anothermark@google.com
-kumarashishg@google.com
bmgordon@google.com
diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl
index 3ca9d93..fdacd60 100644
--- a/core/java/android/service/dreams/IDreamManager.aidl
+++ b/core/java/android/service/dreams/IDreamManager.aidl
@@ -59,4 +59,6 @@
float screenBrightnessFloat, int screenBrightnessInt,
boolean useNormalBrightnessForDoze);
oneway void finishSelfOneway(in IBinder token, boolean immediate);
+ @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)")
+ void setScreensaverEnabled(boolean enabled);
}
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index 4cbd5be..1cf43d4 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -2636,7 +2636,7 @@
enabled = source.readInt() == 1;
snoozing = source.readInt() == 1;
if (source.readInt() == 1) {
- name = source.readString();
+ name = source.readString8();
}
zenMode = source.readInt();
conditionId = source.readParcelable(null, android.net.Uri.class);
@@ -2644,18 +2644,18 @@
component = source.readParcelable(null, android.content.ComponentName.class);
configurationActivity = source.readParcelable(null, android.content.ComponentName.class);
if (source.readInt() == 1) {
- id = source.readString();
+ id = source.readString8();
}
creationTime = source.readLong();
if (source.readInt() == 1) {
- enabler = source.readString();
+ enabler = source.readString8();
}
zenPolicy = source.readParcelable(null, android.service.notification.ZenPolicy.class);
zenDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class);
- pkg = source.readString();
+ pkg = source.readString8();
allowManualInvocation = source.readBoolean();
- iconResName = source.readString();
- triggerDescription = source.readString();
+ iconResName = source.readString8();
+ triggerDescription = source.readString8();
type = source.readInt();
userModifiedFields = source.readInt();
zenPolicyUserModifiedFields = source.readInt();
@@ -2703,7 +2703,7 @@
dest.writeInt(snoozing ? 1 : 0);
if (name != null) {
dest.writeInt(1);
- dest.writeString(name);
+ dest.writeString8(name);
} else {
dest.writeInt(0);
}
@@ -2714,23 +2714,23 @@
dest.writeParcelable(configurationActivity, 0);
if (id != null) {
dest.writeInt(1);
- dest.writeString(id);
+ dest.writeString8(id);
} else {
dest.writeInt(0);
}
dest.writeLong(creationTime);
if (enabler != null) {
dest.writeInt(1);
- dest.writeString(enabler);
+ dest.writeString8(enabler);
} else {
dest.writeInt(0);
}
dest.writeParcelable(zenPolicy, 0);
dest.writeParcelable(zenDeviceEffects, 0);
- dest.writeString(pkg);
+ dest.writeString8(pkg);
dest.writeBoolean(allowManualInvocation);
- dest.writeString(iconResName);
- dest.writeString(triggerDescription);
+ dest.writeString8(iconResName);
+ dest.writeString8(triggerDescription);
dest.writeInt(type);
dest.writeInt(userModifiedFields);
dest.writeInt(zenPolicyUserModifiedFields);
diff --git a/core/java/android/speech/OWNERS b/core/java/android/speech/OWNERS
index 32f4822..f228ba46 100644
--- a/core/java/android/speech/OWNERS
+++ b/core/java/android/speech/OWNERS
@@ -1,3 +1,2 @@
-volnov@google.com
eugeniom@google.com
schfan@google.com
diff --git a/core/java/android/text/OWNERS b/core/java/android/text/OWNERS
index 0935ffd9..b493ef7 100644
--- a/core/java/android/text/OWNERS
+++ b/core/java/android/text/OWNERS
@@ -4,7 +4,6 @@
halilibo@google.com
haoyuchang@google.com
justinghan@google.com
-klippenstein@google.com
nona@google.com
seanmcq@google.com
siyamed@google.com
diff --git a/core/java/android/util/apk/OWNERS b/core/java/android/util/apk/OWNERS
index 0f4e869..f267f9a 100644
--- a/core/java/android/util/apk/OWNERS
+++ b/core/java/android/util/apk/OWNERS
@@ -1,3 +1,2 @@
include /core/java/android/content/pm/OWNERS
-cbrubaker@google.com
mpgroover@google.com
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index f58baff..4fc894c 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -789,6 +789,12 @@
in @nullable ImeTracker.Token statsToken);
/**
+ * Updates the currently animating insets types of a remote process.
+ */
+ @EnforcePermission("MANAGE_APP_TOKENS")
+ void updateDisplayWindowAnimatingTypes(int displayId, int animatingTypes);
+
+ /**
* Called to get the expected window insets.
*
* @return {@code true} if system bars are always consumed.
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 1f8f0820..7d6d5a2 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -272,6 +272,15 @@
in @nullable ImeTracker.Token imeStatsToken);
/**
+ * Notifies WindowState what insets types are currently running within the Window.
+ * see {@link com.android.server.wm.WindowState#mInsetsAnimationRunning).
+ *
+ * @param window The window that is insets animaiton is running.
+ * @param animatingTypes Indicates the currently animating insets types.
+ */
+ oneway void updateAnimatingTypes(IWindow window, int animatingTypes);
+
+ /**
* Called when the system gesture exclusion has changed.
*/
oneway void reportSystemGestureExclusionChanged(IWindow window, in List<Rect> exclusionRects);
@@ -372,14 +381,4 @@
*/
oneway void notifyImeWindowVisibilityChangedFromClient(IWindow window, boolean visible,
in ImeTracker.Token statsToken);
-
- /**
- * Notifies WindowState whether inset animations are currently running within the Window.
- * This value is used by the server to vote for refresh rate.
- * see {@link com.android.server.wm.WindowState#mInsetsAnimationRunning).
- *
- * @param window The window that is insets animaiton is running.
- * @param running Indicates the insets animation state.
- */
- oneway void notifyInsetsAnimationRunningStateChanged(IWindow window, boolean running);
}
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 0d82acd..462c5c6 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -211,12 +211,12 @@
}
/**
- * Notifies when the state of running animation is changed. The state is either "running" or
- * "idle".
+ * Notifies when the insets types of running animation have changed. The animatingTypes
+ * contain all types, which have an ongoing animation.
*
- * @param running {@code true} if there is any animation running; {@code false} otherwise.
+ * @param animatingTypes the {@link InsetsType}s that are currently animating
*/
- default void notifyAnimationRunningStateChanged(boolean running) {}
+ default void updateAnimatingTypes(@InsetsType int animatingTypes) {}
/** @see ViewRootImpl#isHandlingPointerEvent */
default boolean isHandlingPointerEvent() {
@@ -665,6 +665,9 @@
/** Set of inset types which are requested visible which are reported to the host */
private @InsetsType int mReportedRequestedVisibleTypes = WindowInsets.Type.defaultVisible();
+ /** Set of insets types which are currently animating */
+ private @InsetsType int mAnimatingTypes = 0;
+
/** Set of inset types that we have controls of */
private @InsetsType int mControllableTypes;
@@ -745,9 +748,10 @@
mFrame, mFromState, mToState, RESIZE_INTERPOLATOR,
ANIMATION_DURATION_RESIZE, mTypes, InsetsController.this);
if (mRunningAnimations.isEmpty()) {
- mHost.notifyAnimationRunningStateChanged(true);
+ mHost.updateAnimatingTypes(runner.getTypes());
}
mRunningAnimations.add(new RunningAnimation(runner, runner.getAnimationType()));
+ mAnimatingTypes |= runner.getTypes();
}
};
@@ -1564,9 +1568,8 @@
}
}
ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_CLIENT_ANIMATION_RUNNING);
- if (mRunningAnimations.isEmpty()) {
- mHost.notifyAnimationRunningStateChanged(true);
- }
+ mAnimatingTypes |= runner.getTypes();
+ mHost.updateAnimatingTypes(mAnimatingTypes);
mRunningAnimations.add(new RunningAnimation(runner, animationType));
if (DEBUG) Log.d(TAG, "Animation added to runner. useInsetsAnimationThread: "
+ useInsetsAnimationThread);
@@ -1827,7 +1830,7 @@
dispatchAnimationEnd(runningAnimation.runner.getAnimation());
} else {
if (Flags.refactorInsetsController()) {
- if (removedTypes == ime()
+ if ((removedTypes & ime()) != 0
&& control.getAnimationType() == ANIMATION_TYPE_HIDE) {
if (mHost != null) {
// if the (hide) animation is cancelled, the
@@ -1842,9 +1845,11 @@
break;
}
}
- if (mRunningAnimations.isEmpty()) {
- mHost.notifyAnimationRunningStateChanged(false);
+ if (removedTypes > 0) {
+ mAnimatingTypes &= ~removedTypes;
+ mHost.updateAnimatingTypes(mAnimatingTypes);
}
+
onAnimationStateChanged(removedTypes, false /* running */);
}
@@ -1969,14 +1974,6 @@
return animatingTypes;
}
- private @InsetsType int computeAnimatingTypes() {
- int animatingTypes = 0;
- for (int i = 0; i < mRunningAnimations.size(); i++) {
- animatingTypes |= mRunningAnimations.get(i).runner.getTypes();
- }
- return animatingTypes;
- }
-
/**
* Called when finishing setting requested visible types or finishing setting controls.
*
@@ -1989,7 +1986,7 @@
// report its requested visibility at the end of the animation, otherwise we would
// lose the leash, and it would disappear during the animation
// TODO(b/326377046) revisit this part and see if we can make it more general
- typesToReport = mRequestedVisibleTypes | (computeAnimatingTypes() & ime());
+ typesToReport = mRequestedVisibleTypes | (mAnimatingTypes & ime());
} else {
typesToReport = mRequestedVisibleTypes;
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index b98f4db..4f6c730 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -2247,6 +2247,27 @@
t.reparent(sc, mBlastSurfaceControl).show(sc);
}
+ /**
+ * Populates a {@link ViewStructure} for content capture.
+ *
+ * <p>If {@link #setSecure(boolean)} has been enabled, will add a property to the
+ * {@link android.app.assist.AssistStructure.ViewNode} to indicate that content will not
+ * be available for this part of the screen.
+ *
+ * @hide
+ */
+ @Override
+ protected void onProvideStructure(@NonNull ViewStructure structure,
+ @ViewStructureType int viewFor, int flags) {
+ super.onProvideStructure(structure, viewFor, flags);
+ if (android.app.contextualsearch.flags.Flags.reportSecureSurfacesInAssistStructure()) {
+ if ((mSurfaceFlags & SurfaceControl.SECURE) != 0) {
+ structure.getExtras().putBoolean(
+ ViewStructure.EXTRA_CONTAINS_SECURE_LAYERS, true);
+ }
+ }
+ }
+
/** @hide */
@Override
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 9498407..7fd7be8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -2540,11 +2540,12 @@
}
/**
- * Notify the when the running state of a insets animation changed.
+ * Notify the when the animating insets types have changed.
*/
@VisibleForTesting
- public void notifyInsetsAnimationRunningStateChanged(boolean running) {
+ public void updateAnimatingTypes(@InsetsType int animatingTypes) {
if (sToolkitSetFrameRateReadOnlyFlagValue) {
+ boolean running = animatingTypes != 0;
if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
Trace.instant(Trace.TRACE_TAG_VIEW,
TextUtils.formatSimple("notifyInsetsAnimationRunningStateChanged(%s)",
@@ -2552,7 +2553,7 @@
}
mInsetsAnimationRunning = running;
try {
- mWindowSession.notifyInsetsAnimationRunningStateChanged(mWindow, running);
+ mWindowSession.updateAnimatingTypes(mWindow, animatingTypes);
} catch (RemoteException e) {
}
}
diff --git a/core/java/android/view/ViewRootInsetsControllerHost.java b/core/java/android/view/ViewRootInsetsControllerHost.java
index 889acca4..8954df6 100644
--- a/core/java/android/view/ViewRootInsetsControllerHost.java
+++ b/core/java/android/view/ViewRootInsetsControllerHost.java
@@ -171,6 +171,13 @@
}
@Override
+ public void updateAnimatingTypes(@WindowInsets.Type.InsetsType int animatingTypes) {
+ if (mViewRoot != null) {
+ mViewRoot.updateAnimatingTypes(animatingTypes);
+ }
+ }
+
+ @Override
public boolean hasAnimationCallbacks() {
if (mViewRoot.mView == null) {
return false;
@@ -275,13 +282,6 @@
}
@Override
- public void notifyAnimationRunningStateChanged(boolean running) {
- if (mViewRoot != null) {
- mViewRoot.notifyInsetsAnimationRunningStateChanged(running);
- }
- }
-
- @Override
public boolean isHandlingPointerEvent() {
return mViewRoot != null && mViewRoot.isHandlingPointerEvent();
}
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index 43a946a..53953a9 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -77,6 +77,19 @@
"android.view.ViewStructure.extra.FIRST_ACTIVE_POSITION";
/**
+ * Key used for confirming whether the view draws graphics containing secure layers.
+ *
+ * <p>Secure layers cannot be read back into main memory and will show up as blank regions
+ * in assist screenshots.
+ *
+ * @see android.view.SurfaceControl#SECURE
+ *
+ * @hide
+ */
+ public static final String EXTRA_CONTAINS_SECURE_LAYERS =
+ "android.view.ViewStructure.extra.CONTAINS_SECURE_LAYERS";
+
+ /**
* Key used for writing the type of the view that generated the virtual structure of its
* children.
*
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 24647f4..196ae5e 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -625,6 +625,12 @@
int TRANSIT_FLAG_PHYSICAL_DISPLAY_SWITCH = (1 << 14); // 0x4000
/**
+ * Transition flag: Indicates that aod is showing hidden by entering doze
+ * @hide
+ */
+ int TRANSIT_FLAG_AOD_APPEARING = (1 << 15); // 0x8000
+
+ /**
* @hide
*/
@IntDef(flag = true, prefix = { "TRANSIT_FLAG_" }, value = {
@@ -643,6 +649,7 @@
TRANSIT_FLAG_KEYGUARD_OCCLUDING,
TRANSIT_FLAG_KEYGUARD_UNOCCLUDING,
TRANSIT_FLAG_PHYSICAL_DISPLAY_SWITCH,
+ TRANSIT_FLAG_AOD_APPEARING,
})
@Retention(RetentionPolicy.SOURCE)
@interface TransitionFlags {}
@@ -659,7 +666,8 @@
(TRANSIT_FLAG_KEYGUARD_GOING_AWAY
| TRANSIT_FLAG_KEYGUARD_APPEARING
| TRANSIT_FLAG_KEYGUARD_OCCLUDING
- | TRANSIT_FLAG_KEYGUARD_UNOCCLUDING);
+ | TRANSIT_FLAG_KEYGUARD_UNOCCLUDING
+ | TRANSIT_FLAG_AOD_APPEARING);
/**
* Remove content mode: Indicates remove content mode is currently not defined.
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 72a595d..0a86ff8 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -597,6 +597,11 @@
}
@Override
+ public void updateAnimatingTypes(IWindow window, @InsetsType int animatingTypes) {
+ // NO-OP
+ }
+
+ @Override
public void reportSystemGestureExclusionChanged(android.view.IWindow window,
List<Rect> exclusionRects) {
}
@@ -679,11 +684,6 @@
@NonNull ImeTracker.Token statsToken) {
}
- @Override
- public void notifyInsetsAnimationRunningStateChanged(IWindow window, boolean running) {
- // NO-OP
- }
-
void setParentInterface(@Nullable ISurfaceControlViewHostParent parentInterface) {
IBinder oldInterface = mParentInterface == null ? null : mParentInterface.asBinder();
IBinder newInterface = parentInterface == null ? null : parentInterface.asBinder();
diff --git a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
index 49a11ca..80a9cbc 100644
--- a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
+++ b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
@@ -235,6 +235,14 @@
}
flag {
+ name: "request_rectangle_with_source"
+ namespace: "accessibility"
+ description: "Request rectangle on screen with source parameter"
+ bug: "391877896"
+ is_exported: true
+}
+
+flag {
name: "restore_a11y_secure_settings_on_hsum_device"
namespace: "accessibility"
description: "Grab the a11y settings and send the settings restored broadcast for current visible foreground user"
diff --git a/core/java/android/view/inputmethod/ImeTracker.java b/core/java/android/view/inputmethod/ImeTracker.java
index aa0111a..60178cd 100644
--- a/core/java/android/view/inputmethod/ImeTracker.java
+++ b/core/java/android/view/inputmethod/ImeTracker.java
@@ -225,6 +225,7 @@
PHASE_SERVER_UPDATE_CLIENT_VISIBILITY,
PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE,
PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES,
+ PHASE_WM_REQUESTED_VISIBLE_TYPES_NOT_CHANGED,
})
@Retention(RetentionPolicy.SOURCE)
@interface Phase {}
@@ -445,6 +446,9 @@
/** The control target reported its requestedVisibleTypes back to WindowManagerService. */
int PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES =
ImeProtoEnums.PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES;
+ /** The requestedVisibleTypes have not been changed, so this request is not continued. */
+ int PHASE_WM_REQUESTED_VISIBLE_TYPES_NOT_CHANGED =
+ ImeProtoEnums.PHASE_WM_REQUESTED_VISIBLE_TYPES_NOT_CHANGED;
/**
* Called when an IME request is started.
diff --git a/core/java/android/view/inputmethod/flags.aconfig b/core/java/android/view/inputmethod/flags.aconfig
index 16f4114..a4ea64e 100644
--- a/core/java/android/view/inputmethod/flags.aconfig
+++ b/core/java/android/view/inputmethod/flags.aconfig
@@ -196,3 +196,21 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "report_animating_insets_types"
+ namespace: "input_method"
+ description: "Adding animating insets types and report IME visibility at the beginning of hiding"
+ bug: "393049691"
+}
+
+flag {
+ name: "lower_ime_oom_importance"
+ namespace: "input_method"
+ description: "Lower keyboard app process oom importance to PERCEPTIBLE_APP_ADJ + 1."
+ bug: "372511805"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/core/java/android/view/textclassifier/intent/OWNERS b/core/java/android/view/textclassifier/intent/OWNERS
index dc18514..4a5dfd8 100644
--- a/core/java/android/view/textclassifier/intent/OWNERS
+++ b/core/java/android/view/textclassifier/intent/OWNERS
@@ -2,5 +2,4 @@
toki@google.com
svetoslavganov@android.com
-svetoslavganov@google.com
joannechung@google.com
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 118edc2..fa7b74f 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -242,7 +242,7 @@
@Override
public void onNullBinding(ComponentName name) {
- enqueueDeferredUnbindServiceMessage();
+ unbindNow();
}
@Override
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 99fe0cb..5e828ba 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5211,7 +5211,11 @@
*/
@Nullable
public String getFontVariationSettings() {
- return mTextPaint.getFontVariationSettings();
+ if (Flags.typefaceRedesignReadonly()) {
+ return mTextPaint.getFontVariationOverride();
+ } else {
+ return mTextPaint.getFontVariationSettings();
+ }
}
/**
@@ -5567,10 +5571,10 @@
Math.clamp(400 + mFontWeightAdjustment,
FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX)));
}
- mTextPaint.setFontVariationSettings(
+ mTextPaint.setFontVariationOverride(
FontVariationAxis.toFontVariationSettings(axes));
} else {
- mTextPaint.setFontVariationSettings(fontVariationSettings);
+ mTextPaint.setFontVariationOverride(fontVariationSettings);
}
effective = true;
} else {
diff --git a/core/java/android/widget/flags/notification_widget_flags.aconfig b/core/java/android/widget/flags/notification_widget_flags.aconfig
index 56a2cf7..732eabe 100644
--- a/core/java/android/widget/flags/notification_widget_flags.aconfig
+++ b/core/java/android/widget/flags/notification_widget_flags.aconfig
@@ -66,4 +66,14 @@
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+flag {
+ name: "drop_non_existing_messages"
+ namespace: "systemui"
+ description: "Drops all group and message entries that no longer exist."
+ bug: "378101061"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/core/java/android/window/DesktopModeFlags.java b/core/java/android/window/DesktopModeFlags.java
index 4aeedbb..e74a875 100644
--- a/core/java/android/window/DesktopModeFlags.java
+++ b/core/java/android/window/DesktopModeFlags.java
@@ -43,6 +43,8 @@
public enum DesktopModeFlags {
// All desktop mode related flags to be overridden by developer option toggle will be added here
// go/keep-sorted start
+ DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX(
+ Flags::disableDesktopLaunchParamsOutsideDesktopBugFix, false),
DISABLE_NON_RESIZABLE_APP_SNAP_RESIZE(Flags::disableNonResizableAppSnapResizing, true),
ENABLE_ACCESSIBLE_CUSTOM_HEADERS(Flags::enableAccessibleCustomHeaders, true),
ENABLE_APP_HEADER_WITH_TASK_DENSITY(Flags::enableAppHeaderWithTaskDensity, true),
@@ -97,6 +99,8 @@
ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY(Flags::enableDesktopWindowingWallpaperActivity,
true),
ENABLE_DRAG_RESIZE_SET_UP_IN_BG_THREAD(Flags::enableDragResizeSetUpInBgThread, false),
+ ENABLE_DRAG_TO_DESKTOP_INCOMING_TRANSITIONS_BUGFIX(
+ Flags::enableDragToDesktopIncomingTransitionsBugfix, false),
ENABLE_FULLY_IMMERSIVE_IN_DESKTOP(Flags::enableFullyImmersiveInDesktop, true),
ENABLE_HANDLE_INPUT_FIX(Flags::enableHandleInputFix, true),
ENABLE_HOLD_TO_DRAG_APP_HANDLE(Flags::enableHoldToDragAppHandle, true),
@@ -111,6 +115,7 @@
ENABLE_START_LAUNCH_TRANSITION_FROM_TASKBAR_BUGFIX(
Flags::enableStartLaunchTransitionFromTaskbarBugfix, true),
ENABLE_TASKBAR_OVERFLOW(Flags::enableTaskbarOverflow, false),
+ ENABLE_TASKBAR_RECENTS_LAYOUT_TRANSITION(Flags::enableTaskbarRecentsLayoutTransition, false),
ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS(Flags::enableTaskResizingKeyboardShortcuts, true),
ENABLE_TASK_STACK_OBSERVER_IN_SHELL(Flags::enableTaskStackObserverInShell, true),
ENABLE_THEMED_APP_HEADERS(Flags::enableThemedAppHeaders, true),
diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig
index 2e36e9a..355a87d 100644
--- a/core/java/android/window/flags/lse_desktop_experience.aconfig
+++ b/core/java/android/window/flags/lse_desktop_experience.aconfig
@@ -100,6 +100,17 @@
}
flag {
+ name: "disable_desktop_launch_params_outside_desktop_bug_fix"
+ namespace: "lse_desktop_experience"
+ description: "Prevents DesktopModeLaunchParamsModifier from modifying launch params for non /n"
+ "desktop launches."
+ bug: "396108436"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "enable_desktop_windowing_wallpaper_activity"
namespace: "lse_desktop_experience"
description: "Enables desktop wallpaper activity to show wallpaper in the desktop mode"
@@ -811,4 +822,34 @@
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+flag {
+ name: "enable_drag_to_desktop_incoming_transitions_bugfix"
+ namespace: "lse_desktop_experience"
+ description: "Enables bugfix handling incoming transitions during the DragToDesktop transition."
+ bug: "397135730"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "enable_taskbar_recents_layout_transition"
+ namespace: "lse_desktop_experience"
+ description: "Enable Taskbar LayoutTransition for Recent Apps"
+ bug: "343521765"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "enable_desktop_opening_deeplink_minimize_animation_bugfix"
+ namespace: "lse_desktop_experience"
+ description: "Enabling a minimize animation when a new window is opened via deeplink and the Desktop Windowing open windows limit is reached."
+ bug: "360329773"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/core/java/android/window/flags/windowing_frontend.aconfig b/core/java/android/window/flags/windowing_frontend.aconfig
index dee1d8c..0e19eb2 100644
--- a/core/java/android/window/flags/windowing_frontend.aconfig
+++ b/core/java/android/window/flags/windowing_frontend.aconfig
@@ -471,4 +471,15 @@
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+flag {
+ name: "reduce_task_snapshot_memory_usage"
+ namespace: "windowing_frontend"
+ description: "Reduce task snapshot memory usage in either heap and dmabuf."
+ bug: "238206323"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/core/java/com/android/internal/app/MediaRouteControllerContentManager.java b/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
index 3a8b94f..11093f1 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
@@ -206,6 +206,13 @@
mDelegate.dismissView();
}
+ /**
+ * Request the media route to update volume.
+ */
+ public void requestUpdateRouteVolume(int direction) {
+ mRoute.requestUpdateVolume(direction);
+ }
+
private boolean isVolumeControlAvailable() {
return mRoute.getVolumeHandling() == MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE;
}
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index 5899963..73f9515 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -42,19 +42,11 @@
*/
public class MediaRouteControllerDialog extends AlertDialog implements
MediaRouteControllerContentManager.Delegate {
- // TODO(b/360050020): Eventually these 2 variables should be in the content manager instead of
- // here. So these should be removed when the migration is completed.
- private final MediaRouter mRouter;
- private final MediaRouter.RouteInfo mRoute;
-
private final MediaRouteControllerContentManager mContentManager;
public MediaRouteControllerDialog(Context context, int theme) {
super(context, theme);
-
mContentManager = new MediaRouteControllerContentManager(context, this);
- mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
- mRoute = mRouter.getSelectedRoute();
}
@Override
@@ -91,7 +83,8 @@
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
- mRoute.requestUpdateVolume(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? -1 : 1);
+ mContentManager.requestUpdateRouteVolume(
+ keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? -1 : 1);
return true;
}
return super.onKeyDown(keyCode, event);
diff --git a/core/java/com/android/internal/infra/OWNERS b/core/java/com/android/internal/infra/OWNERS
index 4550358..e69de29 100644
--- a/core/java/com/android/internal/infra/OWNERS
+++ b/core/java/com/android/internal/infra/OWNERS
@@ -1,6 +0,0 @@
-per-file AndroidFuture.java = eugenesusla@google.com
-per-file RemoteStream.java = eugenesusla@google.com
-per-file PerUser.java = eugenesusla@google.com
-per-file ServiceConnector.java = eugenesusla@google.com
-per-file AndroidFuture.aidl = eugenesusla@google.com
-per-file IAndroidFuture.aidl = eugenesusla@google.com
\ No newline at end of file
diff --git a/core/java/com/android/internal/os/BatteryStatsHistory.java b/core/java/com/android/internal/os/BatteryStatsHistory.java
index 85794d4..81ca231 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistory.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistory.java
@@ -181,6 +181,11 @@
*/
public interface BatteryHistoryStore {
/**
+ * Returns the maximum amount of storage that can be occupied by the battery history story.
+ */
+ int getMaxHistorySize();
+
+ /**
* Returns the table of contents, in the chronological order.
*/
List<BatteryHistoryFragment> getFragments();
@@ -516,6 +521,22 @@
}
/**
+ * Returns a high estimate of how many items are currently included in the battery history.
+ */
+ public int getEstimatedItemCount() {
+ int estimatedBytes = mHistoryBuffer.dataSize();
+ if (mStore != null) {
+ estimatedBytes += mStore.getMaxHistorySize() * 10; // account for the compression ratio
+ }
+ if (mHistoryParcels != null) {
+ for (int i = mHistoryParcels.size() - 1; i >= 0; i--) {
+ estimatedBytes += mHistoryParcels.get(i).dataSize();
+ }
+ }
+ return estimatedBytes / 4; // Minimum size of a history item is 4 bytes
+ }
+
+ /**
* Creates a read-only copy of the battery history. Does not copy the files stored
* in the system directory, so it is not safe while actively writing history.
*/
@@ -768,7 +789,7 @@
*/
public boolean readFragmentToParcel(Parcel out, BatteryHistoryFragment fragment) {
byte[] data = mStore.readFragment(fragment);
- if (data == null) {
+ if (data == null || data.length == 0) {
return false;
}
out.unmarshall(data, 0, data.length);
@@ -913,6 +934,10 @@
continue;
}
+ if (data.length == 0) {
+ continue;
+ }
+
out.writeBoolean(true);
if (useBlobs) {
out.writeBlob(data, 0, data.length);
@@ -955,9 +980,11 @@
return false;
}
- parcel.unmarshall(data, 0, data.length);
- parcel.setDataPosition(0);
- readHistoryBuffer(parcel);
+ if (data.length > 0) {
+ parcel.unmarshall(data, 0, data.length);
+ parcel.setDataPosition(0);
+ readHistoryBuffer(parcel);
+ }
} catch (Exception e) {
Slog.e(TAG, "Error reading battery history", e);
reset();
diff --git a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
index 0d5d876..38398b4 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
@@ -47,6 +47,8 @@
private boolean mClosed;
private long mBaseMonotonicTime;
private long mBaseTimeUtc;
+ private int mItemIndex = 0;
+ private int mMaxHistoryItems;
public BatteryStatsHistoryIterator(@NonNull BatteryStatsHistory history, long startTimeMs,
long endTimeMs) {
@@ -54,6 +56,7 @@
mStartTimeMs = startTimeMs;
mEndTimeMs = (endTimeMs != MonotonicClock.UNDEFINED) ? endTimeMs : Long.MAX_VALUE;
mHistoryItem.clear();
+ mMaxHistoryItems = history.getEstimatedItemCount();
}
@Override
@@ -80,6 +83,11 @@
private void advance() {
while (true) {
+ if (mItemIndex > mMaxHistoryItems) {
+ Slog.wtfStack(TAG, "Number of battery history items is too large: " + mItemIndex);
+ break;
+ }
+
Parcel p = mBatteryStatsHistory.getNextParcel(mStartTimeMs, mEndTimeMs);
if (p == null) {
break;
@@ -109,6 +117,7 @@
break;
}
if (mHistoryItem.time >= mStartTimeMs) {
+ mItemIndex++;
mNextItemReady = true;
return;
}
diff --git a/core/java/com/android/internal/pm/pkg/component/ParsedComponentImpl.java b/core/java/com/android/internal/pm/pkg/component/ParsedComponentImpl.java
index 69c0480..7ee22f3 100644
--- a/core/java/com/android/internal/pm/pkg/component/ParsedComponentImpl.java
+++ b/core/java/com/android/internal/pm/pkg/component/ParsedComponentImpl.java
@@ -157,7 +157,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
- sForInternedString.parcel(this.name, dest, flags);
+ dest.writeString(this.name);
dest.writeInt(this.getIcon());
dest.writeInt(this.getLabelRes());
dest.writeCharSequence(this.getNonLocalizedLabel());
@@ -175,7 +175,7 @@
// We use the boot classloader for all classes that we load.
final ClassLoader boot = Object.class.getClassLoader();
//noinspection ConstantConditions
- this.name = sForInternedString.unparcel(in);
+ this.name = in.readString();
this.icon = in.readInt();
this.labelRes = in.readInt();
this.nonLocalizedLabel = in.readCharSequence();
diff --git a/core/java/com/android/internal/protolog/WmProtoLogGroups.java b/core/java/com/android/internal/protolog/WmProtoLogGroups.java
index 5edc2fb..b8b70b16 100644
--- a/core/java/com/android/internal/protolog/WmProtoLogGroups.java
+++ b/core/java/com/android/internal/protolog/WmProtoLogGroups.java
@@ -30,6 +30,8 @@
WM_ERROR(true, true, true, Consts.TAG_WM),
WM_DEBUG_ORIENTATION(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
Consts.TAG_WM),
+ WM_DEBUG_ORIENTATION_CHANGE(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
+ Consts.TAG_WM),
WM_DEBUG_FOCUS_LIGHT(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
Consts.TAG_WM),
WM_DEBUG_BOOT(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 7018ebc..5a180d7 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -82,7 +82,7 @@
* Notify system UI the immersive mode changed. This shall be removed when client immersive is
* enabled.
*/
- void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode);
+ void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode, int windowType);
void dismissKeyboardShortcutsMenu();
void toggleKeyboardShortcutsMenu(int deviceId);
diff --git a/core/java/com/android/internal/util/OWNERS b/core/java/com/android/internal/util/OWNERS
index 9be8ea7..d174fe3 100644
--- a/core/java/com/android/internal/util/OWNERS
+++ b/core/java/com/android/internal/util/OWNERS
@@ -1,8 +1,8 @@
-per-file AsyncChannel* = lorenzo@google.com, satk@google.com, etancohen@google.com
+per-file AsyncChannel* = lorenzo@google.com, satk@google.com
per-file MessageUtils*, Protocol*, RingBuffer*, TokenBucket* = jchalard@google.com, lorenzo@google.com, satk@google.com
per-file *Notification* = file:/services/core/java/com/android/server/notification/OWNERS
per-file *ContrastColor* = file:/services/core/java/com/android/server/notification/OWNERS
-per-file Protocol* = etancohen@google.com, lorenzo@google.com
+per-file Protocol* =lorenzo@google.com
per-file State* = jchalard@google.com, lorenzo@google.com, satk@google.com
per-file *Dump* = file:/core/java/com/android/internal/util/dump/OWNERS
per-file *Screenshot* = file:/packages/SystemUI/src/com/android/systemui/screenshot/OWNERS
diff --git a/core/java/com/android/internal/util/function/pooled/OWNERS b/core/java/com/android/internal/util/function/pooled/OWNERS
index da723b3..e69de29 100644
--- a/core/java/com/android/internal/util/function/pooled/OWNERS
+++ b/core/java/com/android/internal/util/function/pooled/OWNERS
@@ -1 +0,0 @@
-eugenesusla@google.com
\ No newline at end of file
diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java
index ce46da1..2cca3db 100644
--- a/core/java/com/android/internal/widget/ConversationLayout.java
+++ b/core/java/com/android/internal/widget/ConversationLayout.java
@@ -86,6 +86,7 @@
public static final Interpolator FAST_OUT_LINEAR_IN = new PathInterpolator(0.4f, 0f, 1f, 1f);
public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
public static final Interpolator OVERSHOOT = new PathInterpolator(0.4f, 0f, 0.2f, 1.4f);
+ private static final int MAX_SUMMARIZATION_LINES = 3;
public static final int IMPORTANCE_ANIM_GROW_DURATION = 250;
public static final int IMPORTANCE_ANIM_SHRINK_DURATION = 200;
public static final int IMPORTANCE_ANIM_SHRINK_DELAY = 25;
@@ -401,7 +402,7 @@
public void setIsCollapsed(boolean isCollapsed) {
mIsCollapsed = isCollapsed;
mMessagingLinearLayout.setMaxDisplayedLines(isCollapsed
- ? TextUtils.isEmpty(mSummarizedContent) ? 1 : 2
+ ? TextUtils.isEmpty(mSummarizedContent) ? 1 : MAX_SUMMARIZATION_LINES
: Integer.MAX_VALUE);
updateExpandButton();
updateContentEndPaddings();
@@ -1188,6 +1189,12 @@
}
newGroup.setMessages(group);
}
+
+ if (Flags.dropNonExistingMessages()) {
+ // remove groups from mAddedGroups when they are no longer in mGroups.
+ mAddedGroups.removeIf(
+ messagingGroup -> !mGroups.contains(messagingGroup));
+ }
}
/**
diff --git a/core/java/com/android/internal/widget/MessagingGroup.java b/core/java/com/android/internal/widget/MessagingGroup.java
index b9a603cc..b31a200 100644
--- a/core/java/com/android/internal/widget/MessagingGroup.java
+++ b/core/java/com/android/internal/widget/MessagingGroup.java
@@ -569,6 +569,10 @@
mIsolatedMessage = isolatedMessage;
updateImageContainerVisibility();
mMessages = group;
+ if (android.widget.flags.Flags.dropNonExistingMessages()) {
+ // remove messages from mAddedMessages when they are no longer in mMessages.
+ mAddedMessages.removeIf(message -> !mMessages.contains(message));
+ }
updateMessageColor();
}
diff --git a/core/java/com/android/internal/widget/MessagingLayout.java b/core/java/com/android/internal/widget/MessagingLayout.java
index eb22e7c..9fe2de8 100644
--- a/core/java/com/android/internal/widget/MessagingLayout.java
+++ b/core/java/com/android/internal/widget/MessagingLayout.java
@@ -44,6 +44,7 @@
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RemoteViews;
+import android.widget.flags.Flags;
import com.android.internal.R;
@@ -62,6 +63,7 @@
public static final Interpolator LINEAR_OUT_SLOW_IN = new PathInterpolator(0f, 0f, 0.2f, 1f);
public static final Interpolator FAST_OUT_LINEAR_IN = new PathInterpolator(0.4f, 0f, 1f, 1f);
public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
+ private static final int MAX_SUMMARIZATION_LINES = 3;
public static final OnLayoutChangeListener MESSAGING_PROPERTY_ANIMATOR
= new MessagingPropertyAnimator();
private final PeopleHelper mPeopleHelper = new PeopleHelper();
@@ -222,7 +224,7 @@
List<MessagingMessage> newMessagingMessages;
mSummarizedContent = extras.getCharSequence(Notification.EXTRA_SUMMARIZED_CONTENT);
if (!TextUtils.isEmpty(mSummarizedContent) && mIsCollapsed) {
- mMessagingLinearLayout.setMaxDisplayedLines(2);
+ mMessagingLinearLayout.setMaxDisplayedLines(MAX_SUMMARIZATION_LINES);
Notification.MessagingStyle.Message summary =
new Notification.MessagingStyle.Message(mSummarizedContent, 0, "");
newMessagingMessages = createMessages(List.of(summary), false, usePrecomputedText);
@@ -559,6 +561,12 @@
}
newGroup.setMessages(group);
}
+
+ if (Flags.dropNonExistingMessages()) {
+ // remove groups from mAddedGroups when they are no longer in mGroups.
+ mAddedGroups.removeIf(
+ messagingGroup -> !mGroups.contains(messagingGroup));
+ }
}
private void findGroups(List<MessagingMessage> historicMessages,
diff --git a/core/java/com/android/internal/widget/NotificationProgressBar.java b/core/java/com/android/internal/widget/NotificationProgressBar.java
index c0fe0d1..3472d68 100644
--- a/core/java/com/android/internal/widget/NotificationProgressBar.java
+++ b/core/java/com/android/internal/widget/NotificationProgressBar.java
@@ -555,6 +555,18 @@
mNotificationProgressDrawable.setParts(p.first);
mAdjustedProgressFraction =
(p.second - mTrackerDrawWidth / 2F) / (width - mTrackerDrawWidth);
+
+ mNotificationProgressDrawable.updateEndDotColor(getEndDotColor(fallbackSegments));
+ }
+
+ private int getEndDotColor(List<ProgressStyle.Segment> fallbackSegments) {
+ if (!mProgressModel.isStyledByProgress()) return Color.TRANSPARENT;
+ if (mProgressModel.getProgress() == mProgressModel.getProgressMax()) {
+ return Color.TRANSPARENT;
+ }
+
+ return fallbackSegments == null ? mProgressModel.getSegments().getLast().getColor()
+ : fallbackSegments.getLast().getColor();
}
private void updateTrackerAndBarPos(int w, int h) {
diff --git a/core/java/com/android/internal/widget/NotificationProgressDrawable.java b/core/java/com/android/internal/widget/NotificationProgressDrawable.java
index 30dcc67..b109610 100644
--- a/core/java/com/android/internal/widget/NotificationProgressDrawable.java
+++ b/core/java/com/android/internal/widget/NotificationProgressDrawable.java
@@ -21,6 +21,7 @@
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
@@ -74,6 +75,8 @@
mFillPaint.setStyle(Paint.Style.FILL);
}
+ private @ColorInt int mEndDotColor = Color.TRANSPARENT;
+
private int mAlpha;
public NotificationProgressDrawable() {
@@ -125,6 +128,16 @@
setParts(Arrays.asList(parts));
}
+ /**
+ * Update the color of the end dot. If TRANSPARENT, the dot is not drawn.
+ */
+ public void updateEndDotColor(@ColorInt int endDotColor) {
+ if (mEndDotColor != endDotColor) {
+ mEndDotColor = endDotColor;
+ invalidateSelf();
+ }
+ }
+
@Override
public void draw(@NonNull Canvas canvas) {
final float pointRadius = mState.mPointRadius;
@@ -164,6 +177,18 @@
canvas.drawRoundRect(mPointRectF, cornerRadius, cornerRadius, mFillPaint);
}
}
+
+ if (mEndDotColor != Color.TRANSPARENT) {
+ final float right = (float) getBounds().right;
+ final float dotRadius = mState.mFadedSegmentHeight / 2F;
+ mFillPaint.setColor(mEndDotColor);
+ // Use drawRoundRect instead of drawCircle to ensure alignment with the segment below.
+ mSegRectF.set(
+ Math.round(right - mState.mFadedSegmentHeight), Math.round(centerY - dotRadius),
+ Math.round(right), Math.round(centerY + dotRadius));
+ canvas.drawRoundRect(mSegRectF, mState.mSegmentCornerRadius,
+ mState.mSegmentCornerRadius, mFillPaint);
+ }
}
@Override
diff --git a/core/java/com/android/internal/widget/NotificationRowIconView.java b/core/java/com/android/internal/widget/NotificationRowIconView.java
index c96e979..1b29b7f 100644
--- a/core/java/com/android/internal/widget/NotificationRowIconView.java
+++ b/core/java/com/android/internal/widget/NotificationRowIconView.java
@@ -225,6 +225,6 @@
boolean shouldShowAppIcon();
/** Get the app icon for this notification. */
- Drawable getAppIcon();
+ @Nullable Drawable getAppIcon();
}
}
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 92a841f..748c5b4 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -21,7 +21,6 @@
config_namespace: "ANDROID",
bool_variables: [
"release_binder_death_recipient_weak_from_jni",
- "release_package_libandroid_runtime_punch_holes",
],
properties: [
"cflags",
@@ -66,9 +65,6 @@
release_binder_death_recipient_weak_from_jni: {
cflags: ["-DBINDER_DEATH_RECIPIENT_WEAK_FROM_JNI"],
},
- release_package_libandroid_runtime_punch_holes: {
- cflags: ["-DENABLE_PUNCH_HOLES"],
- },
},
cpp_std: "gnu++20",
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index 06fd80e..14132e6 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -236,7 +236,6 @@
return INSTALL_FAILED_CONTAINER_ERROR;
}
-#ifdef ENABLE_PUNCH_HOLES
// punch extracted elf files as well. This will fail where compression is on (like f2fs) but it
// will be useful for ext4 based systems
struct statfs64 fsInfo;
@@ -253,7 +252,6 @@
zipFile->getZipFileName());
}
}
-#endif // ENABLE_PUNCH_HOLES
ALOGV("Successfully moved %s to %s\n", localTmpFileName, localFileName);
@@ -332,7 +330,6 @@
return INSTALL_FAILED_INVALID_APK;
}
-#ifdef ENABLE_PUNCH_HOLES
// if library is uncompressed, punch hole in it in place
if (!punchHolesInElf64(zipFile->getZipFileName(), offset)) {
ALOGW("Failed to punch uncompressed elf file :%s inside apk : %s at offset: "
@@ -345,7 +342,6 @@
if (!punchHolesInZip(zipFile->getZipFileName(), offset, extraFieldLength)) {
ALOGW("Failed to punch apk : %s at extra field", zipFile->getZipFileName());
}
-#endif // ENABLE_PUNCH_HOLES
return INSTALL_SUCCEEDED;
}
diff --git a/core/proto/OWNERS b/core/proto/OWNERS
index aa8f841..c804024 100644
--- a/core/proto/OWNERS
+++ b/core/proto/OWNERS
@@ -5,7 +5,6 @@
singhtejinder@google.com
yanmin@google.com
yaochen@google.com
-zhouwenjie@google.com
# Frameworks
ogunwale@google.com
diff --git a/core/res/OWNERS b/core/res/OWNERS
index faed4d8..a208f7f 100644
--- a/core/res/OWNERS
+++ b/core/res/OWNERS
@@ -9,7 +9,6 @@
ilyamaty@google.com
jbolinger@google.com
jsharkey@android.com
-jsharkey@google.com
juliacr@google.com
kchyn@google.com
michaelwr@google.com
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 3203195..b6b5d8b 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Eenhandmodus"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ekstra donker"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Gehoortoestelle"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Ontkoppel"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Gekoppel"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktief"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index f4dabdb..29b153b 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"የአንድ እጅ ሁነታ"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ተጨማሪ ደብዛዛ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"የመስሚያ መሣሪያዎች"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ግንኙነት ተቋርጧል"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"ተገናኝቷል"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ገቢር"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 24d628a..08d0af5 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -357,14 +357,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"الوصول إلى بيانات المستشعر حول علاماتك الحيوية"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"الإشعارات"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"عرض الإشعارات"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"بيانات تتبُّع الواقع الممتد"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"إذن الوصول إلى بيانات الواقع الممتد المتعلّقة بك وبالبيئة المحيطة بك"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"بيانات تتبُّع الواقع المُمتد الحسّاسة"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"إذن الوصول إلى بيانات تتبُّع حسّاسة، مثل حركات التحديق بالعين"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"استرداد محتوى النافذة:"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"فحص محتوى نافذة يتم التفاعل معها."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"تفعيل الاستكشاف باللمس:"</string>
@@ -660,38 +656,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"للسماح للتطبيق بتعديل مجموعة صورك."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"قراءة المواقع من مجموعة الوسائط التابعة لك"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"للسماح للتطبيق بقراءة المواقع من مجموعة الوسائط التابعة لك."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"تتبُّع الحركات التقريبية للتحديق بالعين"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"يسمح هذا الإذن للتطبيق بتتبُّع الحركات التقريبية لعينيك."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"تتبُّع اتجاه نظرك"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات دقيقة عن حركات التحديق بالعين."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"تتبُّع حركات وجهك"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات تتبُّع حركات الوجه."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"تتبُّع يديك"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات تتبُّع اليد."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"تتبُّع حركات رأسك"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات تتبُّع حركة الرأس."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"فهم البيئة المحيطة بك"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات التتبُّع المتعلّقة بالبيئة المحيطة بك مباشرةً."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"فهم البيئة المحيطة بك بتفاصيل عالية الدقّة"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات التتبُّع المتعلّقة بالبيئة المحيطة بك مباشرةً بتفاصيل عالية الدقّة."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"وصول التطبيق إلى بيانات الواقع الممتد عندما لا يكون مستخدَمًا"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات الواقع الممتد عندما لا يكون مستخدَمًا."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"استخدام المقاييس الحيوية"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"استخدام المقاييس الحيوية أو قفل الشاشة"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"تأكيد هويتك"</string>
@@ -1827,6 +1807,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"وضع \"التصفح بيد واحدة\""</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"زيادة تعتيم الشاشة"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"سماعات الأذن الطبية"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"غير متّصل"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"متّصل"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"متّصل حاليًا"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 2b9a20a..9eab313 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"এখন হাতেৰে ব্যৱহাৰ কৰাৰ ম’ড"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিৰিক্তভাৱে পোহৰ কমোৱাৰ সুবিধা"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"শুনাৰ ডিভাইচ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"সংযোগ বিচ্ছিন্ন হ’ল"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"সংযোগ কৰা হ’ল"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"সক্ৰিয় হৈ আছে"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index e5bfb29..3aec62a 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Birəlli rejim"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Əlavə tündləşmə"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Eşitmə cihazları"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Bağlantı kəsildi"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Qoşuldu"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivdir"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 3e67233..47203a9 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Režim jednom rukom"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Dodatno zatamni"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni aparati"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Veza je prekinuta"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Povezano"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivno"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index d01af94..8230f0c 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Рэжым кіравання адной рукой"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Дадатковае памяншэнне яркасці"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слыхавыя апараты"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Адключана"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Падключана"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Актыўная"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 0083dde..d9471e6 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Работа с една ръка"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Допълнително затъмняване"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слухови апарати"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Няма връзка"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Свързано"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Активно"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 298be51..cc05d28 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"এক হাতে ব্যবহার করার মোড"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিরিক্ত কম উজ্জ্বলতা"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"হিয়ারিং ডিভাইস"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ডিসকানেক্ট হয়ে গেছে"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"কানেক্ট করা হয়েছে"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"অ্যাক্টিভ"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 6a54f65..9c553ce 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Način rada jednom rukom"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Dodatno zatamnjenje"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni aparati"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Nije povezano"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Povezano"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivno"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 63fbb07..3fa177e 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mode d\'una mà"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Atenuació extra"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Audiòfons"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconnectat"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connectat"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Actiu"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 5d0edf3..670ca33 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Režim jedné ruky"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Velmi tmavé zobrazení"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Naslouchátka"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Odpojeno"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Připojeno"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivní"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index a853076..47eb357 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enhåndstilstand"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ekstra dæmpet belysning"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Høreapparater"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Ikke forbundet"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Forbundet"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiv"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 81a331d..06a35e6 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Einhandmodus"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extradunkel"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hörgeräte"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Nicht verbunden"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Verbunden"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiv"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index f4fb932..8a12e0e 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Λειτουργία ενός χεριού"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Επιπλέον μείωση φωτεινότητας"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Συσκευές ακοής"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Αποσυνδέθηκε"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Συνδέθηκε"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Ενεργή"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 3b4f52c..3881f1d 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"One-handed mode"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dim"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hearing devices"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Disconnected"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connected"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Active"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 79020c58..e6c4047 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -1803,6 +1803,7 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"One-Handed mode"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dim"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hearing devices"</string>
+ <string name="autoclick_feature_name" msgid="8149248738736949630">"Autoclick"</string>
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Disconnected"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connected"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Active"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 2c5cf4d..9680b83 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"One-handed mode"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dim"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hearing devices"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Disconnected"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connected"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Active"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 65ebd0d..fbe1c0a 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"One-handed mode"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dim"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hearing devices"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Disconnected"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connected"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Active"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index c9bb39c..54297a5 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo de una mano"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Atenuación extra"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Dispositivos auditivos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconectado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Activo"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 63fc276..5bd2bf5 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo Una mano"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Atenuación extra"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Audífonos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconectado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Activo"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index c9b29c3a..0c928a6 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Ühekäerežiim"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Eriti tume"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Kuuldeseadmed"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Ühendus katkestatud"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Ühendatud"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiivne"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 88bb3c9..13f0452 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Esku bakarreko modua"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Are ilunago"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Entzumen-gailuak"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Deskonektatuta"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Konektatuta"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktibo"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 0c3b755..2eaf4c0 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"حالت یکدستی"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"بسیار کمنور"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"دستگاههای کمکشنوایی"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"متصل نیست"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"وصل شد"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"فعال"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index b12fd5c..280658c 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Yhden käden moodi"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Erittäin himmeä"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Kuulolaitteet"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Yhteys katkaistu"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Yhdistetty"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiivinen"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index b9c8b64..1740ce5 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mode Une main"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Très sombre"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Appareils auditifs"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Déconnecté"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connecté"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Actif"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 9952d04..0564661 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mode une main"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Luminosité ultra-réduite"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Appareils auditifs"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Déconnecté"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connecté"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Actif"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index a2d29c9..73bed7f 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo dunha soa man"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Atenuación extra"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Dispositivos auditivos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconectado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Activo"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index bb07484..0c99096 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"એક-હાથે વાપરો મોડ"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"એક્સ્ટ્રા ડિમ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"સાંભળવામાં સહાય કરતા ડિવાઇસ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ડિસ્કનેક્ટેડ છે"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"કનેક્ટેડ છે"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"સક્રિય"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 538e86c..df211dc 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"वन-हैंडेड मोड"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"स्क्रीन की रोशनी को सामान्य लेवल से और कम करने की सुविधा"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"कान की मशीन"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"डिसकनेक्ट हो गया"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"कनेक्ट हो गया"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"चालू है"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index cde062a..f701483 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Način rada jednom rukom"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Još tamnije"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušna pomagala"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Nije povezano"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Povezano"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivno"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 1acf7bc..e3d261e 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Egykezes mód"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extrasötét"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hallásjavító eszközök"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Leválasztva"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Csatlakozva"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktív"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 041042f..de62af5 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Մեկ ձեռքի ռեժիմ"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Հավելյալ խամրեցում"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Լսողական սարքեր"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Անջատված է"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Միացված է"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Ակտիվ է"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index b02d5ee..18ae5e9 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mode satu tangan"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ekstra redup"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Alat bantu dengar"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Tidak terhubung"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Terhubung"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktif"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index d66721a..a74ff1c 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Einhent stilling"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Mjög dökkt"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Heyrnartæki"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Aftengt"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Tengt"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Virkt"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 7506002..befd2b2 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modalità a una mano"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Attenuazione extra"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Protesi uditive"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Disconnesso"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Connesso"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Attivo"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index d58084d..0b6c80a 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"גישה אל נתוני חיישנים של הסימנים החיוניים שלך"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"התראות"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"הצגת התראות"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"נתונים של מעקב XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"גישה לנתוני XR לגביך ולגבי הסביבה הקרובה"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"נתונים רגישים של מעקב XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"גישה לנתוני מעקב רגישים, כמו תנועות העיניים"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"אחזור תוכן של חלון"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"בדיקת התוכן של חלון שאיתו מתבצעת אינטראקציה."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"הפעלה של \'גילוי באמצעות מגע\'"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"מאפשרת לאפליקציה לשנות את אוסף התמונות שלך."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"לקרוא מיקומים מאוסף המדיה שלך"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"מאפשרת לאפליקציה לקרוא מיקומים מאוסף המדיה שלך."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"מעקב אחרי תנועות העיניים בקירוב"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ההרשאה מאפשרת לאפליקציה לעקוב אחרי תנועות העיניים בקירוב."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"מעקב אחרי הכיוון של המבט"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ההרשאה מאפשרת לאפליקציה לגשת לנתונים מדויקים של תנועות עיניים."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"מעקב אחרי תנועות הפנים"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני מעקב תנועות הפנים."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"מעקב אחר תנועות הידיים"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני מעקב תנועות הידיים."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"מעקב אחרי תנועות הראש"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני מעקב תנועות הראש."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"גישה לנתונים מהסביבה הקרובה"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני המעקב מהסביבה הקרובה."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"גישה לנתונים מהסביבה הקרובה ברמת פירוט גבוהה"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני מעקב מהסביבה הקרובה ברמת פירוט גבוהה מאוד."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"גישה לנתוני XR כשהאפליקציה לא בחזית"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ההרשאה מאפשרת לאפליקציה לגשת לנתוני XR כשהיא לא בחזית."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"שימוש במידע ביומטרי"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"שימוש במידע ביומטרי בנעילת מסך"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"אימות הזהות שלך"</string>
@@ -1824,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"מצב שימוש ביד אחת"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"מעומעם במיוחד"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"מכשירי שמיעה"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"מנותק"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"מחובר"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"מצב פעיל"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 7ad10c8..2f8133a 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"片手モード"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"さらに輝度を下げる"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"補聴器"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"未接続"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"接続済み"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"有効"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index fcdfc01..ef15405 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ცალი ხელის რეჟიმი"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"დამატებითი დაბინდვა"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"სმენის აპარატები"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"კავშირი გაწყვეტილია"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"დაკავშირებული"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"აქტიური"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index e60ce5d..b575630 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Бір қолмен басқару режимі"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Экранды қарайту"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Есту аппараттары"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Ажыратылды"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Қосылды"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Белсенді"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index ad10175..eeae49b 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"មុខងារប្រើដៃម្ខាង"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ងងឹតខ្លាំង"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"បានផ្ដាច់"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"បានភ្ជាប់"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"សកម្ម"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 5711aa6..fd468b4 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ಒಂದು ಕೈ ಮೋಡ್"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ಇನ್ನಷ್ಟು ಮಬ್ಬು"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ಡಿಸ್ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ಸಕ್ರಿಯವಾಗಿದೆ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index bb8c022..0a88670 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"한 손 모드"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"더 어둡게"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"청각 보조 기기"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"연결 끊김"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"연결됨"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"활성"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 3fe442f..83a1c69 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Бир кол режими"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Кошумча караңгылатуу"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Угуу түзмөктөрү"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Ажыратылды"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Туташты"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Жигердүү"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 1658a78..f32ede6 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ໂໝດມືດຽວ"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ຫຼຸດແສງເປັນພິເສດ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ອຸປະກອນຊ່ວຍຟັງ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ຕັດການເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ນຳໃຊ້ຢູ່"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 57db157..51311b37 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Vienos rankos režimas"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Itin blanku"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Klausos įrenginiai"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Atjungta"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Prisijungta"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktyvus"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 764e8c9..3b3609e 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Vienas rokas režīms"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Papildu aptumšošana"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Dzirdes aparāti"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Atvienota"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Pievienota"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktīva"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 4600935..0c92fd5 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Режим со една рака"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Дополнително затемнување"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слушни помагала"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Не е поврзано"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Поврзано"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Активно"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index d9ec167..cbdbd2d 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ഒറ്റക്കൈ മോഡ്"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"കൂടുതൽ ഡിം ചെയ്യൽ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ശ്രവണ ഉപകരണങ്ങൾ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"വിച്ഛേദിച്ചു"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"കണക്റ്റ് ചെയ്തു"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"സജീവം"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 05f4f05..4c72a86 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Нэг гарын горим"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Хэт бүүдгэр"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Сонсголын төхөөрөмжүүд"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Салсан"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Холбогдсон"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Идэвхтэй"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index df7688e..ea1e92b 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"एकहाती मोड"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"आणखी डिम"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"श्रवणयंत्रे"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"डिस्कनेक्ट केले आहे"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"कनेक्ट केले आहे"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"अॅक्टिव्ह"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 7d77268..43acbac 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mod sebelah tangan"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Amat malap"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Peranti pendengaran"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Diputuskan sambungan"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Disambungkan"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktif"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index b2b6011..2333539 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"လက်တစ်ဖက်သုံးမုဒ်"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ပိုမှိန်ခြင်း"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"နားကြားကိရိယာ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ချိတ်ဆက်မထားပါ"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"ချိတ်ဆက်ထားသည်"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"သုံးနေသည်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 3022fca..3a337f6 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -276,7 +276,7 @@
<string name="bugreport_option_full_title" msgid="7681035745950045690">"Fullstendig rapport"</string>
<string name="bugreport_option_full_summary" msgid="1975130009258435885">"Bruk dette alternativet for minst mulig forstyrrelse på systemet når enheten din er treg eller ikke svarer, eller når du trenger alle rapportdelene. Det tas ikke noen skjermbilde, og du kan ikke legge til flere detaljer."</string>
<string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Tar skjermbilde for feilrapporten om # sekund.}other{Tar skjermbilde for feilrapporten om # sekunder.}}"</string>
- <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"En skjermbilde er tatt med feilrapporten"</string>
+ <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Et skjermbilde er tatt med feilrapporten"</string>
<string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Kunne ikke ta skjermbilde med feilrapporten"</string>
<string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"Stillemodus"</string>
<string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"Lyden er av"</string>
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enhåndsmodus"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ekstra dimmet"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Høreapparater"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Frakoblet"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Tilkoblet"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiv"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 93ead6d..ce64589 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"एक हाते मोड"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"अझै मधुरो"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"हियरिङ डिभाइसहरू"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"डिस्कनेक्ट गरिएको"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"कनेक्ट गरिएको"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"सक्रिय"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index fc12906..f7b6cc8 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Bediening met 1 hand"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dimmen"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hoortoestellen"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Verbinding verbroken"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Verbonden"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Actief"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 3200f40..ef567e5 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -327,7 +327,7 @@
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ଲୋକେସନ"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"ଏହି ଡିଭାଇସ୍ର ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରେ"</string>
- <string name="permgrouplab_calendar" msgid="6426860926123033230">"କେଲେଣ୍ଡର"</string>
+ <string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendar"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS ମେସେଜ୍ ପଠାନ୍ତୁ ଓ ଦେଖନ୍ତୁ"</string>
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ଏକ-ହାତ ମୋଡ୍"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ଅତ୍ୟଧିକ ଡିମ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ଶ୍ରବଣ ଡିଭାଇସଗୁଡ଼ିକ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ଡିସକନେକ୍ଟ କରାଯାଇଛି"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"କନେକ୍ଟ କରାଯାଇଛି"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ସକ୍ରିୟ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index cee65af..7f06227 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ਇੱਕ ਹੱਥ ਮੋਡ"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ਜ਼ਿਆਦਾ ਘੱਟ ਚਮਕ"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ਸੁਣਨ ਵਾਲੇ ਡੀਵਾਈਸ"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"ਡਿਸਕਨੈਕਟ ਹੋ ਗਿਆ"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"ਕਨੈਕਟ ਹੈ"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ਕਿਰਿਆਸ਼ੀਲ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 0c6eb46..73e4d24 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Tryb jednej ręki"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Dodatkowe przyciemnienie"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Urządzenia słuchowe"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Rozłączone"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Połączone"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktywne"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 4fe1c96..f15ab35 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo para uma mão"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Tela ainda mais escura"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Aparelhos auditivos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconectado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Ativo"</string>
@@ -1990,7 +1992,7 @@
<string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string>
<string name="toolbar_collapse_description" msgid="8009920446193610996">"Recolher"</string>
<string name="zen_mode_feature_name" msgid="3785547207263754500">"Não perturbe"</string>
- <string name="zen_mode_downtime_feature_name" msgid="5886005761431427128">"Intervalo"</string>
+ <string name="zen_mode_downtime_feature_name" msgid="5886005761431427128">"Descanso"</string>
<string name="zen_mode_default_weeknights_name" msgid="7902108149994062847">"Durante a semana à noite"</string>
<string name="zen_mode_default_weekends_name" msgid="4707200272709377930">"Fim de semana"</string>
<string name="zen_mode_default_events_name" msgid="2280682960128512257">"Evento"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index e17b96f..e80b780 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo para uma mão"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Mais escuro"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Dispositivos auditivos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desligado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Ligado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Ativo"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 4fe1c96..f15ab35 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modo para uma mão"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Tela ainda mais escura"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Aparelhos auditivos"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Desconectado"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectado"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Ativo"</string>
@@ -1990,7 +1992,7 @@
<string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string>
<string name="toolbar_collapse_description" msgid="8009920446193610996">"Recolher"</string>
<string name="zen_mode_feature_name" msgid="3785547207263754500">"Não perturbe"</string>
- <string name="zen_mode_downtime_feature_name" msgid="5886005761431427128">"Intervalo"</string>
+ <string name="zen_mode_downtime_feature_name" msgid="5886005761431427128">"Descanso"</string>
<string name="zen_mode_default_weeknights_name" msgid="7902108149994062847">"Durante a semana à noite"</string>
<string name="zen_mode_default_weekends_name" msgid="4707200272709377930">"Fim de semana"</string>
<string name="zen_mode_default_events_name" msgid="2280682960128512257">"Evento"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 596a3ed..f02923b 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modul cu o mână"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Luminozitate redusă suplimentar"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Aparate auditive"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Deconectat"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Conectat"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Activ"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 5104ca1..e32ec41 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Режим управления одной рукой"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Дополнительное уменьшение яркости"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слуховые аппараты"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Отключено"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Подключено"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Активно"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 8df50b7..35251bc 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"තනි අත් ප්රකාරය"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"තවත් අඳුරු"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"ශ්රවණ උපාංග"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"විසන්ධි විය"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"සම්බන්ධිතයි"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"සක්රිය"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 1d5b4e5..391b0d7 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Režim jednej ruky"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Mimoriadne stmavenie"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Načúvacie zariadenia"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Odpojené"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Pripojené"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktívne"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 3f9592b..c84fd17 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enoročni način"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Zelo zatemnjen zaslon"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni pripomočki"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Brez povezave"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Povezano"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktivno"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index fa3eeae..25d51a3 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"qasu tek të dhënat e sensorëve rreth shenjave të tua jetësore"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Njoftimet"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"shfaq njoftimet"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Të dhënat e gjurmimit për XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"të qaset në të dhënat për XR për ty dhe mjedisin rreth teje"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"të dhënat delikate të gjurmimit për XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"të qaset në të dhënat delikate të gjurmimit, si p.sh. të vështrimit të syve"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Të nxjerrë përmbajtjen e dritares"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspekton përmbajtjen e dritares me të cilën po ndërvepron."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Të aktivizojë veçorinë \"Eksploro me prekje\""</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Lejon aplikacionin të modifikojë koleksionin tënd të fotografive."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lexo vendndodhjet nga koleksioni yt i medias"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Lejon aplikacionin të lexojë vendndodhjet nga koleksioni yt i medias."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"të gjurmojë vështrimin e përafërt të syve"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Lejon që aplikacioni të gjurmojë vështrimin e përafërt të syve"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"të gjurmojë se ku po shikon ti"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Lejon që aplikacioni të qaset në të dhënat e vështrimit të saktë të syve."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"të gjurmojë fytyrën tënde"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Lejo që aplikacioni të qaset në të dhënat e gjurmimit të fytyrës."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"të gjurmojë duart e tua"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Lejon që aplikacioni të qaset në të dhënat e gjurmimit të duarve."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"të gjurmojë kokën tënde"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Lejo që aplikacioni të qaset në të dhënat e gjurmimit të kokës."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"të kuptojë mjedisin tënd"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Lejon që aplikacioni të qaset në të dhënat e gjurmimit për mjedisin drejtpërdrejt rreth teje."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"të kuptojë mjedisin tënd të drejtpërdrejtë me nivel të lartë të detajeve"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Lejon që aplikacioni të qaset në të dhënat e gjurmimit për mjedisin drejtpërdrejt rreth teje me nivel shumë të lartë të detajeve."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"të qaset në të dhënat për XR kur nuk është në plan të parë"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Lejon që aplikacioni të qaset në të dhënat për XR kur nuk është në plan të parë."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Përdor sistemet biometrike"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Përdor sistemet biometrike ose kyçjen e ekranit"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifiko që je ti"</string>
@@ -1823,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modaliteti i përdorimit me një dorë"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Shumë më i zbehtë"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Pajisjet e dëgjimit"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Shkëputur"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Lidhur"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktive"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index d6ad76b..77ceff2 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1804,6 +1804,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Режим једном руком"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Додатно затамни"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слушни апарати"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Веза је прекинута"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Повезано"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Активно"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 3d88850..1ee2564 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enhandsläge"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extradimmat"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hörhjälpmedel"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Frånkopplad"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Ansluten"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktiv"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 6d67618..36bf76d 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Hali ya kutumia kwa mkono mmoja"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Kipunguza mwangaza zaidi"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Vifaa vya kusaidia kusikia"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Haijaunganishwa"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Imeunganishwa"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Inatumika"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 6a8179c..3fa3827 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ஒற்றைக் கைப் பயன்முறை"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"மிகக் குறைவான வெளிச்சம்"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"செவித்துணைக் கருவிகள்"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"இணைப்புநீக்கப்பட்டது"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"இணைக்கப்பட்டுள்ளது"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"செயலில் உள்ளது"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 11611ea..027161e 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"వన్-హ్యాండెడ్ మోడ్"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ఎక్స్ట్రా డిమ్"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"వినికిడి పరికరాలు"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"డిస్కనెక్ట్ అయింది"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"కనెక్ట్ చేయబడింది"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"యాక్టివ్"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index d854025..f82adc6 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"โหมดมือเดียว"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"หรี่แสงเพิ่มเติม"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"เครื่องช่วยฟัง"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"เลิกเชื่อมต่อแล้ว"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"เชื่อมต่อแล้ว"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"ใช้งานอยู่"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 78f44c8..328997d 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"One-Hand mode"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extra dim"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Mga hearing device"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Nadiskonekta"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Nakakonekta"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Aktibo"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index b575d9f..5106e1a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Tek El modu"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ekstra loş"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"İşitme cihazları"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Bağlı değil"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Bağlı"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Etkin"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 737c245..203cdfa 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1805,6 +1805,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Режим керування однією рукою"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Додаткове зменшення яскравості"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слухові апарати"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Від’єднано"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Під’єднано"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Активний"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 82292bf..376efd1 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"ایک ہاتھ کی وضع"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"اضافی مدھم"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"سماعتی آلات"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"غیر منسلک ہے"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"منسلک ہے"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"فعال"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 0e66165..a1b9e5d 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Ixcham rejim"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Juda xira"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Eshitish qurilmalari"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Uzildi"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Ulandi"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Faol"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 754e66e..473568d 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Chế độ một tay"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Siêu tối"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Thiết bị trợ thính"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Đã ngắt kết nối"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Đã kết nối"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Đang hoạt động"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 1f625ad..f91f457 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"单手模式"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"极暗"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"助听装置"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"已断开连接"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"已连接"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"活跃"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index fc2783c..9bcb173 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"單手模式"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"超暗"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"助聽器"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"已中斷連線"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"已連線"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"運作中"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index c53aaa1..9f8fd67 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"單手模式"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"超暗"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"助聽器"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"連線中斷"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"已連線"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"運作中"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 079bf67..a0df4a1 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1803,6 +1803,8 @@
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Imodi yesandla esisodwa"</string>
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Ukufiphaza okwengeziwe"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Amadivayizi okuzwa"</string>
+ <!-- no translation found for autoclick_feature_name (8149248738736949630) -->
+ <skip />
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"Inqamukile"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"Ixhunyiwe"</string>
<string name="hearing_device_status_active" msgid="4770378695482566032">"Kuyasebenza"</string>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 9acb242..a1961ae 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -268,6 +268,9 @@
72dp (content margin) - 12dp (action padding) - 4dp (button inset) -->
<dimen name="notification_2025_actions_margin_start">56dp</dimen>
+ <!-- Notification action button text size -->
+ <dimen name="notification_2025_action_text_size">16sp</dimen>
+
<!-- The margin on the end of most content views (ignores the expander) -->
<dimen name="notification_content_margin_end">16dp</dimen>
diff --git a/core/res/res/values/locale_config.xml b/core/res/res/values/locale_config.xml
index 77d2e87..0efa1bc 100644
--- a/core/res/res/values/locale_config.xml
+++ b/core/res/res/values/locale_config.xml
@@ -163,15 +163,18 @@
<item>en-CM</item> <!-- English (Cameroon) -->
<item>en-CX</item> <!-- English (Christmas Island) -->
<item>en-CY</item> <!-- English (Cyprus) -->
+ <item>en-CZ</item> <!-- English (Czechia) -->
<item>en-DE</item> <!-- English (Germany) -->
<item>en-DG</item> <!-- English (Diego Garcia) -->
<item>en-DK</item> <!-- English (Denmark) -->
<item>en-DM</item> <!-- English (Dominica) -->
<item>en-ER</item> <!-- English (Eritrea) -->
+ <item>en-ES</item> <!-- English (Spain) -->
<item>en-FI</item> <!-- English (Finland) -->
<item>en-FJ</item> <!-- English (Fiji) -->
<item>en-FK</item> <!-- English (Falkland Islands (Islas Malvinas)) -->
<item>en-FM</item> <!-- English (Micronesia) -->
+ <item>en-FR</item> <!-- English (France) -->
<item>en-GB</item> <!-- English (United Kingdom) -->
<item>en-GD</item> <!-- English (Grenada) -->
<item>en-GG</item> <!-- English (Guernsey) -->
@@ -181,12 +184,14 @@
<item>en-GU</item> <!-- English (Guam) -->
<item>en-GY</item> <!-- English (Guyana) -->
<item>en-HK</item> <!-- English (Hong Kong) -->
+ <item>en-HU</item> <!-- English (Hungary) -->
<item>en-ID</item> <!-- English (Indonesia) -->
<item>en-IE</item> <!-- English (Ireland) -->
<item>en-IL</item> <!-- English (Israel) -->
<item>en-IM</item> <!-- English (Isle of Man) -->
<item>en-IN</item> <!-- English (India) -->
<item>en-IO</item> <!-- English (British Indian Ocean Territory) -->
+ <item>en-IT</item> <!-- English (Italy) -->
<item>en-JE</item> <!-- English (Jersey) -->
<item>en-JM</item> <!-- English (Jamaica) -->
<item>en-KE</item> <!-- English (Kenya) -->
@@ -210,15 +215,19 @@
<item>en-NF</item> <!-- English (Norfolk Island) -->
<item>en-NG</item> <!-- English (Nigeria) -->
<item>en-NL</item> <!-- English (Netherlands) -->
+ <item>en-NO</item> <!-- English (Norway) -->
<item>en-NR</item> <!-- English (Nauru) -->
<item>en-NU</item> <!-- English (Niue) -->
<item>en-NZ</item> <!-- English (New Zealand) -->
<item>en-PG</item> <!-- English (Papua New Guinea) -->
<item>en-PH</item> <!-- English (Philippines) -->
<item>en-PK</item> <!-- English (Pakistan) -->
+ <item>en-PL</item> <!-- English (Poland) -->
<item>en-PN</item> <!-- English (Pitcairn Islands) -->
<item>en-PR</item> <!-- English (Puerto Rico) -->
+ <item>en-PT</item> <!-- English (Portugal) -->
<item>en-PW</item> <!-- English (Palau) -->
+ <item>en-RO</item> <!-- English (Romania) -->
<item>en-RW</item> <!-- English (Rwanda) -->
<item>en-SB</item> <!-- English (Solomon Islands) -->
<item>en-SC</item> <!-- English (Seychelles) -->
@@ -227,6 +236,7 @@
<item>en-SG</item> <!-- English (Singapore) -->
<item>en-SH</item> <!-- English (St. Helena) -->
<item>en-SI</item> <!-- English (Slovenia) -->
+ <item>en-SK</item> <!-- English (Slovakia) -->
<item>en-SL</item> <!-- English (Sierra Leone) -->
<item>en-SS</item> <!-- English (South Sudan) -->
<item>en-SX</item> <!-- English (Sint Maarten) -->
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 6a83bae..cb3dfc7 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -5063,8 +5063,6 @@
<!-- Notification action button. Click it will open the bluetooth device details page for this hearing device. It will be shown when making a phone call with the hearing device. [CHAR LIMIT=none] -->
<string name="hearing_device_notification_settings_button">Settings</string>
- <!-- Text spoken when the current user is switched if accessibility is enabled. [CHAR LIMIT=none] -->
- <string name="user_switched">Current user <xliff:g id="name" example="Bob">%1$s</xliff:g>.</string>
<!-- Message shown when switching to a user [CHAR LIMIT=none] -->
<string name="user_switching_message">Switching to <xliff:g id="name" example="Bob">%1$s</xliff:g>\u2026</string>
<!-- Message when logging out a user on a split user system -->
diff --git a/core/tests/coretests/src/android/content/pm/OWNERS b/core/tests/coretests/src/android/content/pm/OWNERS
index 8673365..c4c40dc 100644
--- a/core/tests/coretests/src/android/content/pm/OWNERS
+++ b/core/tests/coretests/src/android/content/pm/OWNERS
@@ -1,5 +1,4 @@
include /core/java/android/content/pm/OWNERS
per-file AppSearchPersonTest.java = file:/core/java/android/content/pm/SHORTCUT_OWNERS
-per-file SigningDetailsTest.java = cbrubaker@google.com
per-file SigningDetailsTest.java = mpgroover@google.com
diff --git a/core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java b/core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java
index 8ef105f..de5f0ff 100644
--- a/core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java
+++ b/core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java
@@ -177,8 +177,10 @@
@RequiresFlagsEnabled(Flags.FLAG_DELAY_IMPLICIT_RR_REGISTRATION_UNTIL_RR_ACCESSED)
public void test_refreshRateRegistration_implicitRRCallbacksEnabled()
throws RemoteException {
+ DisplayManager.DisplayListener displayListener1 =
+ Mockito.mock(DisplayManager.DisplayListener.class);
// Subscription without supplied events doesn't subscribe to RR events
- mDisplayManagerGlobal.registerDisplayListener(mDisplayListener, mHandler,
+ mDisplayManagerGlobal.registerDisplayListener(displayListener1, mHandler,
ALL_DISPLAY_EVENTS, /* packageName= */ null,
/* isEventFilterExplicit */ false);
Mockito.verify(mDisplayManager)
@@ -187,7 +189,9 @@
// After registering to refresh rate changes, subscription without supplied events subscribe
// to RR events
mDisplayManagerGlobal.registerForRefreshRateChanges();
- mDisplayManagerGlobal.registerDisplayListener(mDisplayListener, mHandler,
+ DisplayManager.DisplayListener displayListener2 =
+ Mockito.mock(DisplayManager.DisplayListener.class);
+ mDisplayManagerGlobal.registerDisplayListener(displayListener2, mHandler,
ALL_DISPLAY_EVENTS, /* packageName= */ null,
/* isEventFilterExplicit */ false);
Mockito.verify(mDisplayManager)
@@ -203,7 +207,9 @@
}
// Subscription to RR when events are supplied doesn't happen
- mDisplayManagerGlobal.registerDisplayListener(mDisplayListener, mHandler,
+ DisplayManager.DisplayListener displayListener3 =
+ Mockito.mock(DisplayManager.DisplayListener.class);
+ mDisplayManagerGlobal.registerDisplayListener(displayListener3, mHandler,
ALL_DISPLAY_EVENTS, /* packageName= */ null,
/* isEventFilterExplicit */ true);
Mockito.verify(mDisplayManager)
@@ -214,7 +220,6 @@
int subscribedListenersCount = 0;
int nonSubscribedListenersCount = 0;
for (DisplayManagerGlobal.DisplayListenerDelegate delegate: delegates) {
-
if (delegate.isEventFilterExplicit()) {
assertEquals(ALL_DISPLAY_EVENTS, delegate.mInternalEventFlagsMask);
nonSubscribedListenersCount++;
diff --git a/core/tests/coretests/src/android/view/InsetsControllerTest.java b/core/tests/coretests/src/android/view/InsetsControllerTest.java
index 4516e9c..af87af0 100644
--- a/core/tests/coretests/src/android/view/InsetsControllerTest.java
+++ b/core/tests/coretests/src/android/view/InsetsControllerTest.java
@@ -1195,6 +1195,23 @@
});
}
+ @Test
+ public void testAnimatingTypes() throws Exception {
+ prepareControls();
+
+ final int types = navigationBars() | statusBars();
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+ clearInvocations(mTestHost);
+ mController.hide(types);
+ // quickly jump to final state by cancelling it.
+ mController.cancelExistingAnimations();
+ });
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+
+ verify(mTestHost, times(1)).updateAnimatingTypes(eq(types));
+ verify(mTestHost, times(1)).updateAnimatingTypes(eq(0) /* animatingTypes */);
+ }
+
private void waitUntilNextFrame() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
Choreographer.getMainThreadInstance().postCallback(Choreographer.CALLBACK_COMMIT,
diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java
index c40137f..f5d1e7a 100644
--- a/core/tests/coretests/src/android/view/ViewRootImplTest.java
+++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java
@@ -1054,7 +1054,7 @@
ViewRootImpl viewRootImpl = mView.getViewRootImpl();
sInstrumentation.runOnMainSync(() -> {
mView.invalidate();
- viewRootImpl.notifyInsetsAnimationRunningStateChanged(true);
+ viewRootImpl.updateAnimatingTypes(Type.systemBars());
mView.invalidate();
});
sInstrumentation.waitForIdleSync();
diff --git a/core/tests/featureflagtests/OWNERS b/core/tests/featureflagtests/OWNERS
index 2ff4f5a..6784f28 100644
--- a/core/tests/featureflagtests/OWNERS
+++ b/core/tests/featureflagtests/OWNERS
@@ -1,2 +1 @@
-sbasi@google.com
-tmfang@google.com
\ No newline at end of file
+tmfang@google.com
diff --git a/data/etc/OWNERS b/data/etc/OWNERS
index 712042f..1251fce 100644
--- a/data/etc/OWNERS
+++ b/data/etc/OWNERS
@@ -1,6 +1,5 @@
include /PACKAGE_MANAGER_OWNERS
-cbrubaker@google.com
hackbod@android.com
hackbod@google.com
jeffv@google.com
diff --git a/data/keyboards/Vendor_0957_Product_0031.kl b/data/keyboards/Vendor_0957_Product_0031.kl
index b47ee58..dd9fbe5 100644
--- a/data/keyboards/Vendor_0957_Product_0031.kl
+++ b/data/keyboards/Vendor_0957_Product_0031.kl
@@ -15,7 +15,7 @@
# Key Layout file for Google Reference RCU Remote with customizable button.
#
-key 116 TV_POWER WAKE
+key 116 POWER WAKE
key 217 ASSIST WAKE
key 423 MACRO_1 WAKE
diff --git a/drm/java/android/drm/OWNERS b/drm/java/android/drm/OWNERS
index 4387100..b65cce7 100644
--- a/drm/java/android/drm/OWNERS
+++ b/drm/java/android/drm/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 49079
-jtinker@google.com
robertshih@google.com
diff --git a/graphics/java/android/framework_graphics.aconfig b/graphics/java/android/framework_graphics.aconfig
index fdbee3c..8753ad8 100644
--- a/graphics/java/android/framework_graphics.aconfig
+++ b/graphics/java/android/framework_graphics.aconfig
@@ -44,9 +44,9 @@
}
flag {
- name: "gradient_drawable_shape_rounded_cap"
+ name: "gradient_drawable_shape_arc_for_rounded_cap"
is_fixed_read_only: true
- namespace: "core_graphics"
- description: "Make GradientDrawable support drawing ring with rounded stroke cap."
+ namespace: "wear_frameworks"
+ description: "Make GradientDrawable support arc shape for drawing ring with rounded stroke cap."
bug: "380000245"
}
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index ff1dc93..3b717fc 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -16,8 +16,8 @@
package android.graphics.drawable;
-import static com.android.graphics.flags.Flags.FLAG_GRADIENT_DRAWABLE_SHAPE_ROUNDED_CAP;
-import static com.android.graphics.flags.Flags.gradientDrawableShapeRoundedCap;
+import static com.android.graphics.flags.Flags.FLAG_GRADIENT_DRAWABLE_SHAPE_ARC_FOR_ROUNDED_CAP;
+import static com.android.graphics.flags.Flags.gradientDrawableShapeArcForRoundedCap;
import android.annotation.ColorInt;
import android.annotation.FlaggedApi;
@@ -132,7 +132,7 @@
/**
* Shape is an arc.
*/
- @FlaggedApi(FLAG_GRADIENT_DRAWABLE_SHAPE_ROUNDED_CAP)
+ @FlaggedApi(FLAG_GRADIENT_DRAWABLE_SHAPE_ARC_FOR_ROUNDED_CAP)
public static final int ARC = 4;
/** @hide */
@@ -874,7 +874,7 @@
break;
}
case ARC:
- if (gradientDrawableShapeRoundedCap()) {
+ if (gradientDrawableShapeArcForRoundedCap()) {
// TODO(b/394988176): Consider applying ARC drawing logic to RING shape.
float centerX = mRect.centerX();
float centerY = mRect.centerY();
@@ -2159,7 +2159,6 @@
public int mInnerRadius = -1;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 124050218)
public int mThickness = -1;
- @UnsupportedAppUsage(trackingBug = 380000245)
@StrokeCap public int mStrokeCap = ROUND;
public boolean mDither = false;
diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt
index 3aefcd5..9087da3 100644
--- a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt
+++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt
@@ -552,7 +552,9 @@
private fun createAppBubble(usePendingIntent: Boolean = false): Bubble {
val target = Intent(context, TestActivity::class.java)
+ val component = ComponentName(context, TestActivity::class.java)
target.setPackage(context.packageName)
+ target.setComponent(component)
if (usePendingIntent) {
// Robolectric doesn't seem to play nice with PendingIntents, have to mock it.
val pendingIntent = mock<PendingIntent>()
diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerViewTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerViewTest.kt
index 7b583137..14c152102 100644
--- a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerViewTest.kt
+++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerViewTest.kt
@@ -19,7 +19,9 @@
import android.animation.AnimatorTestRule
import android.content.Context
import android.content.pm.LauncherApps
+import android.graphics.Insets
import android.graphics.PointF
+import android.graphics.Rect
import android.os.Handler
import android.os.UserManager
import android.view.IWindowManager
@@ -61,6 +63,7 @@
import com.android.wm.shell.shared.TransactionPool
import com.android.wm.shell.shared.animation.PhysicsAnimatorTestUtils
import com.android.wm.shell.shared.bubbles.BubbleBarLocation
+import com.android.wm.shell.shared.bubbles.DeviceConfig
import com.android.wm.shell.sysui.ShellCommandHandler
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
@@ -80,6 +83,10 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
class BubbleBarLayerViewTest {
+ companion object {
+ const val SCREEN_WIDTH = 2000
+ const val SCREEN_HEIGHT = 1000
+ }
@get:Rule val animatorTestRule: AnimatorTestRule = AnimatorTestRule(this)
@@ -111,6 +118,16 @@
bubblePositioner = BubblePositioner(context, windowManager)
bubblePositioner.setShowingInBubbleBar(true)
+ val deviceConfig =
+ DeviceConfig(
+ windowBounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
+ isLargeScreen = true,
+ isSmallTablet = false,
+ isLandscape = true,
+ isRtl = false,
+ insets = Insets.of(10, 20, 30, 40)
+ )
+ bubblePositioner.update(deviceConfig)
testBubblesList = mutableListOf()
val bubbleData = mock<BubbleData>()
@@ -313,6 +330,48 @@
assertThat(uiEventLoggerFake.logs[0]).hasBubbleInfo(bubble)
}
+ @Test
+ fun testUpdateExpandedView_updateLocation() {
+ bubblePositioner.bubbleBarLocation = BubbleBarLocation.RIGHT
+ val bubble = createBubble("first")
+
+ getInstrumentation().runOnMainSync {
+ bubbleBarLayerView.showExpandedView(bubble)
+ }
+ waitForExpandedViewAnimation()
+
+ val previousX = bubble.bubbleBarExpandedView!!.x
+
+ bubblePositioner.bubbleBarLocation = BubbleBarLocation.LEFT
+ getInstrumentation().runOnMainSync {
+ bubbleBarLayerView.updateExpandedView()
+ }
+
+ assertThat(bubble.bubbleBarExpandedView!!.x).isNotEqualTo(previousX)
+ }
+
+ @Test
+ fun testUpdatedExpandedView_updateLocation_skipWhileAnimating() {
+ bubblePositioner.bubbleBarLocation = BubbleBarLocation.RIGHT
+ val bubble = createBubble("first")
+
+ getInstrumentation().runOnMainSync {
+ bubbleBarLayerView.showExpandedView(bubble)
+ }
+ waitForExpandedViewAnimation()
+
+ val previousX = bubble.bubbleBarExpandedView!!.x
+ bubble.bubbleBarExpandedView!!.isAnimating = true
+
+ bubblePositioner.bubbleBarLocation = BubbleBarLocation.LEFT
+ getInstrumentation().runOnMainSync {
+ bubbleBarLayerView.updateExpandedView()
+ }
+
+ // Expanded view is not updated while animating
+ assertThat(bubble.bubbleBarExpandedView!!.x).isEqualTo(previousX)
+ }
+
private fun createBubble(key: String): Bubble {
val bubbleTaskView = FakeBubbleTaskViewFactory(context, mainExecutor).create()
val bubbleBarExpandedView =
diff --git a/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml b/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
index d50a14c..c2aa146 100644
--- a/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
+++ b/libs/WindowManager/Shell/res/layout/desktop_mode_window_decor_maximize_menu.xml
@@ -79,7 +79,7 @@
android:layout_marginEnd="4dp">
<Button
- android:layout_width="94dp"
+ android:layout_width="108dp"
android:layout_height="60dp"
android:id="@+id/maximize_menu_size_toggle_button"
style="?android:attr/buttonBarButtonStyle"
@@ -126,7 +126,7 @@
<Button
android:id="@+id/maximize_menu_snap_left_button"
style="?android:attr/buttonBarButtonStyle"
- android:layout_width="41dp"
+ android:layout_width="48dp"
android:layout_height="@dimen/desktop_mode_maximize_menu_button_height"
android:layout_marginEnd="4dp"
android:background="@drawable/desktop_mode_maximize_menu_button_background"
@@ -137,7 +137,7 @@
<Button
android:id="@+id/maximize_menu_snap_right_button"
style="?android:attr/buttonBarButtonStyle"
- android:layout_width="41dp"
+ android:layout_width="48dp"
android:layout_height="@dimen/desktop_mode_maximize_menu_button_height"
android:background="@drawable/desktop_mode_maximize_menu_button_background"
android:importantForAccessibility="yes"
diff --git a/libs/WindowManager/Shell/res/layout/open_by_default_settings_dialog.xml b/libs/WindowManager/Shell/res/layout/open_by_default_settings_dialog.xml
index f6256e6..ed5b339 100644
--- a/libs/WindowManager/Shell/res/layout/open_by_default_settings_dialog.xml
+++ b/libs/WindowManager/Shell/res/layout/open_by_default_settings_dialog.xml
@@ -72,7 +72,7 @@
android:layout_height="wrap_content"
android:textSize="12sp"
android:textFontWeight="400"
- android:lineHeight="16dp"
+ android:lineHeight="28dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:textColor="@androidprv:color/materialColorOnSurfaceVariant"
@@ -113,12 +113,13 @@
<Button
android:id="@+id/open_by_default_settings_dialog_confirm_button"
android:layout_width="wrap_content"
- android:layout_height="36dp"
+ android:layout_height="wrap_content"
+ android:minHeight="48dp"
android:text="@string/open_by_default_dialog_dismiss_button_text"
android:layout_gravity="end"
android:layout_marginHorizontal="24dp"
- android:layout_marginTop="32dp"
- android:layout_marginBottom="24dp"
+ android:layout_marginTop="26dp"
+ android:layout_marginBottom="18dp"
android:textSize="14sp"
android:textFontWeight="500"
android:textColor="@androidprv:color/materialColorOnPrimary"
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index 0f42645..4dffce5 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Links 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Links 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Volskerm regs"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ruil apps om"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Volskerm bo"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Bo 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Bo 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Herbegin"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Moenie weer wys nie"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dubbeltik om\nhierdie app te skuif"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimeer"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Maak klein"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Maak toe"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Terug"</string>
<string name="handle_text" msgid="4419667835599523257">"Apphandvatsel"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikoon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Verander grootte van linkerkantse venster"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Verander grootte van regterkantse venster"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimeer of stel venstergrootte terug"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimeer of stel venstergrootte terug"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimeer appvenster"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Maak By Verstek Oop-instellings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Kies hoe om webskakels vir hierdie app oop te maak"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In die app"</string>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index be02f43..0881e77 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ግራ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ግራ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"የቀኝ ሙሉ ማያ ገፅ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"መተግበሪያዎችን ይቀያይሩ"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"የላይ ሙሉ ማያ ገፅ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ከላይ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ከላይ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"እንደገና ያስጀምሩ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ዳግም አታሳይ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ይህን መተግበሪያ\nለማንቀሳቀስ ሁለቴ መታ ያድርጉ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"አስፋ"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"አሳንስ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ዝጋ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ተመለስ"</string>
<string name="handle_text" msgid="4419667835599523257">"የመተግበሪያ መያዣ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"የመተግበሪያ አዶ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"መስኮትን ወደ ግራ መጠን ቀይር"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"መስኮትን ወደ ቀኝ መጠን ቀይር"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"የመስኮት መጠንን አሳድግ ወይም ወደነበረበት መልስ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"የመስኮት መጠንን አሳድግ ወይም ወደነበረበት መልስ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"የመተግበሪያ መስኮትን አሳንስ"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"በነባሪ ቅንብሮች ክፈት"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ለዚህ የድር መተግበሪያ አገናኙን እንዴት እንደሚከፍቱ ይምረጡ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"በመተግበሪያው ውስጥ"</string>
diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml
index 1680922..9cc49aa 100644
--- a/libs/WindowManager/Shell/res/values-ar/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ar/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ضبط حجم النافذة اليسرى ليكون ٥٠%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ضبط حجم النافذة اليسرى ليكون ٣٠%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"عرض النافذة اليمنى بملء الشاشة"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"تبديل التطبيقات"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"عرض النافذة العلوية بملء الشاشة"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ضبط حجم النافذة العلوية ليكون ٧٠%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ضبط حجم النافذة العلوية ليكون ٥٠%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"إعادة التشغيل"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"عدم عرض مربّع حوار التأكيد مجددًا"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"انقر مرّتَين لنقل\nهذا التطبيق."</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"تكبير"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"تصغير"</string>
- <string name="close_button_text" msgid="2913281996024033299">"إغلاق"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"رجوع"</string>
<string name="handle_text" msgid="4419667835599523257">"مقبض التطبيق"</string>
<string name="app_icon_text" msgid="2823268023931811747">"رمز التطبيق"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"تغيير حجم النافذة بمحاذاتها إلى اليمين"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"تغيير حجم النافذة بمحاذاتها إلى اليسار"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"تكبير حجم النافذة أو استعادته"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"تكبير حجم النافذة أو استعادته"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"تصغير نافذة التطبيق"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"إعدادات الفتح تلقائيًا"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"اختيار طريقة فتح روابط الويب لهذا التطبيق"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"في التطبيق"</string>
diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml
index 0bc4a0a..c59753c 100644
--- a/libs/WindowManager/Shell/res/values-as/strings.xml
+++ b/libs/WindowManager/Shell/res/values-as/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"বাওঁফালৰ স্ক্ৰীনখন ৫০% কৰক"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"বাওঁফালৰ স্ক্ৰীনখন ৩০% কৰক"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"সোঁফালৰ স্ক্ৰীনখন সম্পূৰ্ণ স্ক্ৰীন কৰক"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"এপ্সমূহ সলনাসলনি কৰক"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"শীৰ্ষ স্ক্ৰীনখন সম্পূৰ্ণ স্ক্ৰীন কৰক"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"শীর্ষ স্ক্ৰীনখন ৭০% কৰক"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"শীর্ষ স্ক্ৰীনখন ৫০% কৰক"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ৰিষ্টাৰ্ট কৰক"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"পুনৰাই নেদেখুৱাব"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"এই এপ্টো\nস্থানান্তৰ কৰিবলৈ দুবাৰ টিপক"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"সৰ্বাধিক মাত্ৰালৈ বঢ়াওক"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"মিনিমাইজ কৰক"</string>
- <string name="close_button_text" msgid="2913281996024033299">"বন্ধ কৰক"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"উভতি যাওক"</string>
<string name="handle_text" msgid="4419667835599523257">"এপৰ হেণ্ডেল"</string>
<string name="app_icon_text" msgid="2823268023931811747">"এপৰ চিহ্ন"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"সোঁফাললৈ ৱিণ্ড’ৰ আকাৰ সলনি কৰক"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"বাওঁফাললৈ ৱিণ্ড’ৰ আকাৰ সলনি কৰক"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ৱিণ্ড’ৰ আকাৰ মেক্সিমাইজ বা পুনঃস্থাপন কৰক"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ৱিণ্ড’ৰ আকাৰ মেক্সিমাইজ বা পুনঃস্থাপন কৰক"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"এপ্ ৱিণ্ড’ মিনিমাইজ কৰক"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ডিফ’ল্ট ছেটিং খোলক"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"এই এপ্টোৰ বাবে কিদৰে ৱেব লিংক খুলিব পাৰি সেয়া বাছনি কৰক"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"এপ্টোত"</string>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index 2ccae4b..63e610b 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Sol 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Sol 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Sağ tam ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Tətbiqləri dəyişin"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Yuxarı tam ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Yuxarı 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Yuxarı 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Yenidən başladın"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Yenidən göstərməyin"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tətbiqi köçürmək üçün\niki dəfə toxunun"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Böyüdün"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Kiçildin"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Bağlayın"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Geriyə"</string>
<string name="handle_text" msgid="4419667835599523257">"Tətbiq ləqəbi"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Tətbiq ikonası"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Pəncərə ölçüsünü sola dəyişin"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Pəncərə ölçüsünü sağa dəyişin"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Pəncərə ölçüsünü artırın və ya bərpa edin"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Pəncərə ölçüsünü artırın və ya bərpa edin"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Tətbiq pəncərəsini kiçildin"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Defolt ayarlarla açın"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Bu tətbiq üçün veb-linklərin necə açılacağını seçin"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Tətbiqdə"</string>
diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
index b79b860..7cb6f87 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Levi ekran 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Levi ekran 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Režim celog ekrana za donji ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamenite mesta aplikacijama"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Režim celog ekrana za gornji ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Gornji ekran 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Gornji ekran 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartuj"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovo"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvaput dodirnite da biste\npremestili ovu aplikaciju"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Uvećajte"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Umanjite"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zatvorite"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Nazad"</string>
<string name="handle_text" msgid="4419667835599523257">"Identifikator aplikacije"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacije"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Promenite veličinu prozora nalevo"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Promenite veličinu prozora nadesno"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Uvećajte ili vratite veličinu prozora"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Uvećajte ili vratite veličinu prozora"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Umanjite prozor aplikacije"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Podešavanje Podrazumevano otvaraj"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Odaberite način otvaranja veb-linkova za ovu aplikaciju"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"U aplikaciji"</string>
diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml
index d26c37b..4f3da2b 100644
--- a/libs/WindowManager/Shell/res/values-be/strings.xml
+++ b/libs/WindowManager/Shell/res/values-be/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Левы экран – 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Левы экран – 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Правы экран – поўнаэкранны рэжым"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Пераключыць праграмы"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Верхні экран – поўнаэкранны рэжым"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Верхні экран – 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Верхні экран – 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перазапусціць"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Больш не паказваць"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Каб перамясціць праграму,\nнацісніце двойчы"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Разгарнуць"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Згарнуць"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Закрыць"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Маркер праграмы"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Значок праграмы"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Змяніць памер акна і перамясціць да левага краю"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Змяніць памер акна і перамясціць да правага краю"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Разгарнуць акно ці аднавіць яго памер"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Разгарнуць акно ці аднавіць яго памер"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Згарнуць акно праграмы"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Налады параметра \"Адкрываць стандартна\""</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Выберыце, як гэта праграма будзе адкрываць вэб-спасылкі"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"У праграме"</string>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index 9cc9db8..3f867a22 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ляв екран: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ляв екран: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Десен екран: Показване на цял екран"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Размяна на приложенията"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Горен екран: Показване на цял екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Горен екран: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Горен екран: 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартиране"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Да не се показва отново"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Докоснете двукратно, за да\nпреместите това приложение"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Увеличаване"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Намаляване"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Затваряне"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Манипулатор за приложението"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Икона на приложението"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Преоразмеряване на прозореца наляво"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Преоразмеряване на прозореца надясно"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Увеличаване или възстановяване на размера на прозореца"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Увеличаване или възстановяване на размера на прозореца"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Намаляване на прозореца на приложението"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Отваряне на настройките по подразбиране"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Изберете как да се отварят уеб връзките за това приложение"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"В приложението"</string>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index c1264d4..3967d4b 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"৫০% বাকি আছে"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"৩০% বাকি আছে"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ডান দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"অ্যাপ পাল্টান"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"উপর দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"শীর্ষ ৭০%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"শীর্ষ ৫০%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"রিস্টার্ট করুন"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"আর দেখতে চাই না"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"এই অ্যাপ সরাতে\nডবল ট্যাপ করুন"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"বড় করুন"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ছোট করুন"</string>
- <string name="close_button_text" msgid="2913281996024033299">"বন্ধ করুন"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ফিরে যান"</string>
<string name="handle_text" msgid="4419667835599523257">"অ্যাপের হ্যান্ডেল"</string>
<string name="app_icon_text" msgid="2823268023931811747">"অ্যাপ আইকন"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"বাঁদিকে উইন্ডো রিসাইজ করুন"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ডানদিকে উইন্ডো রিসাইজ করুন"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"উইন্ডো সাইজ বড় বা রিস্টোর করুন"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"উইন্ডো সাইজ বড় বা রিস্টোর করুন"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"অ্যাপ উইন্ডো ছোট করুন"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ডিফল্ট হিসেবে থাকা সেটিংস খুলুন"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"এই অ্যাপের জন্য কীভাবে ওয়েব লিঙ্ক খুলবেন তা বেছে নিন"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"অ্যাপের মধ্যে"</string>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index 7c912b6..6b59d91 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Lijevo 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Lijevo 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Desno cijeli ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamjena aplikacija"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Gore cijeli ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Gore 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Gore 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Ponovo pokreni"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovo"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dodirnite dvaput da\npomjerite aplikaciju"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziranje"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimiziranje"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zatvaranje"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Nazad"</string>
<string name="handle_text" msgid="4419667835599523257">"Ručica aplikacije"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacije"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Promjena veličine prozora i poravnanje lijevo"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Promjena veličine prozora i poravnanje desno"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimiziranje ili vraćanje veličine prozora"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimiziranje ili vraćanje veličine prozora"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimiziranje prozora aplikacije"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otvaranje prema zadanim postavkama"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Odaberite način otvaranja web linkova za ovu aplikaciju"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"U aplikaciji"</string>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 2c2a177..955e5cc 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Pantalla esquerra al 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Pantalla esquerra al 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla dreta completa"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Canvia les aplicacions"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla superior completa"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Pantalla superior al 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Pantalla superior al 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reinicia"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No ho tornis a mostrar"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Fes doble toc per\nmoure aquesta aplicació"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximitza"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimitza"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Tanca"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Enrere"</string>
<string name="handle_text" msgid="4419667835599523257">"Identificador de l\'aplicació"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona de l\'aplicació"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Canvia la mida de la finestra a l\'esquerra"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Canvia la mida de la finestra a la dreta"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximitza o restaura la mida de la finestra"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximitza o restaura la mida de la finestra"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimitza la finestra de l\'aplicació"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Configuració d\'obertura predeterminada"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Tria com vols obrir els enllaços web per a aquesta aplicació"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"A l\'aplicació"</string>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index e47d1f6..673f7fc 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % vlevo"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % vlevo"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pravá část na celou obrazovku"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zaměnit aplikace"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Horní část na celou obrazovku"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % nahoře"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % nahoře"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartovat"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Tuto zprávu příště nezobrazovat"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvojitým klepnutím\npřesunete aplikaci"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovat"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimalizovat"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zavřít"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Zpět"</string>
<string name="handle_text" msgid="4419667835599523257">"Popisovač aplikace"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikace"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Přichytit okno vlevo"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Přichytit okno vpravo"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximalizovat nebo obnovit velikost okna"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximalizovat nebo obnovit velikost okna"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimalizovat okno aplikace"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otevírat podle výchozího nastavení"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Určete, jak se v této aplikaci mají otevírat webové odkazy"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"V aplikaci"</string>
diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml
index f5656d5..635df33 100644
--- a/libs/WindowManager/Shell/res/values-da/strings.xml
+++ b/libs/WindowManager/Shell/res/values-da/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Venstre 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Venstre 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Vis højre del i fuld skærm"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Byt apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Vis øverste del i fuld skærm"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Øverste 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Øverste 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Genstart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Vis ikke igen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tryk to gange\nfor at flytte appen"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimér"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimer"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Luk"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Tilbage"</string>
<string name="handle_text" msgid="4419667835599523257">"Apphåndtag"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Juster størrelsen på vinduet til venstre"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Juster størrelsen på vinduet til højre"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimer eller gendan vinduesstørrelse"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimer eller gendan vinduesstørrelse"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimer appvindue"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Indstillinger for automatisk åbning"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Vælg, hvordan denne app skal åben weblinks"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"I appen"</string>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 3762b4b..5be8b0b 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % links"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % links"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Vollbild rechts"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Apps austauschen"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Vollbild oben"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % oben"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % oben"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Neu starten"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nicht mehr anzeigen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Zum Verschieben\ndoppeltippen"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximieren"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimieren"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Schließen"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Zurück"</string>
<string name="handle_text" msgid="4419667835599523257">"App-Ziehpunkt"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App-Symbol"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Fenstergröße nach links anpassen"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Fenstergröße nach rechts anpassen"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Fenstergröße maximieren oder wiederherstellen"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Fenstergröße maximieren oder wiederherstellen"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"App-Fenster minimieren"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Einstellungen für die Option „Standardmäßig öffnen“"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Festlegen, wie Weblinks für diese App geöffnet werden"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In der App"</string>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index 8e715d5..bd3cf05 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Αριστερή 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Αριστερή 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Δεξιά πλήρης οθόνη"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Εναλλαγή εφαρμογών"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Πάνω πλήρης οθόνη"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Πάνω 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Πάνω 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Επανεκκίνηση"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Να μην εμφανιστεί ξανά"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Πατήστε δύο φορές για\nμετακίνηση αυτής της εφαρμογής"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Μεγιστοποίηση"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Ελαχιστοποίηση"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Κλείσιμο"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Πίσω"</string>
<string name="handle_text" msgid="4419667835599523257">"Λαβή εφαρμογής"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Εικονίδιο εφαρμογής"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Αλλαγή μεγέθους παραθύρου προς τα αριστερά"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Αλλαγή μεγέθους παραθύρου προς τα δεξιά"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Μεγιστοποίηση ή επαναφορά μεγέθους παραθύρου"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Μεγιστοποίηση ή επαναφορά μεγέθους παραθύρου"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Ελαχιστοποίηση παραθύρου εφαρμογής"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Άνοιγμα ρυθμίσεων από προεπιλογή"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Επιλογή τρόπου ανοίγματος συνδέσμων ιστού για την εφαρμογή"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Στην εφαρμογή"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
index 75d2bf1..b137d80 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Close"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Back"</string>
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
index e552f95..9b9294d 100644
--- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
@@ -43,7 +43,8 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap Apps"</string>
+ <string name="accessibility_action_divider_swap_vertical" msgid="3644891227133372072">"Swap top app with bottom"</string>
+ <string name="accessibility_action_divider_swap_horizontal" msgid="2722197605446631628">"Swap left app with right"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -112,9 +113,10 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don’t show again"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximize"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimize"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Close"</string>
+ <string name="maximize_button_text" msgid="8106849394538234709">"Maximize <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="restore_button_text" msgid="5377571986086775288">"Restore <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="minimize_button_text" msgid="5213953162664451152">"Minimize <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="close_button_text" msgid="4544839489310949894">"Close <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="back_button_text" msgid="1469718707134137085">"Back"</string>
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App Icon"</string>
@@ -150,8 +152,10 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximize or restore window size"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximize or restore window size"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimize app window"</string>
+ <string name="app_header_talkback_action_maximize_button_text" msgid="8776156791095878638">"Maximize app window size"</string>
+ <string name="app_header_talkback_action_restore_button_text" msgid="2153022340772980863">"Restore window size"</string>
+ <string name="app_header_talkback_action_minimize_button_text" msgid="7491054416186901764">"Minimize app window"</string>
+ <string name="app_header_talkback_action_close_button_text" msgid="5159612596378268926">"Close app window"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 75d2bf1..b137d80 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Close"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Back"</string>
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
index 75d2bf1..b137d80 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Close"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Back"</string>
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
index c358ae4..ebfdc6d 100644
--- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Izquierda: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Izquierda: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla derecha completa"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Intercambiar apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla superior completa"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Superior: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Superior: 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No volver a mostrar"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Presiona dos veces\npara mover esta app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atrás"</string>
<string name="handle_text" msgid="4419667835599523257">"Controlador de la app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ícono de la app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ajustar el tamaño de la ventana hacia la izquierda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ajustar el tamaño de la ventana hacia la derecha"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar o restablecer el tamaño de la ventana"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar o restablecer el tamaño de la ventana"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar ventana de la app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Abrir con la configuración predeterminada"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Elige cómo abrir vínculos web para esta app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"En la app"</string>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index 275d88d..dfa7869 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Izquierda 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Izquierda 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla derecha completa"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Cambiar aplicaciones"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla superior completa"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Superior 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Superior 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No volver a mostrar"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toca dos veces para\nmover esta aplicación"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atrás"</string>
<string name="handle_text" msgid="4419667835599523257">"Controlador de la aplicación"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icono de la aplicación"</string>
@@ -134,7 +142,7 @@
<string name="collapse_menu_text" msgid="7515008122450342029">"Cerrar menú"</string>
<string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (vista para ordenadores)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximizar pantalla"</string>
- <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Cambiar tamaño"</string>
+ <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Dividir pantalla"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"La aplicación no se puede mover aquí"</string>
<string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Inmersivo"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Restaurar"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Cambiar tamaño de la ventana a la izquierda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Cambiar tamaño de la ventana a la derecha"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar o restaurar tamaño de la ventana"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar o restaurar tamaño de la ventana"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar ventana de la aplicación"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Abrir con los ajustes predeterminados"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Elige cómo quieres abrir los enlaces web de esta aplicación"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"En la aplicación"</string>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index 3a330b3..294b7fe 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vasak: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vasak: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Parem täisekraan"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Rakenduste vahetamine"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ülemine täisekraan"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Ülemine: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Ülemine: 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Taaskäivita"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ära kuva uuesti"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Rakenduse teisaldamiseks\ntopeltpuudutage"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimeeri"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimeeri"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Sule"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Tagasi"</string>
<string name="handle_text" msgid="4419667835599523257">"Rakenduse element"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Rakenduse ikoon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Akna suuruse muutmine, vasakule"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Akna suuruse muutmine, paremale"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Akna suuruse maksimeerimine või taastamine"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Akna suuruse maksimeerimine või taastamine"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Rakenduse akna minimeerimine"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Avamisviisi vaikeseaded"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Valige, kuidas avada selle rakenduse puhul veebilinke"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Rakenduses"</string>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index c0766a2..a8f9212 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ezarri ezkerraldea % 50en"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ezarri ezkerraldea % 30en"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Ezarri eskuinaldea pantaila osoan"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Aldatu aplikazioz"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ezarri goialdea pantaila osoan"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Ezarri goialdea % 70en"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Ezarri goialdea % 50en"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Berrabiarazi"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ez erakutsi berriro"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Sakatu birritan\naplikazioa mugitzeko"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizatu"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizatu"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Itxi"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atzera"</string>
<string name="handle_text" msgid="4419667835599523257">"Aplikazioaren kontrol-puntua"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aplikazioaren ikonoa"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Aldatu leihoaren tamaina eta eraman ezkerrera"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Aldatu leihoaren tamaina eta eraman eskuinera"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizatu edo leheneratu leihoaren tamaina"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizatu edo leheneratu leihoaren tamaina"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizatu aplikazioaren leihoa"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Modu lehenetsian irekitzearen ezarpenak"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Aukeratu nola ireki sareko estekak aplikazio honetan"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Aplikazioan"</string>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index ace8b33..59affd7 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"٪۵۰ چپ"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"٪۳۰ چپ"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"تمامصفحه راست"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"جابهجا کردن برنامهها"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"تمامصفحه بالا"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"٪۷۰ بالا"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"٪۵۰ بالا"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"بازراهاندازی"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"دوباره نشان داده نشود"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"برای جابهجا کردن این برنامه\nدو تکضرب بزنید"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"بزرگ کردن"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"کوچک کردن"</string>
- <string name="close_button_text" msgid="2913281996024033299">"بستن"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"برگشتن"</string>
<string name="handle_text" msgid="4419667835599523257">"دستگیره برنامه"</string>
<string name="app_icon_text" msgid="2823268023931811747">"نماد برنامه"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"تغییر اندازه پنجره به چپ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"تغییر اندازه پنجره به راست"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"بیشینهسازی یا بازیابی اندازه پنجره"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"بیشینهسازی یا بازیابی اندازه پنجره"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"کمینهسازی پنجره برنامه"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"تنظیمات باز کردن بهطور پیشفرض"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"انتخاب روش باز کردن پیوندهای وب مربوط به این برنامه"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"در برنامه"</string>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index aed3fdc..b1d8431 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vasen 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vasen 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Oikea koko näytölle"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Vaihda sovellusta"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Yläosa koko näytölle"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Yläosa 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Yläosa 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Käynnistä uudelleen"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Älä näytä uudelleen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Kaksoisnapauta, jos\nhaluat siirtää sovellusta"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Suurenna"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Pienennä"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Sulje"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Takaisin"</string>
<string name="handle_text" msgid="4419667835599523257">"Sovelluksen tunnus"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Sovelluskuvake"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Muuta vasemmanpuoleisen ikkunan kokoa"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Muuta vasemmanpuoleisen ikkunan kokoa"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Suurenna ikkuna tai palauta ikkunan koko"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Suurenna ikkuna tai palauta ikkunan koko"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Pienennä sovellusikkuna"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Avaa oletusasetusten mukaan"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Valitse, miten verkkolinkit avataan tässä sovelluksessa"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Sovelluksessa"</string>
diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
index dc2025f..c58f4b0 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % à la gauche"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % à la gauche"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Plein écran à la droite"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Permuter des applis"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Plein écran dans le haut"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % dans le haut"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % dans le haut"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Redémarrer"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne plus afficher"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toucher deux fois pour\ndéplacer cette appli"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Réduire"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Retour"</string>
<string name="handle_text" msgid="4419667835599523257">"Poignée de l\'appli"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icône de l\'appli"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionner la fenêtre vers la gauche"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionner la fenêtre vers la droite"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Agrandir ou restaurer la taille de la fenêtre"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Agrandir ou restaurer la taille de la fenêtre"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Réduire la fenêtre de l\'appli"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ouvrir les paramètres par défaut"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choisissez comment ouvrir les liens Web pour cette appli"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Dans l\'appli"</string>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index 377413e..e8db4c9 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Écran de gauche à 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Écran de gauche à 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Écran de droite en plein écran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Échanger les applis"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Écran du haut en plein écran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Écran du haut à 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Écran du haut à 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Redémarrer"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne plus afficher"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Appuyez deux fois\npour déplacer cette appli"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Réduire"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Retour"</string>
<string name="handle_text" msgid="4419667835599523257">"Poignée de l\'appli"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icône d\'application"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionner la fenêtre vers la gauche"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionner la fenêtre vers la droite"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Agrandir ou restaurer la taille de la fenêtre"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Agrandir ou restaurer la taille de la fenêtre"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Réduire la fenêtre de l\'application"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ouvrir les paramètres par défaut"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choisir comment ouvrir les liens Web pour cette appli"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Dans l\'application"</string>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index 3022f62..ba1c4a4 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % á esquerda"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % á esquerda"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla completa á dereita"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Cambiar as aplicacións"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla completa arriba"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % arriba"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % arriba"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Non mostrar outra vez"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toca dúas veces para\nmover esta aplicación"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Pechar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atrás"</string>
<string name="handle_text" msgid="4419667835599523257">"Controlador da aplicación"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona de aplicación"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Axustar o tamaño da ventá á esquerda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Axustar o tamaño da ventá á dereita"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar ou restaurar o tamaño da ventá"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar ou restaurar o tamaño da ventá"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar a ventá da aplicación"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Abrir coa configuración predeterminada"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Escoller como abrir as ligazóns web para esta aplicación"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Na aplicación"</string>
diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml
index 196784b..cd75508 100644
--- a/libs/WindowManager/Shell/res/values-gu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gu/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ડાબે 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ડાબે 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"જમણી સ્ક્રીન સ્ક્રીન"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ઍપને સ્વૉપ કરો"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"શીર્ષ પૂર્ણ સ્ક્રીન"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"શીર્ષ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"શીર્ષ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ફરી શરૂ કરો"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ફરીથી બતાવશો નહીં"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"આ ઍપને ખસેડવા માટે\nબે વાર ટૅપ કરો"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"મોટું કરો"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"નાનું કરો"</string>
- <string name="close_button_text" msgid="2913281996024033299">"બંધ કરો"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"પાછળ"</string>
<string name="handle_text" msgid="4419667835599523257">"ઍપનું હૅન્ડલ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ઍપનું આઇકન"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ડાબી બાજુ વિન્ડોનું કદ બદલો"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"જમણી બાજુ વિન્ડોનું કદ બદલો"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"વિન્ડોનું કદ મહત્તમ કરો અથવા રિસ્ટોર કરો"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"વિન્ડોનું કદ મહત્તમ કરો અથવા રિસ્ટોર કરો"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ઍપની વિન્ડોને નાની કરો"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"\'ડિફૉલ્ટ તરીકે ખોલો\' સેટિંગ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"આ ઍપ માટે વેબ લિંક ખોલવાની રીત પસંદ કરો"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ઍપમાં"</string>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index 945bc93..d0be7d5 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"बाईं स्क्रीन को 50% बनाएं"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"बाईं स्क्रीन को 30% बनाएं"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"दाईं स्क्रीन को फ़ुल स्क्रीन बनाएं"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ऐप्लिकेशन स्वैप करें"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ऊपर की स्क्रीन को फ़ुल स्क्रीन बनाएं"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ऊपर की स्क्रीन को 70% बनाएं"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ऊपर की स्क्रीन को 50% बनाएं"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रीस्टार्ट करें"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"फिर से न दिखाएं"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ऐप्लिकेशन की जगह बदलने के लिए\nदो बार टैप करें"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"बड़ा करें"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"विंडो छोटी करें"</string>
- <string name="close_button_text" msgid="2913281996024033299">"बंद करें"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"वापस जाएं"</string>
<string name="handle_text" msgid="4419667835599523257">"ऐप्लिकेशन का हैंडल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ऐप्लिकेशन आइकॉन"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"विंडो का साइज़ बाईं ओर से बदलें"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"विंडो का साइज़ दाईं ओर से बढ़ाएं"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विंडो को बड़ा करें या उसका साइज़ पहले जैसा करें"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विंडो को बड़ा करें या उसका साइज़ पहले जैसा करें"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ऐप्लिकेशन की विंडो को छोटा करें"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"डिफ़ॉल्ट सेटिंग के हिसाब से खोलें"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"इस ऐप्लिकेशन के लिए वेब लिंक खोलने का तरीका चुनें"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ऐप्लिकेशन में"</string>
diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml
index b1187dc..d3e7599 100644
--- a/libs/WindowManager/Shell/res/values-hr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hr/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Lijevi zaslon na 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Lijevi zaslon na 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Desni zaslon u cijeli zaslon"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamijeni aplikacije"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Gornji zaslon u cijeli zaslon"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Gornji zaslon na 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Gornji zaslon na 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Pokreni ponovno"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovno"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvaput dodirnite da biste\npremjestili ovu aplikaciju"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziraj"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimiziraj"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zatvori"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Natrag"</string>
<string name="handle_text" msgid="4419667835599523257">"Pokazivač aplikacije"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacije"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Promijeni veličinu prozora ulijevo"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Promijeni veličinu prozora udesno"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimiziraj ili vrati veličinu prozora"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimiziraj ili vrati veličinu prozora"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimiziraj prozor aplikacije"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otvori prema zadanim postavkama"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Odaberite način otvaranja web-veza za ovu aplikaciju"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"U aplikaciji"</string>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index a7aedc4..2f7a218 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Bal oldali 50%-ra"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Bal oldali 30%-ra"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Jobb oldali teljes képernyőre"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Váltás az alkalmazások között"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Felső teljes képernyőre"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Felső 70%-ra"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Felső 50%-ra"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Újraindítás"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne jelenjen meg többé"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Koppintson duplán\naz alkalmazás áthelyezéséhez"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Teljes méret"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Kis méret"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Bezárás"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Vissza"</string>
<string name="handle_text" msgid="4419667835599523257">"App fogópontja"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Alkalmazásikon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ablak átméretezése balra"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ablak átméretezése jobbra"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ablak teljes méretre állítása vagy visszaállítása"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Ablak teljes méretre állítása vagy visszaállítása"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Alkalmazásablak kis méretre állítása"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Alapértelmezett beállítások megnyitása"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Az app webes linkjeinek megnyitásához használt módszer"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Az alkalmazásban"</string>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index 00b2f91..2898dcc 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ձախ էկրանը՝ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ձախ էկրանը՝ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Աջ էկրանը՝ լիաէկրան"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Հավելվածները տեղերով փոխել"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Վերևի էկրանը՝ լիաէկրան"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Վերևի էկրանը՝ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Վերևի էկրանը՝ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Վերագործարկել"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Այլևս ցույց չտալ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Կրկնակի հպեք՝\nհավելվածը տեղափոխելու համար"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Ծավալել"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Ծալել"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Փակել"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Հետ"</string>
<string name="handle_text" msgid="4419667835599523257">"Հավելվածի կեղծանուն"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Հավելվածի պատկերակ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ձգել պատուհանը դեպի ձախ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ձգել պատուհանը դեպի աջ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ծավալել կամ վերականգնել պատուհանի չափսը"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Ծավալել կամ վերականգնել պատուհանի չափսը"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Ծալել հավելվածի պատուհանը"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Բացել կարգավորումներն ըստ կանխադրման"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Ընտրեք՝ ինչպես բացել այս հավելվածի վեբ հղումները"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Հավելվածում"</string>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 54ccf84..617f9c9 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kiri 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kiri 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Layar penuh di kanan"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ganti Aplikasi"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Layar penuh di atas"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Atas 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Atas 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Mulai ulang"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Jangan tampilkan lagi"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ketuk dua kali untuk\nmemindahkan aplikasi ini"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimalkan"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimalkan"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Kembali"</string>
<string name="handle_text" msgid="4419667835599523257">"Penanganan aplikasi"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikon Aplikasi"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ubah ukuran jendela ke kiri"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ubah ukuran jendela ke kanan"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimalkan atau pulihkan ukuran jendela"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimalkan atau pulihkan ukuran jendela"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimalkan jendela aplikasi"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Buka dengan setelan default"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Pilih cara membuka link web untuk aplikasi ini"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Di aplikasi"</string>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index 56b1790..797a4cc 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vinstri 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vinstri 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Hægri á öllum skjánum"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Skipta á milli forrita"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Efri á öllum skjánum"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Efri 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Efri 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Endurræsa"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ekki sýna þetta aftur"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ýttu tvisvar til\nað færa þetta forrit"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Stækka"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minnka"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Loka"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Til baka"</string>
<string name="handle_text" msgid="4419667835599523257">"Handfang forrits"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Tákn forrits"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Breyta stærð glugga til vinstri"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Breyta stærð glugga til hægri"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Hámarka eða endurheimta stærð glugga"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Hámarka eða endurheimta stærð glugga"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Lágmarka stærð forritsglugga"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Stillingar sjálfvirkrar opnunar"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Veldu hvernig veftenglar opnast í forritinu"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Í forritinu"</string>
diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml
index 30159c7..85f0f8c 100644
--- a/libs/WindowManager/Shell/res/values-it/strings.xml
+++ b/libs/WindowManager/Shell/res/values-it/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Schermata sinistra al 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Schermata sinistra al 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Schermata destra a schermo intero"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Scambia app"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Schermata superiore a schermo intero"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Schermata superiore al 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Schermata superiore al 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Riavvia"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Non mostrare più"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tocca due volte per\nspostare questa app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Ingrandisci"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Riduci a icona"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Chiudi"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Indietro"</string>
<string name="handle_text" msgid="4419667835599523257">"Punto di manipolazione app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona dell\'app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ridimensiona la finestra a sinistra"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ridimensiona la finestra a destra"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ingrandisci o ripristina le dimensioni della finestra"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Ingrandisci o ripristina le dimensioni della finestra"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Riduci a icona la finestra dell\'app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Apri in base alle impostazioni predefinite"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Scegli come aprire i link web per questa app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"All\'interno dell\'app"</string>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index 5a19f14..36ac620 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"שמאלה 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"שמאלה 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"מסך ימני מלא"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"מעבר בין אפליקציות"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"מסך עליון מלא"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"עליון 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"עליון 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"הפעלה מחדש"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"לא להציג שוב"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"אפשר ללחוץ לחיצה כפולה כדי\nלהעביר את האפליקציה למקום אחר"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"הגדלה"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"מזעור"</string>
- <string name="close_button_text" msgid="2913281996024033299">"סגירה"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"חזרה"</string>
<string name="handle_text" msgid="4419667835599523257">"נקודת אחיזה לאפליקציה"</string>
<string name="app_icon_text" msgid="2823268023931811747">"סמל האפליקציה"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"שינוי גודל החלון שמשמאל"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"שינוי גודל החלון שמימין"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"שחזור של גודל החלון או הגדלת החלון"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"שחזור של גודל החלון או הגדלת החלון"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"מזעור החלון של האפליקציה"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"הגדרות לפתיחה כברירת מחדל"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"כאן בוחרים איך לפתוח באפליקציה הזו קישורים לדפי אינטרנט"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"באפליקציה"</string>
diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml
index ac0df9c..3a12680 100644
--- a/libs/WindowManager/Shell/res/values-ja/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ja/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"左 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"左 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"右全画面"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"アプリを切り替える"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"上部全画面"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"上 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"上 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"再起動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"次回から表示しない"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ダブルタップすると\nこのアプリを移動できます"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
- <string name="close_button_text" msgid="2913281996024033299">"閉じる"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"戻る"</string>
<string name="handle_text" msgid="4419667835599523257">"アプリハンドル"</string>
<string name="app_icon_text" msgid="2823268023931811747">"アプリのアイコン"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ウィンドウを左側にサイズ変更する"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ウィンドウを右側にサイズ変更する"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ウィンドウを最大化する、またはウィンドウを元のサイズに戻す"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ウィンドウを最大化する、またはウィンドウを元のサイズに戻す"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"アプリ ウィンドウを最小化する"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"デフォルトの設定で開く"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"このアプリのウェブリンクを開く方法を選択"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"アプリ内"</string>
diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml
index 84fab6f..2fbe1a7 100644
--- a/libs/WindowManager/Shell/res/values-ka/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ka/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"მარცხენა ეკრანი — 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"მარცხენა ეკრანი — 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"მარჯვენა ნაწილის სრულ ეკრანზე გაშლა"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"აპების გადართვა"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ზედა ნაწილის სრულ ეკრანზე გაშლა"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ზედა ეკრანი — 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ზედა ეკრანი — 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"გადატვირთვა"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"აღარ გამოჩნდეს"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ამ აპის გადასატანად\nორმაგად შეეხეთ მას"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"მაქსიმალურად გაშლა"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ჩაკეცვა"</string>
- <string name="close_button_text" msgid="2913281996024033299">"დახურვა"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"უკან"</string>
<string name="handle_text" msgid="4419667835599523257">"აპის იდენტიფიკატორი"</string>
<string name="app_icon_text" msgid="2823268023931811747">"აპის ხატულა"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ფანჯრის ზომის შეცვლა მარცხნივ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ფანჯრის ზომის შეცვლა მარჯვნივ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ფანჯრის მაქსიმალურ ზომამდე გაზრდა ან აღდგენა"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ფანჯრის მაქსიმალურ ზომამდე გაზრდა ან აღდგენა"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"აპის ფანჯრის ზომის შემცირება"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"პარამეტრების ნაგულისხმევად გახსნა"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ამ აპისთვის ვებ ბმულების გახსნის წესის არჩევა"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"აპში"</string>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index be9e9c1..c494b16 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% сол жақта"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% сол жақта"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Оң жағын толық экранға шығару"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Қолданбаларды ауыстыру"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Жоғарғы жағын толық экранға шығару"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% жоғарғы жақта"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% жоғарғы жақта"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Өшіріп қосу"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Қайта көрсетілмесін"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Бұл қолданбаны басқа орынға\nжылжыту үшін екі рет түртіңіз."</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Жаю"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Кішірейту"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Жабу"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Артқа"</string>
<string name="handle_text" msgid="4419667835599523257">"Қолданба идентификаторы"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Қолданба белгішесі"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Терезе өлшемін сол жаққа өзгерту"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Терезе өлшемін оң жаққа өзгерту"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Терезе өлшемін ұлғайту не қалпына келтіру"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Терезе өлшемін ұлғайту не қалпына келтіру"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Қолданба терезесін кішірейту"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Әдепкісінше ашу параметрлері"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Осы қолданбадағы веб-сілтемелерді ашу жолын таңдаңыз"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Қолданбада"</string>
diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml
index c835650..234c355 100644
--- a/libs/WindowManager/Shell/res/values-km/strings.xml
+++ b/libs/WindowManager/Shell/res/values-km/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ឆ្វេង 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ឆ្វេង 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"អេក្រង់ពេញខាងស្តាំ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ប្ដូរកម្មវិធី"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"អេក្រង់ពេញខាងលើ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ខាងលើ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ខាងលើ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ចាប់ផ្ដើមឡើងវិញ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"កុំបង្ហាញម្ដងទៀត"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ចុចពីរដងដើម្បី\nផ្លាស់ទីកម្មវិធីនេះ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ពង្រីក"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"បង្រួម"</string>
- <string name="close_button_text" msgid="2913281996024033299">"បិទ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ថយក្រោយ"</string>
<string name="handle_text" msgid="4419667835599523257">"ឈ្មោះអ្នកប្រើប្រាស់កម្មវិធី"</string>
<string name="app_icon_text" msgid="2823268023931811747">"រូបកម្មវិធី"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ប្ដូរទំហំវិនដូទៅឆ្វេង"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ប្ដូរទំហំវិនដូទៅស្ដាំ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ស្ដារ ឬបង្កើនទំហំវិនដូជាអតិបរមា"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ស្ដារ ឬបង្កើនទំហំវិនដូជាអតិបរមា"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"បង្រួមវិនដូកម្មវិធី"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ការកំណត់បើកតាមលំនាំដើម"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ជ្រើសរើសរបៀបបើកតំណបណ្ដាញសម្រាប់កម្មវិធីនេះ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"នៅក្នុងកម្មវិធី"</string>
diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml
index 143208a..61ee3c3 100644
--- a/libs/WindowManager/Shell/res/values-kn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kn/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% ಎಡಕ್ಕೆ"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% ಎಡಕ್ಕೆ"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ಬಲ ಫುಲ್ ಸ್ಕ್ರೀನ್"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ಆ್ಯಪ್ಗಳನ್ನು ಸ್ವ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ಮೇಲಿನ ಫುಲ್ ಸ್ಕ್ರೀನ್"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% ಮೇಲಕ್ಕೆ"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% ಮೇಲಕ್ಕೆ"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ಮರುಪ್ರಾರಂಭಿಸಿ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಸರಿಸಲು\nಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ಹಿಗ್ಗಿಸಿ"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ಕುಗ್ಗಿಸಿ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ಮುಚ್ಚಿರಿ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ಹಿಂದಕ್ಕೆ"</string>
<string name="handle_text" msgid="4419667835599523257">"ಆ್ಯಪ್ ಹ್ಯಾಂಡಲ್"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ಆ್ಯಪ್ ಐಕಾನ್"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ಮರುಗಾತ್ರಗೊಳಿಸಿ ವಿಂಡೋವನ್ನು ಎಡಕ್ಕೆ ಸರಿಸಿ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ಮರುಗಾತ್ರಗೊಳಿಸಿ ವಿಂಡೋವನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಿ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ವಿಂಡೋ ಗಾತ್ರವನ್ನು ಗರಿಷ್ಠಗೊಳಿಸಿ ಅಥವಾ ಮರುಸ್ಥಾಪಿಸಿ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ವಿಂಡೋ ಗಾತ್ರವನ್ನು ಗರಿಷ್ಠಗೊಳಿಸಿ ಅಥವಾ ಮರುಸ್ಥಾಪಿಸಿ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ಆ್ಯಪ್ ವಿಂಡೋವನ್ನು ಮಿನಿಮೈಜ್ ಮಾಡಿ"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳಿಂದ ತೆರೆಯಿರಿ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ಈ ಆ್ಯಪ್ಗೆ ವೆಬ್ ಲಿಂಕ್ಗಳನ್ನು ಹೇಗೆ ತೆರೆಯಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ಆ್ಯಪ್ನಲ್ಲಿ"</string>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index dcdbaba..2b36ba1 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"왼쪽 화면 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"왼쪽 화면 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"오른쪽 화면 전체화면"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"앱 전환"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"위쪽 화면 전체화면"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"위쪽 화면 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"위쪽 화면 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"다시 시작"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"다시 표시 안함"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"두 번 탭하여\n이 앱 이동"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"최대화"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"최소화"</string>
- <string name="close_button_text" msgid="2913281996024033299">"닫기"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"뒤로"</string>
<string name="handle_text" msgid="4419667835599523257">"앱 핸들"</string>
<string name="app_icon_text" msgid="2823268023931811747">"앱 아이콘"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"창 크기 왼쪽으로 조절"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"창 크기 오른쪽으로 조절"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"창 최대화 또는 크기 복원"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"창 최대화 또는 크기 복원"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"앱 창 최소화"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"기본값으로 열기 설정"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"이 앱에서 웹 링크를 여는 방법을 선택하세요"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"앱에서"</string>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index fe1bcd4..bb3c2fd 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Сол жактагы экранды 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Сол жактагы экранды 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Оң жактагы экранды толук экран режимине өткөрүү"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Колдонмолорду алмаштыруу"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Үстүнкү экранды толук экран режимине өткөрүү"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Үстүнкү экранды 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Үстүнкү экранды 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Өчүрүп күйгүзүү"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Экинчи көрүнбөсүн"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Бул колдонмону жылдыруу үчүн\nэки жолу таптаңыз"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Чоңойтуу"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Кичирейтүү"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Жабуу"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Артка"</string>
<string name="handle_text" msgid="4419667835599523257">"Колдонмонун маркери"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Колдонмонун сүрөтчөсү"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Терезенин өлчөмүн солго өзгөртүү"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Терезенин өлчөмүн оңго өзгөртүү"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Терезенин өлчөмүн чоңойтуу же калыбына келтирүү"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Терезенин өлчөмүн чоңойтуу же калыбына келтирүү"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Колдонмонун терезесин кичирейтүү"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Демейки шартта ачылуучу шилтемелердин параметрлери"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Колдонмодо шилтемелер кантип ачыларын тандаңыз"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Колдонмодо"</string>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index dd9df35..8850923 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ຊ້າຍ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ຊ້າຍ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ເຕັມໜ້າຈໍຂວາ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ສະຫຼັບແອັບ"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ເຕັມໜ້າຈໍເທິງສຸດ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ເທິງສຸດ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ເທິງສຸດ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ຣີສະຕາດ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ບໍ່ຕ້ອງສະແດງອີກ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ແຕະສອງເທື່ອເພື່ອ\nຍ້າຍແອັບນີ້"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ຂະຫຍາຍໃຫຍ່ສຸດ"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ຫຍໍ້ລົງ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ປິດ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ກັບຄືນ"</string>
<string name="handle_text" msgid="4419667835599523257">"ຊື່ຜູ້ໃຊ້ແອັບ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ໄອຄອນແອັບ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ປັບຂະໜາດໜ້າຈໍໄປທາງຊ້າຍ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ປັບຂະໜາດໜ້າຈໍໄປທາງຂວາ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ຂະຫຍາຍ ຫຼື ຄືນຄ່າຂະໜາດໜ້າຈໍ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ຂະຫຍາຍ ຫຼື ຄືນຄ່າຂະໜາດໜ້າຈໍ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ຫຍໍ້ໜ້າຈໍແອັບ"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ເປີດຕາມການຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ເລືອກວິທີເປີດລິ້ງເວັບສຳລັບແອັບນີ້"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ໃນແອັບ"</string>
diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml
index 7ebd43d..8ed826a 100644
--- a/libs/WindowManager/Shell/res/values-lt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lt/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kairysis ekranas 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kairysis ekranas 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Dešinysis ekranas viso ekrano režimu"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Programų keitimas"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Viršutinis ekranas viso ekrano režimu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Viršutinis ekranas 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Viršutinis ekranas 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Paleisti iš naujo"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Daugiau neberodyti"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dukart palieskite, kad\nperkeltumėte šią programą"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Padidinti"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Sumažinti"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Uždaryti"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atgal"</string>
<string name="handle_text" msgid="4419667835599523257">"Programos kreipinys"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Programos piktograma"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Pakeisti lango dydį kairėje"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Pakeisti lango dydį dešinėje"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Padidinti arba atkurti lango dydį"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Padidinti arba atkurti lango dydį"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Sumažinti programos langą"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Atidaryti pagal numatytuosius nustatymus"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Pasirinkite, kaip atidaryti šios programos žiniatinklio nuorodas"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Programoje"</string>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index 8c4360b..1227055 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Pa kreisi 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Pa kreisi 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Labā daļa pa visu ekrānu"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Apmainīt lietotnes"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Augšdaļa pa visu ekrānu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Augšdaļa 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Augšdaļa 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartēt"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Vairs nerādīt"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Veiciet dubultskārienu,\nlai pārvietotu šo lietotni"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimizēt"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizēt"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Aizvērt"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Atpakaļ"</string>
<string name="handle_text" msgid="4419667835599523257">"Lietotnes turis"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Lietotnes ikona"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Mainīt loga lielumu uz kreiso pusi"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Mainīt loga lielumu uz labo pusi"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimizēt vai atjaunot loga lielumu"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimizēt vai atjaunot loga lielumu"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizēt lietotnes logu"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Atvērt pēc noklusējuma iestatījumiem"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Izvēlieties, kā atvērt šajā lietotnē norādītās saites"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Lietotnē"</string>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index 653e66a..eb51374 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Левиот 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Левиот 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Десниот на цел екран"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Менувајте апликации"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Горниот на цел екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Горниот 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Горниот 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартирај"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Не прикажувај повторно"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Допрете двапати за да ја\nпоместите апликацијава"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Зголеми"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Минимизирај"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Затвори"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Прекар на апликацијата"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Икона на апликацијата"</string>
@@ -128,7 +136,7 @@
<string name="open_in_browser_text" msgid="9181692926376072904">"Отвори во прелистувач"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"Отвори во апликацијата"</string>
<string name="new_window_text" msgid="6318648868380652280">"Нов прозорец"</string>
- <string name="manage_windows_text" msgid="5567366688493093920">"Управувајте со прозорци"</string>
+ <string name="manage_windows_text" msgid="5567366688493093920">"Управувајте со прозорците"</string>
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Промени го соодносот"</string>
<string name="close_text" msgid="4986518933445178928">"Затворете"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворете го менито"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Променете ја големината на прозорецот налево"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Променете ја големината на прозорецот надесно"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Максимизирајте или вратете ја големината на прозорецот"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Максимизирајте или вратете ја големината на прозорецот"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Минимизирајте го прозорецот на апликацијата"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Отвори според стандардните поставки"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Изберете како да се отвораат линковите за апликацијава"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Во апликацијата"</string>
diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml
index 8887665..c48cbce 100644
--- a/libs/WindowManager/Shell/res/values-ml/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ml/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ഇടത് 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ഇടത് 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"വലത് പൂർണ്ണ സ്ക്രീൻ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ആപ്പുകൾ സ്വാപ്പ് ചെയ്യുക"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"മുകളിൽ പൂർണ്ണ സ്ക്രീൻ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"മുകളിൽ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"മുകളിൽ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"റീസ്റ്റാർട്ട് ചെയ്യൂ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"വീണ്ടും കാണിക്കരുത്"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ഈ ആപ്പ് നീക്കാൻ\nഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"വലുതാക്കുക"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ചെറുതാക്കുക"</string>
- <string name="close_button_text" msgid="2913281996024033299">"അടയ്ക്കുക"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"മടങ്ങുക"</string>
<string name="handle_text" msgid="4419667835599523257">"ആപ്പ് ഹാൻഡിൽ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ആപ്പ് ഐക്കൺ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ഇടത്തേക്ക് ആപ്പ് വിൻഡോ വലുപ്പം മാറ്റുക"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"വലത്തേക്ക് ആപ്പ് വിൻഡോ വലുപ്പം മാറ്റുക"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"വിന്ഡോ വലുപ്പം വലുതാക്കുക അല്ലെങ്കിൽ പഴയത് പുനഃസ്ഥാപിക്കുക"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"വിന്ഡോ വലുപ്പം വലുതാക്കുക അല്ലെങ്കിൽ പഴയത് പുനഃസ്ഥാപിക്കുക"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ആപ്പ് വിന്ഡോ ചെറുതാക്കുക"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ഡിഫോൾട്ട് ക്രമീകരണം ഉപയോഗിച്ച് തുറക്കുക"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ഈ ആപ്പിനായി വെബ് ലിങ്കുകൾ എങ്ങനെ തുറക്കണമെന്ന് തിരഞ്ഞെടുക്കൂ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ആപ്പിൽ"</string>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index df922e0..fca2f7c 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Зүүн 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Зүүн 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Баруун талын бүтэн дэлгэц"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Аппуудыг солих"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Дээд талын бүтэн дэлгэц"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Дээд 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Дээд 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Дахин эхлүүлэх"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Дахиж бүү харуул"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Энэ аппыг зөөхийн тулд\nхоёр товшино уу"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Томруулах"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Багасгах"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Хаах"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Буцах"</string>
<string name="handle_text" msgid="4419667835599523257">"Аппын бариул"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aппын дүрс тэмдэг"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Цонхны хэмжээг зүүн тал руу өөрчлөх"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Цонхны хэмжээг баруун тал руу өөрчлөх"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Цонхны хэмжээг томруулах эсвэл сэргээх"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Цонхны хэмжээг томруулах эсвэл сэргээх"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Аппын цонхыг жижгэрүүлэх"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Өгөгдмөл тохиргоогоор нээх"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Энэ аппад веб холбоосыг хэрхэн нээхийг сонгоно уу"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Аппад"</string>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index f316311..8881187 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"डावी 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"डावी 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"उजवी फुल स्क्रीन"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"अॅप्स स्वॅप करा"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"शीर्ष फुल स्क्रीन"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"शीर्ष 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"शीर्ष 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रीस्टार्ट करा"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"पुन्हा दाखवू नका"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"हे ॲप हलवण्यासाठी\nदोनदा टॅप करा"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"मोठे करा"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"लहान करा"</string>
- <string name="close_button_text" msgid="2913281996024033299">"बंद करा"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"मागे जा"</string>
<string name="handle_text" msgid="4419667835599523257">"अॅपचे हँडल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"अॅप आयकन"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"अॅप विंडोचा डावीकडे आकार बदला"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"अॅप विंडोचा उजवीकडे आकार बदला"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विंडोचा आकार मोठा करा किंवा रिस्टोअर करा"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विंडोचा आकार मोठा करा किंवा रिस्टोअर करा"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"अॅप विंडो लहान करा"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"बाय डीफॉल्ट सेटिंग्ज उघडा"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"या अॅपसाठीच्या वेब लिंक कशा उघडाव्यात हे निवडा"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ॲपमध्ये"</string>
diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml
index 81e00c5..f0cd560 100644
--- a/libs/WindowManager/Shell/res/values-ms/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ms/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kiri 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kiri 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Skrin penuh kanan"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Tukar Apl"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Skrin penuh atas"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Atas 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Atas 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Mulakan semula"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Jangan tunjukkan lagi"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ketik dua kali untuk\nalih apl ini"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimumkan"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimumkan"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Kembali"</string>
<string name="handle_text" msgid="4419667835599523257">"Pengendalian apl"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikon Apl"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ubah saiz tetingkap ke sebelah kiri"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ubah saiz tetingkap ke sebelah kanan"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimumkan atau pulihkan saiz tetingkap"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimumkan atau pulihkan saiz tetingkap"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimumkan tetingkap apl"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Buka tetapan secara lalai"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Pilih cara membuka pautan web untuk apl ini"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Pada apl"</string>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index 8697af8..3451701 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ဘယ်ဘက် မျက်နှာပြင် ၅၀%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ဘယ်ဘက် မျက်နှာပြင် ၃၀%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ညာဘက် မျက်နှာပြင်အပြည့်"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"အက်ပ်ပြောင်းရန်"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"အပေါ်ဘက် မျက်နှာပြင်အပြည့်"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"အပေါ်ဘက် မျက်နှာပြင် ၇၀%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"အပေါ်ဘက် မျက်နှာပြင် ၅၀%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ပြန်စရန်"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"နောက်ထပ်မပြပါနှင့်"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ဤအက်ပ်ကို ရွှေ့ရန်\nနှစ်ချက်တို့ပါ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ချဲ့ရန်"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ချုံ့ရန်"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ပိတ်ရန်"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"နောက်သို့"</string>
<string name="handle_text" msgid="4419667835599523257">"အက်ပ်သုံးသူအမည်"</string>
<string name="app_icon_text" msgid="2823268023931811747">"အက်ပ်သင်္ကေတ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ဝင်းဒိုးကို ဘယ်ဘက်သို့ အရွယ်ပြင်ရန်"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ဝင်းဒိုးကို ညာဘက်သို့ အရွယ်ပြင်ရန်"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ဝင်းဒိုးအရွယ်အစားကို ချဲ့ရန် (သို့) ပြန်ပြောင်းရန်"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ဝင်းဒိုးအရွယ်အစားကို ချဲ့ရန် (သို့) ပြန်ပြောင်းရန်"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"အက်ပ်ဝင်းဒိုးကို ချုံ့ရန်"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"မူရင်းဆက်တင်ဖြင့် ဖွင့်ရန်"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ဤအက်ပ်အတွက် ဝဘ်လင့်ခ်များ မည်သို့ဖွင့်မည်ကို ရွေးပါ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"အက်ပ်တွင်"</string>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index 43de636..3a4100c 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Sett størrelsen på den venstre delen av skjermen til 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Sett størrelsen på den venstre delen av skjermen til 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Utvid den høyre delen av skjermen til hele skjermen"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Bytt apper"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Utvid den øverste delen av skjermen til hele skjermen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Sett størrelsen på den øverste delen av skjermen til 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Sett størrelsen på den øverste delen av skjermen til 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Start på nytt"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ikke vis dette igjen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dobbelttrykk for\nå flytte denne appen"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimer"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimer"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Lukk"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Tilbake"</string>
<string name="handle_text" msgid="4419667835599523257">"Apphåndtak"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Endre størrelsen på vinduet til venstre"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Endre størrelsen på vinduet til høyre"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimer eller gjenopprett størrelsen på vinduet"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimer eller gjenopprett størrelsen på vinduet"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimer appvinduet"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Innstillinger for åpning som standard"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Velg hvordan nettlinker skal åpnes for denne appen"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"I appen"</string>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index 23b49b7..cc31e38 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"बायाँ भाग ५०%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"बायाँ भाग ३०%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"दायाँ भाग फुल स्क्रिन"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"एपहरू अदलबदल गर्नुहोस्"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"माथिल्लो भाग फुल स्क्रिन"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"माथिल्लो भाग ७०%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"माथिल्लो भाग ५०%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रिस्टार्ट गर्नुहोस्"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"फेरि नदेखाउनुहोस्"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"यो एप सार्न डबल\nट्याप गर्नुहोस्"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ठुलो बनाउनुहोस्"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"मिनिमाइज गर्नुहोस्"</string>
- <string name="close_button_text" msgid="2913281996024033299">"बन्द गर्नुहोस्"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"पछाडि"</string>
<string name="handle_text" msgid="4419667835599523257">"एपको ह्यान्डल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"एपको आइकन"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"विन्डोको आकार बदलेर बायाँतिर लैजानुहोस्"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"विन्डोको आकार बदलेर दायाँतिर लैजानुहोस्"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विन्डोको आकार म्याक्सिमाइज गर्नुहोस् वा रिस्टोर गर्नुहोस्"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विन्डोको आकार म्याक्सिमाइज गर्नुहोस् वा रिस्टोर गर्नुहोस्"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"एपको विन्डो मिनिमाइज गर्नुहोस्"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"डिफल्ट सेटिङअनुसार खोल्नुहोस्"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"यो एपका वेब लिंकहरू खोल्ने तरिका छनौट गर्नुहोस्"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"एपमा"</string>
diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml
index 8396b3e..4234ddf 100644
--- a/libs/WindowManager/Shell/res/values-nl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nl/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Linkerscherm 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Linkerscherm 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Rechterscherm op volledig scherm"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Apps wisselen"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Bovenste scherm op volledig scherm"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Bovenste scherm 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Bovenste scherm 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Opnieuw opstarten"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Niet opnieuw tonen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dubbeltik om\ndeze app te verplaatsen"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximaliseren"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimaliseren"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Sluiten"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Terug"</string>
<string name="handle_text" msgid="4419667835599523257">"App-handgreep"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App-icoon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Formaat van venster naar links aanpassen"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Formaat van venster naar rechts aanpassen"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Formaat van venster maximaliseren of herstellen"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Formaat van venster maximaliseren of herstellen"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"App-venster minimaliseren"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Instellingen voor Standaard openen"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Kies hoe je weblinks voor deze app wilt openen"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In de app"</string>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index 9e1ee43..6390d37 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ବାମ ପଟକୁ 50% କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ବାମ ପଟେ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ଡାହାଣ ପଟକୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍ କରନ୍ତୁ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ଆପ୍ସ ସ୍ୱାପ କରନ୍ତୁ"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ଉପର ଆଡ଼କୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍ କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ଉପର ଆଡ଼କୁ 70% କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ଉପର ଆଡ଼କୁ 50% କରନ୍ତୁ"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ଏହି ଆପକୁ ମୁଭ\nକରିବା ପାଇଁ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ବଡ଼ କରନ୍ତୁ"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ଛୋଟ କରନ୍ତୁ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ବନ୍ଦ କରନ୍ତୁ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="handle_text" msgid="4419667835599523257">"ଆପର ହେଣ୍ଡେଲ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ଆପ ଆଇକନ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ବାମପଟକୁ ୱିଣ୍ଡୋ ରିସାଇଜ କରନ୍ତୁ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ଡାହାଣପଟକୁ ୱିଣ୍ଡୋ ରିସାଇଜ କରନ୍ତୁ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ୱିଣ୍ଡୋ ସାଇଜକୁ ମେକ୍ସିମାଇଜ କିମ୍ବା ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ୱିଣ୍ଡୋ ସାଇଜକୁ ମେକ୍ସିମାଇଜ କିମ୍ବା ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ଆପ ୱିଣ୍ଡୋକୁ ମିନିମାଇଜ କରନ୍ତୁ"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ଡିଫଲ୍ଟ ସେଟିଂସକୁ ଖୋଲନ୍ତୁ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ଏହି ଆପ ପାଇଁ ୱେବ ଲିଙ୍କଗୁଡ଼ିକୁ କିପରି ଖୋଲିବେ, ତାହା ବାଛନ୍ତୁ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ଆପରେ"</string>
diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml
index 3bc730b..d2b837c 100644
--- a/libs/WindowManager/Shell/res/values-pa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pa/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ਖੱਬੇ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ਖੱਬੇ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ਸੱਜੇ ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ਐਪਾਂ ਨੂੰ ਸਵੈਪ ਕਰੋ"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ਉੱਪਰ ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ਉੱਪਰ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ਉੱਪਰ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ਇਸ ਐਪ ਦਾ ਟਿਕਾਣਾ ਬਦਲਣ ਲਈ\nਡਬਲ ਟੈਪ ਕਰੋ"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ਵੱਡਾ ਕਰੋ"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ਛੋਟਾ ਕਰੋ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ਬੰਦ ਕਰੋ"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ਪਿੱਛੇ"</string>
<string name="handle_text" msgid="4419667835599523257">"ਐਪ ਹੈਂਡਲ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ਐਪ ਪ੍ਰਤੀਕ"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ਵਿੰਡੋ ਦਾ ਆਕਾਰ ਬਦਲ ਕੇ ਖੱਬੇ ਪਾਸੇ ਕਰੋ"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ਵਿੰਡੋ ਦਾ ਆਕਾਰ ਬਦਲ ਕੇ ਸੱਜੇ ਪਾਸੇ ਕਰੋ"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ਵਿੰਡੋ ਦਾ ਆਕਾਰ ਵਧਾਓ ਜਾਂ ਮੁੜ-ਬਹਾਲ ਕਰੋ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ਵਿੰਡੋ ਦਾ ਆਕਾਰ ਵਧਾਓ ਜਾਂ ਮੁੜ-ਬਹਾਲ ਕਰੋ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ਐਪ ਵਿੰਡੋ ਨੂੰ ਛੋਟਾ ਕਰੋ"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਸੈਟਿੰਗਾਂ ਮੁਤਾਬਕ ਖੋਲ੍ਹੋ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ਇਸ ਐਪ ਲਈ ਵੈੱਬ ਲਿੰਕਾਂ ਨੂੰ ਖੋਲ੍ਹਣ ਦਾ ਤਰੀਕਾ ਚੁਣੋ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ਐਪ ਵਿੱਚ"</string>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index 3a55cf3..59deb01 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% lewej części ekranu"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% lewej części ekranu"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Prawa część ekranu na pełnym ekranie"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamień aplikacje"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Górna część ekranu na pełnym ekranie"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% górnej części ekranu"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% górnej części ekranu"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Uruchom ponownie"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nie pokazuj ponownie"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Aby przenieść aplikację,\nkliknij dwukrotnie"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksymalizuj"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimalizuj"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zamknij"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Wstecz"</string>
<string name="handle_text" msgid="4419667835599523257">"Uchwyt aplikacji"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacji"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Zmień rozmiar okna do lewej"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Zmień rozmiar okna do prawej"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Zmaksymalizuj lub przywróć rozmiar okna"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Zmaksymalizuj lub przywróć rozmiar okna"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Zminimalizuj okno aplikacji"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ustawienia domyślnego otwierania"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Wybierz, gdzie chcesz otwierać linki z tej aplikacji"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"W aplikacji"</string>
diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
index 3e019ec..593f830 100644
--- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Esquerda a 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Esquerda a 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Lado direito em tela cheia"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Trocar apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Parte superior em tela cheia"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Parte superior a 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Parte superior a 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar novamente"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes para\nmover o app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Voltar"</string>
<string name="handle_text" msgid="4419667835599523257">"Identificador do app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ícone do app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionar janela para a esquerda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionar janela para a direita"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar ou restaurar o tamanho da janela"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar ou restaurar o tamanho da janela"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar janela do app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Configurações \"Abrir por padrão\""</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Escolha como abrir links da Web para este app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"No app"</string>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index 3eaf0f5..fcf5916 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% no ecrã esquerdo"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% no ecrã esquerdo"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Ecrã direito inteiro"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Trocar apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ecrã superior inteiro"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% no ecrã superior"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% no ecrã superior"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar de novo"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes\npara mover esta app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Anterior"</string>
<string name="handle_text" msgid="4419667835599523257">"Indicador da app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ícone da app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionar janela para a esquerda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionar janela para a direita"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar ou restaurar tamanho da janela"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar ou restaurar tamanho da janela"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar janela da app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Definições de Abrir por predefinição"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Escolha como abrir links da Web para esta app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Na app"</string>
diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml
index 3e019ec..593f830 100644
--- a/libs/WindowManager/Shell/res/values-pt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Esquerda a 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Esquerda a 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Lado direito em tela cheia"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Trocar apps"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Parte superior em tela cheia"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Parte superior a 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Parte superior a 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar novamente"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes para\nmover o app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Voltar"</string>
<string name="handle_text" msgid="4419667835599523257">"Identificador do app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ícone do app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionar janela para a esquerda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionar janela para a direita"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar ou restaurar o tamanho da janela"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar ou restaurar o tamanho da janela"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar janela do app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Configurações \"Abrir por padrão\""</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Escolha como abrir links da Web para este app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"No app"</string>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 0195aca..81db82a 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Partea stângă: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Partea stângă: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Partea dreaptă pe ecran complet"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Comută între aplicații"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Partea de sus pe ecran complet"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Partea de sus: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Partea de sus: 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Repornește"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nu mai afișa"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Atinge de două ori\nca să muți aplicația"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximizează"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizează"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Închide"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Înapoi"</string>
<string name="handle_text" msgid="4419667835599523257">"Handle de aplicație"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Pictograma aplicației"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionează fereastra la stânga"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionează fereastra la dreapta"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizează sau restabilește dimensiunea ferestrei"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizează sau restabilește dimensiunea ferestrei"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizează fereastra aplicației"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Setări de deschidere în mod prestabilit"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Alege modul de deschidere a linkurilor web pentru aplicație"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"În aplicație"</string>
diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml
index adc6f32..aa6f484 100644
--- a/libs/WindowManager/Shell/res/values-ru/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ru/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Левый на 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Левый на 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Правый во весь экран"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Поменять приложения местами"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Верхний во весь экран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Верхний на 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Верхний на 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перезапустить"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Больше не показывать"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Дважды нажмите, чтобы\nпереместить приложение."</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Развернуть"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Свернуть"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Закрыть"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Обозначение приложения"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Значок приложения"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Растянуть окно влево"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Растянуть окно вправо"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Развернуть окно или восстановить его размер"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Развернуть окно или восстановить его размер"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Свернуть окно приложения"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Настройки, регулирующие, как по умолчанию открываются ссылки"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Выберите, где будут открываться ссылки из этого приложения"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"В приложении"</string>
diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml
index 26bd937..efa978a 100644
--- a/libs/WindowManager/Shell/res/values-si/strings.xml
+++ b/libs/WindowManager/Shell/res/values-si/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"වම් 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"වම් 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"දකුණු පූර්ණ තිරය"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"යෙදුම් හුවමාරු කරන්න"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ඉහළම පූර්ණ තිරය"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ඉහළම 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ඉහළම 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"යළි අරඹන්න"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"නැවත නොපෙන්වන්න"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"මෙම යෙදුම ගෙන යාමට\nදෙවරක් තට්ටු කරන්න"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"විහිදන්න"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"කුඩා කරන්න"</string>
- <string name="close_button_text" msgid="2913281996024033299">"වසන්න"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"ආපසු"</string>
<string name="handle_text" msgid="4419667835599523257">"යෙදුම් හසුරුව"</string>
<string name="app_icon_text" msgid="2823268023931811747">"යෙදුම් නිරූපකය"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"කවුළුව වමට ප්රතිප්රමාණ කරන්න"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"කවුළුව දකුණට ප්රතිප්රමාණ කරන්න"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"කවුළු ප්රමාණය උපරිම කරන්න හෝ ප්රතිසාධනය කරන්න"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"කවුළු ප්රමාණය උපරිම කරන්න හෝ ප්රතිසාධනය කරන්න"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"යෙදුම් කවුළුව අවම කරන්න"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"පෙරනිමි සැකසීම් මඟින් විවෘත කරන්න"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"මෙම යෙදුම සඳහා වෙබ් සබැඳි විවෘත කරන ආකාරය තෝරා ගන්න"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"යෙදුම තුළ"</string>
diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml
index 8b6999e..fac26b4 100644
--- a/libs/WindowManager/Shell/res/values-sk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sk/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ľavá – 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ľavá – 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pravá– na celú obrazovku"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Vymeniť aplikácie"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Horná – na celú obrazovku"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Horná – 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Horná – 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reštartovať"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Už nezobrazovať"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Túto aplikáciu\npresuniete dvojitým klepnutím"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovať"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimalizovať"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zavrieť"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Späť"</string>
<string name="handle_text" msgid="4419667835599523257">"Rukoväť aplikácie"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikácie"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Zmeniť veľkosť okna vľavo"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Zmeniť veľkosť okna vpravo"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximalizovať alebo obnoviť veľkosť okna"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximalizovať alebo obnoviť veľkosť okna"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimalizovať okno aplikácie"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otvárať podľa predvolených nastavení"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Vyberte, ako sa majú v tejto aplikácii otvárať webové odkazy"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"V aplikácii"</string>
diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml
index 5f1f6ef..f8dacc4 100644
--- a/libs/WindowManager/Shell/res/values-sl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sl/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Levi 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Levi 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Desni v celozaslonski način"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamenjava aplikacij"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Zgornji v celozaslonski način"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Zgornji 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Zgornji 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Znova zaženi"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikaži več"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvakrat se dotaknite\nza premik te aplikacije"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiraj"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimiraj"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Zapri"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Nazaj"</string>
<string name="handle_text" msgid="4419667835599523257">"Identifikator aplikacije"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacije"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Sprememba velikosti okna na levi"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Sprememba velikosti okna na desni"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Povečava ali obnovitev velikosti okna"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Povečava ali obnovitev velikosti okna"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Pomanjšava okna aplikacije"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Nastavitve privzetega odpiranja"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Izberite način odpiranja spletnih povezav za to aplikacijo"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"V aplikaciji"</string>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index 45a1c00..c64df85 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Majtas 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Majtas 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Ekrani i plotë djathtas"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ndërro aplikacionet"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ekrani i plotë lart"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Lart 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Lart 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Rinis"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Mos e shfaq përsëri"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Trokit dy herë për të\nlëvizur këtë aplikacion"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Maksimizo"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimizo"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Mbyll"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Pas"</string>
<string name="handle_text" msgid="4419667835599523257">"Emërtimi i aplikacionit"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona e aplikacionit"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ndrysho përmasat e dritares në të majtë"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ndrysho përmasat e dritares në të djathtë"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimizo ose restauro madhësinë e dritares"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimizo ose restauro madhësinë e dritares"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizo dritaren e aplikacionit"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Hap sipas cilësimeve të parazgjedhura"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Zgjidh si do t\'i hapësh lidhjet e uebit për këtë aplikacion"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Në aplikacion"</string>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index 40ca9a4..d2462a7 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Леви екран 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Леви екран 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Режим целог екрана за доњи екран"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Замените места апликацијама"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Режим целог екрана за горњи екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Горњи екран 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Горњи екран 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартуј"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Не приказуј поново"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Двапут додирните да бисте\nпреместили ову апликацију"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Увећајте"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Умањите"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Затворите"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Идентификатор апликације"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Икона апликације"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Промените величину прозора налево"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Промените величину прозора надесно"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Увећајте или вратите величину прозора"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Увећајте или вратите величину прозора"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Умањите прозор апликације"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Подешавање Подразумевано отварај"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Одаберите начин отварања веб-линкова за ову апликацију"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"У апликацији"</string>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index 4e126e8..0105e15 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vänster 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vänster 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Helskärm på höger skärm"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Byt appar"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Helskärm på övre skärm"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Övre 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Övre 50 %"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Starta om"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Visa inte igen"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tryck snabbt två gånger\nför att flytta denna app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Utöka"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Minimera"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Stäng"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Tillbaka"</string>
<string name="handle_text" msgid="4419667835599523257">"Apphandtag"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikon"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ändra storlek på fönstret åt vänster"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ändra storlek på fönstret åt höger"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximera eller återställ fönsterstorleken"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximera eller återställ fönsterstorleken"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimera appfönstret"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Inställningar för Öppna som standard"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Välj hur webblänkar ska öppnas för den här appen"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"I appen"</string>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index 8bfdfc6..b4415cb 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kushoto 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kushoto 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Skrini nzima ya kulia"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Badilisha Programu"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Skrini nzima ya juu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Juu 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Juu 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Zima kisha uwashe"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Usionyeshe tena"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Gusa mara mbili ili\nusogeze programu hii"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Panua"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Punguza"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Funga"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Rudi nyuma"</string>
<string name="handle_text" msgid="4419667835599523257">"Utambulisho wa programu"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aikoni ya Programu"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Badilisha ukubwa wa dirisha kushoto"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Badilisha ukubwa wa dirisha kulia"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Panua au urejeshe ukubwa wa dirisha"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Panua au urejeshe ukubwa wa dirisha"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Punguza dirisha la programu"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Fungua kwa mipangilio chaguomsingi"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Chagua jinsi ya kufungua viungo vya wavuti vya programu hii"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Kwenye programu"</string>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index 4d9093c..ccc9f94 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"இடது புறம் 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"இடது புறம் 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"வலது புறம் முழுத் திரை"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ஆப்ஸை மாற்றும்"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"மேற்புறம் முழுத் திரை"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"மேலே 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"மேலே 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"மீண்டும் தொடங்கு"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"மீண்டும் காட்டாதே"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"இந்த ஆப்ஸை நகர்த்த\nஇருமுறை தட்டவும்"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"பெரிதாக்கும்"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"சிறிதாக்கும்"</string>
- <string name="close_button_text" msgid="2913281996024033299">"மூடும்"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"பின்செல்லும்"</string>
<string name="handle_text" msgid="4419667835599523257">"ஆப்ஸ் ஹேண்டில்"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ஆப்ஸ் ஐகான்"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"சாளரத்தை இடதுபுறமாக அளவு மாற்றும்"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"சாளரத்தை வலதுபுறமாக அளவு மாற்றும்"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"சாளரத்தின் அளவைப் பெரிதாக்கும்/மீட்டெடுக்கும்"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"சாளரத்தின் அளவைப் பெரிதாக்கும்/மீட்டெடுக்கும்"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ஆப்ஸ் சாளரத்தைச் சிறிதாக்கும்"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"இயல்பாக அமைப்புகளைத் திறக்கும்"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"இந்த ஆப்ஸில் வலை இணைப்புகளைத் திறக்கும் வழிமுறையைத் தேர்வுசெய்யுங்கள்"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ஆப்ஸில்"</string>
diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml
index f7cf43e..96ce40a 100644
--- a/libs/WindowManager/Shell/res/values-te/strings.xml
+++ b/libs/WindowManager/Shell/res/values-te/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ఎడమవైపు 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ఎడమవైపు 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"కుడివైపు ఫుల్-స్క్రీన్"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"యాప్లను మార్చండి"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ఎగువ ఫుల్-స్క్రీన్"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ఎగువ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ఎగువ 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"రీస్టార్ట్ చేయండి"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"మళ్లీ చూపవద్దు"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ఈ యాప్ను తరలించడానికి\nడబుల్-ట్యాప్ చేయండి"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"గరిష్టీకరించండి"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"కుదించండి"</string>
- <string name="close_button_text" msgid="2913281996024033299">"మూసివేయండి"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"వెనుకకు"</string>
<string name="handle_text" msgid="4419667835599523257">"యాప్ హ్యాండిల్"</string>
<string name="app_icon_text" msgid="2823268023931811747">"యాప్ చిహ్నం"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"విండో ఎడమ వైపునకు సైజ్ను మార్చండి"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"విండో కుడి వైపునకు సైజ్ను మార్చండి"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"విండో సైజ్ను మ్యాగ్జిమైజ్ చేయండి లేదా రీస్టోర్ చేయండి"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"విండో సైజ్ను మ్యాగ్జిమైజ్ చేయండి లేదా రీస్టోర్ చేయండి"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"యాప్ విండోను కుదించండి"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ఆటోమేటిక్ సెట్టింగ్ల ద్వారా తెరవండి"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ఈ యాప్నకు సంబంధించిన వెబ్ లింక్లను ఎలా తెరవాలో ఎంచుకోండి"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"యాప్లో"</string>
diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml
index 77cd2e2..16372d2 100644
--- a/libs/WindowManager/Shell/res/values-th/strings.xml
+++ b/libs/WindowManager/Shell/res/values-th/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ซ้าย 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ซ้าย 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"เต็มหน้าจอทางขวา"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"สลับแอป"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"เต็มหน้าจอด้านบน"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ด้านบน 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ด้านบน 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"รีสตาร์ท"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ไม่ต้องแสดงข้อความนี้อีก"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"แตะสองครั้ง\nเพื่อย้ายแอปนี้"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"ขยายใหญ่สุด"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"ย่อ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"ปิด"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"กลับ"</string>
<string name="handle_text" msgid="4419667835599523257">"แฮนเดิลแอป"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ไอคอนแอป"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ปรับขนาดหน้าต่างไปทางซ้าย"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ปรับขนาดหน้าต่างไปทางขวา"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ขยายหรือคืนค่าขนาดหน้าต่าง"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ขยายหรือคืนค่าขนาดหน้าต่าง"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ย่อหน้าต่างแอป"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"เปิดตามการตั้งค่าเริ่มต้น"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"เลือกวิธีเปิดเว็บลิงก์สำหรับแอปนี้"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ในแอป"</string>
diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml
index 056bc22..ad38be8 100644
--- a/libs/WindowManager/Shell/res/values-tl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tl/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Gawing 50% ang nasa kaliwa"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Gawing 30% ang nasa kaliwa"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"I-full screen ang nasa kanan"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Pagpalitin ang Mga App"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"I-full screen ang nasa itaas"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Gawing 70% ang nasa itaas"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Gawing 50% ang nasa itaas"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"I-restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Huwag nang ipakita ulit"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"I-double tap para\nilipat ang app na ito"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"I-maximize"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"I-minimize"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Isara"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Bumalik"</string>
<string name="handle_text" msgid="4419667835599523257">"Handle ng app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icon ng App"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"I-resize pakaliwa ang window"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"I-resize pakanan ang window"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"I-maximize o i-restore ang laki ng window"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"I-maximize o i-restore ang laki ng window"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"I-minimize ang window ng app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Buksan sa pamamagitan ng mga default na setting"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Piliin kung paano magbukas ng web link para sa app na ito"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Sa app"</string>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index 017f6bb..2bc0a96 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Solda %50"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Solda %30"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Sağda tam ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Uygulamaların Yerini Değiştir"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Üstte tam ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Üstte %70"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Üstte %50"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Yeniden başlat"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Bir daha gösterme"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Bu uygulamayı taşımak için\niki kez dokunun"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Ekranı Kapla"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Küçült"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Kapat"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Geri"</string>
<string name="handle_text" msgid="4419667835599523257">"Uygulama tanıtıcısı"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Uygulama Simgesi"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Pencereyi sola yeniden boyutlandır"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Pencereyi sağa yeniden boyutlandır"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Pencereyi ekranı kaplayacak şekilde büyüt veya önceki boyutuna döndür"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Pencereyi ekranı kaplayacak şekilde büyüt veya önceki boyutuna döndür"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Uygulama penceresini küçült"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Varsayılan olarak açma ayarları"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Bu uygulama için web bağlantılarının nasıl açılacağını seçin"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Uygulamada"</string>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index 32ce4a0..c1aa82e 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ліве вікно на 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ліве вікно на 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Праве вікно на весь екран"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Поміняти додатки місцями"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Верхнє вікно на весь екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Верхнє вікно на 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Верхнє вікно на 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перезапустити"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Більше не показувати"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Двічі торкніться, щоб\nперемістити цей додаток"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Збільшити"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Згорнути"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Закрити"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Назад"</string>
<string name="handle_text" msgid="4419667835599523257">"Дескриптор додатка"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Значок додатка"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Змінити розмір вікна ліворуч"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Змінити розмір вікна праворуч"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Розгорнути вікно або відновити його розмір"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Розгорнути вікно або відновити його розмір"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Згорнути вікно додатка"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Налаштування \"Відкривати за умовчанням\""</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Виберіть, як відкривати вебпосилання в цьому додатку"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"У додатку"</string>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index 4de0c47..1afb48d 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"بائیں %50"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"بائیں %30"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"دائیں فل اسکرین"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ایپس سویپ کریں"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"بالائی فل اسکرین"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"اوپر %70"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"اوپر %50"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ری اسٹارٹ کریں"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"دوبارہ نہ دکھائیں"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"اس ایپ کو منتقل کرنے کیلئے\nدو بار تھپتھپائیں"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"بڑا کریں"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"چھوٹا کریں"</string>
- <string name="close_button_text" msgid="2913281996024033299">"بند کریں"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"پیچھے"</string>
<string name="handle_text" msgid="4419667835599523257">"ایپ ہینڈل"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ایپ کا آئیکن"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"دائیں طرف ونڈو کا سائز تبدیل کریں"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ونڈو کا سائز بائیں طرف تبدیل کریں"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ونڈو کا سائز زیادہ سے زیادہ یا بحال کریں"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ونڈو کا سائز زیادہ سے زیادہ یا بحال کریں"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ایپ ونڈو کو چھوٹا کریں"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"بطور ڈیفالٹ ترتیبات کھولیں"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"اس ایپ کے لیے ویب لنکس کھولنے کا طریقہ منتخب کریں"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ایپ میں"</string>
diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml
index 8c0d9bb..04fd429 100644
--- a/libs/WindowManager/Shell/res/values-uz/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uz/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Chapda 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Chapda 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"O‘ngda to‘liq ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ilovalarni almashtirish"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Tepada to‘liq ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Tepada 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Tepada 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Qaytadan"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Boshqa chiqmasin"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Bu ilovani siljitish uchun\nikki marta bosing"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Yoyish"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Kichraytirish"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Yopish"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Orqaga"</string>
<string name="handle_text" msgid="4419667835599523257">"Ilova identifikatori"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ilova belgisi"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Oyna oʻlchamini chapga oʻzgartirish"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Oyna oʻlchamini oʻngga oʻzgartirish"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Oyna oʻlchamini kengaytirish yoki asliga qaytarish"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Oyna oʻlchamini kengaytirish yoki asliga qaytarish"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Ilova oynasini kichraytirish"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Birlamchi sozlamalar asosida ochish"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Bu ilovalardagi veb havolalar qanday ochilishini tanlang"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Ilovada"</string>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index 3455eed..169c2b7 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Trái 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Trái 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Toàn màn hình bên phải"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Hoán đổi ứng dụng"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Toàn màn hình phía trên"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Trên 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Trên 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Khởi động lại"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Không hiện lại"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Nhấn đúp để\ndi chuyển ứng dụng này"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Phóng to"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Thu nhỏ"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Đóng"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Quay lại"</string>
<string name="handle_text" msgid="4419667835599523257">"Ô điều khiển ứng dụng"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Biểu tượng ứng dụng"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Đổi kích thước và chuyển cửa sổ sang trái"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Đổi kích thước và chuyển cửa sổ sang phải"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Phóng to hoặc khôi phục kích thước cửa sổ"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Phóng to hoặc khôi phục kích thước cửa sổ"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Thu nhỏ cửa sổ ứng dụng"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Mở các chế độ cài đặt theo mặc định"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Chọn cách mở đường liên kết trang web cho ứng dụng này"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Trong ứng dụng"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
index 369fa4b..942734a 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"左侧 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"左侧 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"右侧全屏"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"交换应用位置"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"顶部全屏"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"顶部 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"顶部 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重启"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不再显示"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"点按两次\n即可移动此应用"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
- <string name="close_button_text" msgid="2913281996024033299">"关闭"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"返回"</string>
<string name="handle_text" msgid="4419667835599523257">"应用手柄"</string>
<string name="app_icon_text" msgid="2823268023931811747">"应用图标"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"调整窗口大小并贴靠左侧"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"调整窗口大小并贴靠右侧"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"将窗口最大化或恢复大小"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"将窗口最大化或恢复大小"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"将应用窗口最小化"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"默认打开设置"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"选择如何打开此应用中的网页链接"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"在此应用内"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index 8624f94d..f897922 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"左邊 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"左邊 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"右邊全螢幕"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"切換應用程式"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"頂部全螢幕"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"頂部 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"頂部 50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重新啟動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不要再顯示"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"輕按兩下\n即可移動此應用程式"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
- <string name="close_button_text" msgid="2913281996024033299">"關閉"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"返去"</string>
<string name="handle_text" msgid="4419667835599523257">"應用程式控點"</string>
<string name="app_icon_text" msgid="2823268023931811747">"應用程式圖示"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"將視窗移去左邊調整大小"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"將視窗移去右邊調整大小"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"將視窗放到最大或者還原視窗大小"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"將視窗放到最大或者還原視窗大小"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"將應用程式視窗縮到最細"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"採用預設設定打開"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"選擇此應用程式開啟網絡連結的方式"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"在應用程式內"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
index 199c102..3c6abec 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"以 50% 的螢幕空間顯示左側畫面"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"以 30% 的螢幕空間顯示左側畫面"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"以全螢幕顯示右側畫面"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"切換應用程式"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"以全螢幕顯示頂端畫面"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"以 70% 的螢幕空間顯示頂端畫面"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"以 50% 的螢幕空間顯示頂端畫面"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重新啟動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不要再顯示"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"輕觸兩下即可\n移動這個應用程式"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
- <string name="close_button_text" msgid="2913281996024033299">"關閉"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"返回"</string>
<string name="handle_text" msgid="4419667835599523257">"應用程式控制代碼"</string>
<string name="app_icon_text" msgid="2823268023931811747">"應用程式圖示"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"調整應用程式視窗大小並向左貼齊"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"調整應用程式視窗大小並向右貼齊"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"將視窗最大化或還原大小"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"將視窗最大化或還原大小"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"將應用程式視窗最小化"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"開啟連結的預設設定"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"選擇如何開啟這個應用程式的網頁連結"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"使用應用程式"</string>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index 8f40142..b304299 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -43,7 +43,10 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kwesokunxele ngo-50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kwesokunxele ngo-30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Isikrini esigcwele esingakwesokudla"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Shintsha ama-app"</string>
+ <!-- no translation found for accessibility_action_divider_swap_vertical (3644891227133372072) -->
+ <skip />
+ <!-- no translation found for accessibility_action_divider_swap_horizontal (2722197605446631628) -->
+ <skip />
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Isikrini esigcwele esiphezulu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Okuphezulu okungu-70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Okuphezulu okungu-50%"</string>
@@ -112,9 +115,14 @@
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Qala kabusha"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ungabonisi futhi"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Thepha kabili ukuze\nuhambise le-app"</string>
- <string name="maximize_button_text" msgid="1650859196290301963">"Khulisa"</string>
- <string name="minimize_button_text" msgid="271592547935841753">"Nciphisa"</string>
- <string name="close_button_text" msgid="2913281996024033299">"Vala"</string>
+ <!-- no translation found for maximize_button_text (8106849394538234709) -->
+ <skip />
+ <!-- no translation found for restore_button_text (5377571986086775288) -->
+ <skip />
+ <!-- no translation found for minimize_button_text (5213953162664451152) -->
+ <skip />
+ <!-- no translation found for close_button_text (4544839489310949894) -->
+ <skip />
<string name="back_button_text" msgid="1469718707134137085">"Emuva"</string>
<string name="handle_text" msgid="4419667835599523257">"Inkomba ye-App"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Isithonjana Se-app"</string>
@@ -150,8 +158,14 @@
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Shintsha usayizi wewindi ngakwesokunxele"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Shintsha usayizi wewindi ngakwesokudla"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Khulisa noma buyisela usayizi wewindi"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Khulisa noma buyisela usayizi wewindi"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Nciphisa iwindi le-app"</string>
+ <!-- no translation found for app_header_talkback_action_maximize_button_text (8776156791095878638) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_restore_button_text (2153022340772980863) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_minimize_button_text (7491054416186901764) -->
+ <skip />
+ <!-- no translation found for app_header_talkback_action_close_button_text (5159612596378268926) -->
+ <skip />
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Vula amasethingi ngokuzenzakalela"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Khetha indlela yokuvula amalinki ewebhu ale app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Ku-app"</string>
diff --git a/libs/WindowManager/Shell/res/values/colors.xml b/libs/WindowManager/Shell/res/values/colors.xml
index d754243..8d18f95 100644
--- a/libs/WindowManager/Shell/res/values/colors.xml
+++ b/libs/WindowManager/Shell/res/values/colors.xml
@@ -68,4 +68,8 @@
<color name="desktop_mode_caption_button_on_hover_light">#11000000</color>
<color name="desktop_mode_caption_button_on_hover_dark">#11FFFFFF</color>
<color name="desktop_mode_caption_button">#00000000</color>
+ <color name="tiling_divider_background_light">#C9C7B6</color>
+ <color name="tiling_divider_background_dark">#4A4739</color>
+ <color name="tiling_handle_background_light">#000000</color>
+ <color name="tiling_handle_background_dark">#FFFFFF</color>
</resources>
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index a0c68ad..32660e8 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -618,6 +618,15 @@
<!-- The vertical inset to apply to the app chip's ripple drawable -->
<dimen name="desktop_mode_header_app_chip_ripple_inset_vertical">4dp</dimen>
+ <!-- The corner radius of the windowing actions pill buttons's ripple drawable -->
+ <dimen name="desktop_mode_handle_menu_windowing_action_ripple_radius">24dp</dimen>
+ <!-- The horizontal/vertical inset to apply to the ripple drawable effect of windowing
+ actions pill central buttons -->
+ <dimen name="desktop_mode_handle_menu_windowing_action_ripple_inset_base">2dp</dimen>
+ <!-- The horizontal/vertical vertical inset to apply to the ripple drawable effect of windowing
+ actions pill edge buttons -->
+ <dimen name="desktop_mode_handle_menu_windowing_action_ripple_inset_shift">4dp</dimen>
+
<!-- The corner radius of the minimize button's ripple drawable -->
<dimen name="desktop_mode_header_minimize_ripple_radius">18dp</dimen>
<!-- The vertical inset to apply to the minimize button's ripple drawable -->
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java
index 00c446c..2e33253 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java
@@ -22,6 +22,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.TaskInfo;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.SystemProperties;
@@ -287,6 +288,16 @@
}
/**
+ * @return If {@code true} we set opaque background for all freeform tasks to prevent freeform
+ * tasks below from being visible if freeform task window above is translucent.
+ * Otherwise if fluid resize is enabled, add a background to freeform tasks.
+ */
+ public static boolean shouldSetBackground(@NonNull TaskInfo taskInfo) {
+ return taskInfo.isFreeform() && (!DesktopModeStatus.isVeiledResizeEnabled()
+ || DesktopModeFlags.ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS.isTrue());
+ }
+
+ /**
* @return {@code true} if the app handle should be shown because desktop mode is enabled or
* the device has a large screen
*/
@@ -374,7 +385,7 @@
* of the display's root [TaskDisplayArea] is set to WINDOWING_MODE_FREEFORM.
*/
public static boolean enterDesktopByDefaultOnFreeformDisplay(@NonNull Context context) {
- if (!Flags.enterDesktopByDefaultOnFreeformDisplays()) {
+ if (!DesktopExperienceFlags.ENTER_DESKTOP_BY_DEFAULT_ON_FREEFORM_DISPLAYS.isTrue()) {
return false;
}
return SystemProperties.getBoolean(ENTER_DESKTOP_BY_DEFAULT_ON_FREEFORM_DISPLAY_SYS_PROP,
@@ -387,7 +398,7 @@
* screen.
*/
public static boolean shouldMaximizeWhenDragToTopEdge(@NonNull Context context) {
- if (!Flags.enableDragToMaximize()) {
+ if (!DesktopExperienceFlags.ENABLE_DRAG_TO_MAXIMIZE.isTrue()) {
return false;
}
return SystemProperties.getBoolean(ENABLE_DRAG_TO_MAXIMIZE_SYS_PROP,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java
index 5355138..26c3626 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationAdapter.java
@@ -147,10 +147,9 @@
/** To be overridden by subclasses to adjust the animation surface change. */
void onAnimationUpdateInner(@NonNull SurfaceControl.Transaction t) {
// Update the surface position and alpha.
- if (com.android.graphics.libgui.flags.Flags.edgeExtensionShader()
- && mAnimation.getExtensionEdges() != 0x0
+ if (mAnimation.getExtensionEdges() != 0x0
&& !(mChange.hasFlags(FLAG_TRANSLUCENT)
- && mChange.getActivityComponent() != null)) {
+ && mChange.getActivityComponent() != null)) {
// Extend non-translucent activities
t.setEdgeExtensionEffect(mLeash, mAnimation.getExtensionEdges());
}
@@ -189,8 +188,7 @@
@CallSuper
void onAnimationEnd(@NonNull SurfaceControl.Transaction t) {
onAnimationUpdate(t, mAnimation.getDuration());
- if (com.android.graphics.libgui.flags.Flags.edgeExtensionShader()
- && mAnimation.getExtensionEdges() != 0x0) {
+ if (mAnimation.getExtensionEdges() != 0x0) {
t.setEdgeExtensionEffect(mLeash, /* edge */ 0);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
index c3e783d..85b7ac2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
@@ -20,11 +20,9 @@
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManagerPolicyConstants.TYPE_LAYER_OFFSET;
import static android.window.TransitionInfo.FLAG_IS_BEHIND_STARTING_WINDOW;
-import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static com.android.wm.shell.activityembedding.ActivityEmbeddingAnimationSpec.createShowSnapshotForClosingAnimation;
import static com.android.wm.shell.transition.TransitionAnimationHelper.addBackgroundToTransition;
-import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
import static com.android.wm.shell.transition.Transitions.TRANSIT_TASK_FRAGMENT_DRAG_RESIZE;
@@ -143,10 +141,6 @@
// ending states.
prepareForJumpCut(info, startTransaction);
} else {
- if (!com.android.graphics.libgui.flags.Flags.edgeExtensionShader()) {
- addEdgeExtensionIfNeeded(startTransaction, finishTransaction,
- postStartTransactionCallbacks, adapters);
- }
addBackgroundColorIfNeeded(info, startTransaction, finishTransaction, adapters);
for (ActivityEmbeddingAnimationAdapter adapter : adapters) {
duration = Math.max(duration, adapter.getDurationHint());
@@ -329,34 +323,6 @@
}
}
- /** Adds edge extension to the surfaces that have such an animation property. */
- private void addEdgeExtensionIfNeeded(@NonNull SurfaceControl.Transaction startTransaction,
- @NonNull SurfaceControl.Transaction finishTransaction,
- @NonNull List<Consumer<SurfaceControl.Transaction>> postStartTransactionCallbacks,
- @NonNull List<ActivityEmbeddingAnimationAdapter> adapters) {
- for (ActivityEmbeddingAnimationAdapter adapter : adapters) {
- final Animation animation = adapter.mAnimation;
- if (animation.getExtensionEdges() == 0) {
- continue;
- }
- if (adapter.mChange.hasFlags(FLAG_TRANSLUCENT)
- && adapter.mChange.getActivityComponent() != null) {
- // Skip edge extension for translucent activity.
- continue;
- }
- final TransitionInfo.Change change = adapter.mChange;
- if (TransitionUtil.isOpeningType(adapter.mChange.getMode())) {
- // Need to screenshot after startTransaction is applied otherwise activity
- // may not be visible or ready yet.
- postStartTransactionCallbacks.add(
- t -> edgeExtendWindow(change, animation, t, finishTransaction));
- } else {
- // Can screenshot now (before startTransaction is applied)
- edgeExtendWindow(change, animation, startTransaction, finishTransaction);
- }
- }
- }
-
/** Adds background color to the transition if any animation has such a property. */
private void addBackgroundColorIfNeeded(@NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction startTransaction,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apptoweb/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/apptoweb/OWNERS
index 6207e5b0..7e55786 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apptoweb/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/apptoweb/OWNERS
@@ -4,5 +4,4 @@
mattsziklay@google.com
mdehaini@google.com
pbdr@google.com
-tkachenkoi@google.com
vaniadesmonda@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
index 313d151..d948928 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
@@ -364,7 +364,7 @@
@ShellMainThread Executor mainExecutor, @ShellBackgroundThread Executor bgExecutor) {
return new Bubble(intent,
user,
- /* key= */ getAppBubbleKeyForApp(intent.getIntent().getPackage(), user),
+ /* key= */ getAppBubbleKeyForApp(ComponentUtils.getPackageName(intent), user),
mainExecutor, bgExecutor);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
index 44ae744..133af2a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
@@ -214,7 +214,8 @@
*
* @param entry the {@link BubbleEntry} by the notification.
* @param shouldBubbleUp {@code true} if this notification should bubble up.
- * @param fromSystem {@code true} if this update is from NotificationManagerService.
+ * @param fromSystem {@code true} if this update is from NotificationManagerService or App,
+ * false means this update is from SystemUi
*/
void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp, boolean fromSystem);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
index 29837dc..677c21c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
@@ -473,7 +473,7 @@
/** Updates the expanded view size and position. */
public void updateExpandedView() {
- if (mExpandedView == null || mExpandedBubble == null) return;
+ if (mExpandedView == null || mExpandedBubble == null || mExpandedView.isAnimating()) return;
boolean isOverflowExpanded = mExpandedBubble.getKey().equals(BubbleOverflow.KEY);
mPositioner.getBubbleBarExpandedViewBounds(mPositioner.isBubbleBarOnLeft(),
isOverflowExpanded, mTempRect);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
index df82091..dd2050a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
@@ -461,6 +461,14 @@
}
}
+ private void setAnimating(boolean imeAnimationOngoing) {
+ int animatingTypes = imeAnimationOngoing ? WindowInsets.Type.ime() : 0;
+ try {
+ mWmService.updateDisplayWindowAnimatingTypes(mDisplayId, animatingTypes);
+ } catch (RemoteException e) {
+ }
+ }
+
private int imeTop(float surfaceOffset, float surfacePositionY) {
// surfaceOffset is already offset by the surface's top inset, so we need to subtract
// the top inset so that the return value is in screen coordinates.
@@ -619,6 +627,9 @@
+ imeTop(hiddenY, defaultY) + "->" + imeTop(shownY, defaultY)
+ " showing:" + (mAnimationDirection == DIRECTION_SHOW));
}
+ if (android.view.inputmethod.Flags.reportAnimatingInsetsTypes()) {
+ setAnimating(true);
+ }
int flags = dispatchStartPositioning(mDisplayId, imeTop(hiddenY, defaultY),
imeTop(shownY, defaultY), mAnimationDirection == DIRECTION_SHOW,
isFloating, t);
@@ -666,6 +677,8 @@
}
if (!android.view.inputmethod.Flags.refactorInsetsController()) {
dispatchEndPositioning(mDisplayId, mCancelled, t);
+ } else if (android.view.inputmethod.Flags.reportAnimatingInsetsTypes()) {
+ setAnimating(false);
}
if (mAnimationDirection == DIRECTION_HIDE && !mCancelled) {
ImeTracker.forLogging().onProgress(mStatsToken,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
index c6afc31..b507ca2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
@@ -88,7 +88,7 @@
return false;
}
final int displayId = mPipDisplayLayoutState.getDisplayId();
- return getDesktopRepository().getVisibleTaskCount(displayId) > 0
+ return getDesktopRepository().isAnyDeskActive(displayId)
|| getDesktopWallpaperActivityTokenProvider().isWallpaperActivityVisible(displayId)
|| isDisplayInFreeform();
}
@@ -100,7 +100,7 @@
return false;
}
final DesktopRepository desktopRepository = getDesktopRepository();
- return desktopRepository.getVisibleTaskCount(pipTask.getDisplayId()) > 0
+ return desktopRepository.isAnyDeskActive(pipTask.getDisplayId())
|| desktopRepository.isMinimizedPipPresentInDisplay(pipTask.getDisplayId());
}
@@ -114,7 +114,7 @@
return false;
}
final int displayId = mPipDisplayLayoutState.getDisplayId();
- return getDesktopRepository().getVisibleTaskCount(displayId) == 0
+ return !getDesktopRepository().isAnyDeskActive(displayId)
&& getDesktopWallpaperActivityTokenProvider().isWallpaperActivityVisible(displayId);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java
index 6c04e2a..d304e20 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java
@@ -80,7 +80,19 @@
private int mHoveringWidth;
private int mHoveringHeight;
private boolean mIsLeftRightSplit;
+ private boolean mIsSplitScreen;
+ /**
+ * Notifies the divider of ui mode change.
+ *
+ * @param isDarkMode Whether the mode is ui dark mode.
+ */
+ public void onUiModeChange(boolean isDarkMode) {
+ if (!mIsSplitScreen) {
+ mPaint.setColor(getTilingHandleColor(isDarkMode));
+ invalidate();
+ }
+ }
public DividerHandleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint.setColor(getResources().getColor(R.color.docked_divider_handle, null));
@@ -103,6 +115,27 @@
mHoveringHeight = mHeight > mWidth ? ((int) (mHeight * 1.5f)) : mHeight;
}
+ /**
+ * Used by tiling infrastructure to specify display light/dark mode and
+ * whether handle colors should be overridden on display mode change in case
+ * of non split screen.
+ * @param isSplitScreen Whether the divider is used by split screen or tiling.
+ * @param isDarkMode Whether the mode is ui dark mode.
+ */
+ public void setup(boolean isSplitScreen, boolean isDarkMode) {
+ mIsSplitScreen = isSplitScreen;
+ if (!mIsSplitScreen) {
+ mPaint.setColor(getTilingHandleColor(isDarkMode));
+ setAlpha(.9f);
+ }
+ }
+
+ private int getTilingHandleColor(Boolean isDarkMode) {
+ return isDarkMode ? getResources().getColor(
+ R.color.tiling_handle_background_dark, null /* theme */) : getResources().getColor(
+ R.color.tiling_handle_background_light, null /* theme */);
+ }
+
/** sets whether it's a left/right or top/bottom split */
public void setIsLeftRightSplit(boolean isLeftRightSplit) {
mIsLeftRightSplit = isLeftRightSplit;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerRoundedCorner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerRoundedCorner.java
index d5aaf75..cf0ecae 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerRoundedCorner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerRoundedCorner.java
@@ -47,15 +47,17 @@
private InvertedRoundedCornerDrawInfo mBottomLeftCorner;
private InvertedRoundedCornerDrawInfo mBottomRightCorner;
private boolean mIsLeftRightSplit;
+ private boolean mIsSplitScreen;
public DividerRoundedCorner(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mDividerWidth = getResources().getDimensionPixelSize(R.dimen.split_divider_bar_width);
mDividerBarBackground = new Paint();
mDividerBarBackground.setColor(
- getResources().getColor(R.color.split_divider_background, null));
+ getResources().getColor(R.color.split_divider_background, null /* theme */));
mDividerBarBackground.setFlags(Paint.ANTI_ALIAS_FLAG);
mDividerBarBackground.setStyle(Paint.Style.FILL);
+ mIsSplitScreen = false;
}
@Override
@@ -99,7 +101,41 @@
}
/**
+ * Used by tiling infrastructure to specify display light/dark mode and
+ * whether handle colors should be overridden on display mode change in case
+ * of non split screen.
+ *
+ * @param isSplitScreen Whether the divider is used by split screen or tiling.
+ * @param isDarkMode Whether the mode is ui dark mode.
+ */
+ public void setup(boolean isSplitScreen, boolean isDarkMode) {
+ mIsSplitScreen = isSplitScreen;
+ if (!isSplitScreen) {
+ mDividerBarBackground.setColor(getTilingHandleColor(isDarkMode));
+ }
+ }
+
+ /**
+ * Notifies the divider of ui mode change.
+ *
+ * @param isDarkMode Whether the mode is ui dark mode.
+ */
+ public void onUiModeChange(boolean isDarkMode) {
+ if (!mIsSplitScreen) {
+ mDividerBarBackground.setColor(getTilingHandleColor(isDarkMode));
+ invalidate();
+ }
+ }
+
+ private int getTilingHandleColor(boolean isDarkMode) {
+ return isDarkMode ? getResources().getColor(
+ R.color.tiling_divider_background_dark, null /* theme */) : getResources().getColor(
+ R.color.tiling_divider_background_light, null /* theme */);
+ }
+
+ /**
* Set whether the rounded corner is for a left/right split.
+ *
* @param isLeftRightSplit whether it's a left/right split or top/bottom split.
*/
public void setIsLeftRightSplit(boolean isLeftRightSplit) {
@@ -123,7 +159,16 @@
mCornerPosition = cornerPosition;
final RoundedCorner roundedCorner = getDisplay().getRoundedCorner(cornerPosition);
- mRadius = roundedCorner == null ? 0 : roundedCorner.getRadius();
+ if (mIsSplitScreen) {
+ mRadius = roundedCorner == null ? 0 : roundedCorner.getRadius();
+ } else {
+ mRadius = mContext
+ .getResources()
+ .getDimensionPixelSize(
+ com.android.wm.shell.shared.R.dimen
+ .desktop_windowing_freeform_rounded_corner_radius);
+ }
+
// Starts with a filled square, and then subtracting out a circle from the appropriate
// corner.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
index 201870f..9b11e4a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
@@ -872,7 +872,7 @@
return false;
}
boolean isDesktopModeShowing = mDesktopUserRepositories.get().getCurrent()
- .getVisibleTaskCount(taskInfo.displayId) > 0;
+ .isAnyDeskActive(taskInfo.displayId);
return DesktopModeFlags.ENABLE_DESKTOP_SKIP_COMPAT_UI_EDUCATION_IN_DESKTOP_MODE_BUGFIX
.isTrue() && isDesktopModeShowing;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 59acdc5..79fbd32 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -100,6 +100,7 @@
import com.android.wm.shell.desktopmode.DesktopTasksTransitionObserver;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler;
+import com.android.wm.shell.desktopmode.DragToDisplayTransitionHandler;
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler;
import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler;
import com.android.wm.shell.desktopmode.OverviewToDesktopTransitionObserver;
@@ -770,7 +771,8 @@
DesksOrganizer desksOrganizer,
DesksTransitionObserver desksTransitionObserver,
UserProfileContexts userProfileContexts,
- DesktopModeCompatPolicy desktopModeCompatPolicy) {
+ DesktopModeCompatPolicy desktopModeCompatPolicy,
+ DragToDisplayTransitionHandler dragToDisplayTransitionHandler) {
return new DesktopTasksController(
context,
shellInit,
@@ -800,6 +802,7 @@
recentTasksController.orElse(null),
interactionJankMonitor,
mainHandler,
+ focusTransitionObserver,
desktopModeEventLogger,
desktopModeUiEventLogger,
desktopWallpaperActivityTokenProvider,
@@ -808,7 +811,8 @@
desksOrganizer,
desksTransitionObserver,
userProfileContexts,
- desktopModeCompatPolicy);
+ desktopModeCompatPolicy,
+ dragToDisplayTransitionHandler);
}
@WMSingleton
@@ -934,6 +938,12 @@
@WMSingleton
@Provides
+ static DragToDisplayTransitionHandler provideDragToDisplayTransitionHandler() {
+ return new DragToDisplayTransitionHandler();
+ }
+
+ @WMSingleton
+ @Provides
static Optional<DesktopModeKeyGestureHandler> provideDesktopModeKeyGestureHandler(
Context context,
Optional<DesktopModeWindowDecorViewModel> desktopModeWindowDecorViewModel,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopActivityOrientationChangeHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopActivityOrientationChangeHandler.kt
index 6104e79..b8f4bb8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopActivityOrientationChangeHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopActivityOrientationChangeHandler.kt
@@ -84,7 +84,7 @@
if (!Flags.respectOrientationChangeForUnresizeable()) return
val task = shellTaskOrganizer.getRunningTaskInfo(taskId) ?: return
val taskRepository = desktopUserRepositories.current
- val isDesktopModeShowing = taskRepository.getVisibleTaskCount(task.displayId) > 0
+ val isDesktopModeShowing = taskRepository.isAnyDeskActive(task.displayId)
if (!isDesktopModeShowing || !task.isFreeform || task.isResizeable) return
val taskBounds = task.configuration.windowConfiguration.bounds
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt
index c9a63ff..e89aafe 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt
@@ -27,9 +27,9 @@
import android.view.Display.DEFAULT_DISPLAY
import android.view.IWindowManager
import android.view.WindowManager.TRANSIT_CHANGE
+import android.window.DesktopExperienceFlags
import android.window.WindowContainerTransaction
import com.android.internal.protolog.ProtoLog
-import com.android.window.flags.Flags
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider
@@ -47,31 +47,9 @@
) {
fun refreshDisplayWindowingMode() {
- if (!Flags.enableDisplayWindowingModeSwitching()) return
- // TODO: b/375319538 - Replace the check with a DisplayManager API once it's available.
- val isExtendedDisplayEnabled =
- 0 !=
- Settings.Global.getInt(
- context.contentResolver,
- DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS,
- 0,
- )
- if (!isExtendedDisplayEnabled) {
- // No action needed in mirror or projected mode.
- return
- }
+ if (!DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) return
- val hasNonDefaultDisplay =
- rootTaskDisplayAreaOrganizer.getDisplayIds().any { displayId ->
- displayId != DEFAULT_DISPLAY
- }
- val targetDisplayWindowingMode =
- if (hasNonDefaultDisplay) {
- WINDOWING_MODE_FREEFORM
- } else {
- // Use the default display windowing mode when no non-default display.
- windowManager.getWindowingMode(DEFAULT_DISPLAY)
- }
+ val targetDisplayWindowingMode = getTargetWindowingModeForDefaultDisplay()
val tdaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)
requireNotNull(tdaInfo) { "DisplayAreaInfo of DEFAULT_DISPLAY must be non-null." }
val currentDisplayWindowingMode = tdaInfo.configuration.windowConfiguration.windowingMode
@@ -111,6 +89,25 @@
transitions.startTransition(TRANSIT_CHANGE, wct, /* handler= */ null)
}
+ private fun getTargetWindowingModeForDefaultDisplay(): Int {
+ if (isExtendedDisplayEnabled() && hasExternalDisplay()) {
+ return WINDOWING_MODE_FREEFORM
+ }
+ return windowManager.getWindowingMode(DEFAULT_DISPLAY)
+ }
+
+ // TODO: b/375319538 - Replace the check with a DisplayManager API once it's available.
+ private fun isExtendedDisplayEnabled() =
+ 0 !=
+ Settings.Global.getInt(
+ context.contentResolver,
+ DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS,
+ 0,
+ )
+
+ private fun hasExternalDisplay() =
+ rootTaskDisplayAreaOrganizer.getDisplayIds().any { it != DEFAULT_DISPLAY }
+
private fun logV(msg: String, vararg arguments: Any?) {
ProtoLog.v(WM_SHELL_DESKTOP_MODE, "%s: $msg", TAG, *arguments)
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
index 0cc8a6a..aa50772 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt
@@ -16,14 +16,18 @@
package com.android.wm.shell.desktopmode
+import android.app.ActivityTaskManager.INVALID_TASK_ID
import android.window.DesktopExperienceFlags
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.UNKNOWN
import com.android.wm.shell.sysui.ShellCommandHandler
+import com.android.wm.shell.transition.FocusTransitionObserver
import java.io.PrintWriter
/** Handles the shell commands for the DesktopTasksController. */
-class DesktopModeShellCommandHandler(private val controller: DesktopTasksController) :
- ShellCommandHandler.ShellCommandActionHandler {
+class DesktopModeShellCommandHandler(
+ private val controller: DesktopTasksController,
+ private val focusTransitionObserver: FocusTransitionObserver,
+) : ShellCommandHandler.ShellCommandActionHandler {
override fun onShellCommand(args: Array<String>, pw: PrintWriter): Boolean =
when (args[0]) {
@@ -76,20 +80,21 @@
}
private fun runMoveToNextDisplay(args: Array<String>, pw: PrintWriter): Boolean {
+ var taskId = INVALID_TASK_ID
if (args.size < 2) {
- // First argument is the action name.
- pw.println("Error: task id should be provided as arguments")
- return false
- }
-
- val taskId =
+ taskId = focusTransitionObserver.globallyFocusedTaskId
+ } else {
try {
- args[1].toInt()
+ taskId = args[1].toInt()
} catch (e: NumberFormatException) {
pw.println("Error: task id should be an integer")
return false
}
-
+ }
+ if (taskId == INVALID_TASK_ID) {
+ pw.println("Error: no appropriate task found")
+ return false
+ }
controller.moveToNextDisplay(taskId)
return true
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
index 04e609e..73df976 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
@@ -460,11 +460,15 @@
.singleOrNull() == taskId
}
- /**
- * Returns the active tasks in the given display's active desk.
- *
- * TODO: b/389960283 - migrate callers to [getActiveTaskIdsInDesk].
- */
+ /** Whether the task is the only visible desktop task in the display. */
+ fun isOnlyVisibleTask(taskId: Int, displayId: Int): Boolean {
+ val desk = desktopData.getActiveDesk(displayId) ?: return false
+ return desk.visibleTasks.size == 1 && desk.visibleTasks.single() == taskId
+ }
+
+ /** Whether the display has only one visible desktop task. */
+ fun hasOnlyOneVisibleTask(displayId: Int): Boolean = getVisibleTaskCount(displayId) == 1
+
@VisibleForTesting
fun getActiveTasks(displayId: Int): ArraySet<Int> =
ArraySet(desktopData.getActiveDesk(displayId)?.activeTasks)
@@ -593,7 +597,7 @@
} else {
desk.visibleTasks.remove(taskId)
}
- val newCount = getVisibleTaskCount(deskId)
+ val newCount = getVisibleTaskCountInDesk(deskId)
if (prevCount != newCount) {
logD(
"Update task visibility taskId=%d visible=%b deskId=%d displayId=%d",
@@ -777,18 +781,29 @@
}
}
- /**
- * Gets number of visible freeform tasks on given [displayId]'s active desk.
- *
- * TODO: b/389960283 - migrate callers to [getVisibleTaskCountInDesk].
- */
+ /** Whether the display is currently showing any desk. */
+ fun isAnyDeskActive(displayId: Int): Boolean {
+ if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
+ val desk = desktopData.getDefaultDesk(displayId)
+ if (desk == null) {
+ logE("Could not find default desk for display: $displayId")
+ return false
+ }
+ return desk.visibleTasks.isNotEmpty()
+ }
+ return desktopData.getActiveDesk(displayId) != null
+ }
+
+ /** Gets number of visible freeform tasks on given [displayId]'s active desk. */
+ @Deprecated("Use isAnyDeskActive() instead.", ReplaceWith("isAnyDeskActive()"))
+ @VisibleForTesting
fun getVisibleTaskCount(displayId: Int): Int =
(desktopData.getActiveDesk(displayId)?.visibleTasks?.size ?: 0).also {
logD("getVisibleTaskCount=$it")
}
/** Gets the number of visible tasks on the given desk. */
- fun getVisibleTaskCountInDesk(deskId: Int): Int =
+ private fun getVisibleTaskCountInDesk(deskId: Int): Int =
desktopData.getDesk(deskId)?.visibleTasks?.size ?: 0
/**
@@ -1007,6 +1022,21 @@
fun saveBoundsBeforeFullImmersive(taskId: Int, bounds: Rect) =
boundsBeforeFullImmersiveByTaskId.set(taskId, Rect(bounds))
+ /** Returns the current state of the desktop, formatted for usage by remote clients. */
+ fun getDeskDisplayStateForRemote(): Array<DisplayDeskState> =
+ desktopData
+ .desksSequence()
+ .groupBy { it.displayId }
+ .map { (displayId, desks) ->
+ val activeDeskId = desktopData.getActiveDesk(displayId)?.deskId
+ DisplayDeskState().apply {
+ this.displayId = displayId
+ this.activeDeskId = activeDeskId ?: INVALID_DESK_ID
+ this.deskIds = desks.map { it.deskId }.toIntArray()
+ }
+ }
+ .toTypedArray()
+
/** TODO: b/389960283 - consider updating only the changing desks. */
private fun updatePersistentRepository(displayId: Int) {
val desks = desktopData.desksSequence(displayId).map { desk -> desk.deepCopy() }.toList()
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 180d069..b47dfe2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -138,6 +138,7 @@
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.sysui.UserChangeListener
+import com.android.wm.shell.transition.FocusTransitionObserver
import com.android.wm.shell.transition.OneShotRemoteHandler
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.transition.Transitions.TransitionFinishCallback
@@ -196,6 +197,7 @@
private val recentTasksController: RecentTasksController?,
private val interactionJankMonitor: InteractionJankMonitor,
@ShellMainThread private val handler: Handler,
+ private val focusTransitionObserver: FocusTransitionObserver,
private val desktopModeEventLogger: DesktopModeEventLogger,
private val desktopModeUiEventLogger: DesktopModeUiEventLogger,
private val desktopWallpaperActivityTokenProvider: DesktopWallpaperActivityTokenProvider,
@@ -205,6 +207,7 @@
private val desksTransitionObserver: DesksTransitionObserver,
private val userProfileContexts: UserProfileContexts,
private val desktopModeCompatPolicy: DesktopModeCompatPolicy,
+ private val dragToDisplayTransitionHandler: DragToDisplayTransitionHandler,
) :
RemoteCallable<DesktopTasksController>,
Transitions.TransitionHandler,
@@ -216,7 +219,7 @@
private var visualIndicator: DesktopModeVisualIndicator? = null
private var userId: Int
private val desktopModeShellCommandHandler: DesktopModeShellCommandHandler =
- DesktopModeShellCommandHandler(this)
+ DesktopModeShellCommandHandler(this, focusTransitionObserver)
private val mOnAnimationFinishedCallback = { releaseVisualIndicator() }
private lateinit var snapEventHandler: SnapEventHandler
@@ -336,8 +339,8 @@
activateDefaultDeskInDisplay(displayId, remoteTransition)
}
- /** Gets number of visible freeform tasks in [displayId]. */
- fun visibleTaskCount(displayId: Int): Int = taskRepository.getVisibleTaskCount(displayId)
+ /** Returns whether the given display has an active desk. */
+ fun isAnyDeskActive(displayId: Int): Boolean = taskRepository.isAnyDeskActive(displayId)
/**
* Returns true if any of the following is true:
@@ -345,9 +348,16 @@
* - A transparent fullscreen task exists on top in Desktop Mode
* - PiP on Desktop Windowing is enabled, there is an active PiP window and the desktop
* wallpaper is visible.
+ *
+ * TODO: b/362720497 - consolidate with [isAnyDeskActive].
+ * - top-transparent-fullscreen case: should not be needed if we allow it to launch inside
+ * the desk in fullscreen instead of force-exiting desktop and having to trick this method
+ * into thinking it is in desktop mode when a task in this state exists.
+ * - PIP case: a PIP presence should influence desk activation, so
+ * [DesktopRepository#isAnyDeskActive] should be sufficient.
*/
fun isDesktopModeShowing(displayId: Int): Boolean {
- val hasVisibleTasks = visibleTaskCount(displayId) > 0
+ val hasVisibleTasks = taskRepository.isAnyDeskActive(displayId)
val hasTopTransparentFullscreenTask =
taskRepository.getTopTransparentFullscreenTaskId(displayId) != null
val hasMinimizedPip =
@@ -462,15 +472,14 @@
remoteTransition: RemoteTransition? = null,
callback: IMoveToDesktopCallback? = null,
): Boolean {
- val runningTask = shellTaskOrganizer.getRunningTaskInfo(taskId)
- val backgroundTask = recentTasksController?.findTaskInBackground(taskId)
- if (runningTask == null && backgroundTask == null) {
+ val task =
+ shellTaskOrganizer.getRunningTaskInfo(taskId)
+ ?: recentTasksController?.findTaskInBackground(taskId)
+ if (task == null) {
logW("moveTaskToDefaultDeskAndActivate taskId=%d not found", taskId)
return false
}
- // TODO(342378842): Instead of using default display, support multiple displays
- val displayId = runningTask?.displayId ?: DEFAULT_DISPLAY
- val deskId = getDefaultDeskId(displayId)
+ val deskId = getDefaultDeskId(task.displayId)
return moveTaskToDesk(
taskId = taskId,
deskId = deskId,
@@ -522,14 +531,14 @@
remoteTransition: RemoteTransition? = null,
callback: IMoveToDesktopCallback? = null,
): Boolean {
- if (recentTasksController?.findTaskInBackground(taskId) == null) {
+ val task = recentTasksController?.findTaskInBackground(taskId)
+ if (task == null) {
logW("moveBackgroundTaskToDesktop taskId=%d not found", taskId)
return false
}
logV("moveBackgroundTaskToDesktop with taskId=%d", taskId)
- // TODO(342378842): Instead of using default display, support multiple displays
val taskIdToMinimize =
- bringDesktopAppsToFrontBeforeShowingNewTask(DEFAULT_DISPLAY, wct, taskId)
+ bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, taskId)
val exitResult =
desktopImmersiveController.exitImmersiveIfApplicable(
wct = wct,
@@ -811,7 +820,7 @@
willExitDesktop(
triggerTaskId = taskInfo.taskId,
displayId = displayId,
- forceToFullscreen = false,
+ forceExitDesktop = false,
)
taskRepository.setPipShouldKeepDesktopActive(displayId, keepActive = true)
val desktopExitRunnable =
@@ -884,7 +893,7 @@
snapEventHandler.removeTaskIfTiled(displayId, taskId)
taskRepository.setPipShouldKeepDesktopActive(displayId, keepActive = true)
- val willExitDesktop = willExitDesktop(taskId, displayId, forceToFullscreen = false)
+ val willExitDesktop = willExitDesktop(taskId, displayId, forceExitDesktop = false)
val desktopExitRunnable =
performDesktopExitCleanUp(
wct = wct,
@@ -977,7 +986,7 @@
) {
logV("moveToFullscreenWithAnimation taskId=%d", task.taskId)
val wct = WindowContainerTransaction()
- val willExitDesktop = willExitDesktop(task.taskId, task.displayId, forceToFullscreen = true)
+ val willExitDesktop = willExitDesktop(task.taskId, task.displayId, forceExitDesktop = true)
val deactivationRunnable = addMoveToFullscreenChanges(wct, task, willExitDesktop)
// We are moving a freeform task to fullscreen, put the home task under the fullscreen task.
@@ -996,7 +1005,14 @@
deactivationRunnable?.invoke(transition)
// handles case where we are moving to full screen without closing all DW tasks.
- if (!taskRepository.isOnlyVisibleNonClosingTask(task.taskId)) {
+ if (
+ !taskRepository.isOnlyVisibleNonClosingTask(task.taskId)
+ // This callback is already invoked by |addMoveToFullscreenChanges| when one of these
+ // flags is enabled.
+ &&
+ !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue &&
+ !Flags.enableDesktopWindowingPip()
+ ) {
desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted(
FULLSCREEN_ANIMATION_DURATION
)
@@ -1304,25 +1320,23 @@
applyFreeformDisplayChange(wct, task, displayId)
}
- val activationRunnable: RunOnTransitStart?
if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
desksOrganizer.moveTaskToDesk(wct, destinationDeskId, task)
- prepareForDeskActivation(displayId, wct)
- desksOrganizer.activateDesk(wct, destinationDeskId)
- activationRunnable = { transition ->
- desksTransitionObserver.addPendingTransition(
- DeskTransition.ActiveDeskWithTask(
- token = transition,
- displayId = displayId,
- deskId = destinationDeskId,
- enterTaskId = task.taskId,
- )
- )
- }
} else {
wct.reparent(task.token, displayAreaInfo.token, /* onTop= */ true)
- activationRunnable = null
}
+ addDeskActivationChanges(destinationDeskId, wct)
+ val activationRunnable: RunOnTransitStart = { transition ->
+ desksTransitionObserver.addPendingTransition(
+ DeskTransition.ActiveDeskWithTask(
+ token = transition,
+ displayId = displayId,
+ deskId = destinationDeskId,
+ enterTaskId = task.taskId,
+ )
+ )
+ }
+
if (Flags.enableDisplayFocusInShellTransitions()) {
// Bring the destination display to top with includingParents=true, so that the
// destination display gains the display focus, which makes the top task in the display
@@ -1893,16 +1907,24 @@
private fun willExitDesktop(
triggerTaskId: Int,
displayId: Int,
- forceToFullscreen: Boolean,
+ forceExitDesktop: Boolean,
): Boolean {
+ if (
+ forceExitDesktop &&
+ (Flags.enableDesktopWindowingPip() ||
+ DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue)
+ ) {
+ // |forceExitDesktop| is true when the callers knows we'll exit desktop, such as when
+ // explicitly going fullscreen, so there's no point in checking the desktop state.
+ return true
+ }
if (Flags.enablePerDisplayDesktopWallpaperActivity()) {
if (!taskRepository.isOnlyVisibleNonClosingTask(triggerTaskId, displayId)) {
return false
}
} else if (
Flags.enableDesktopWindowingPip() &&
- taskRepository.isMinimizedPipPresentInDisplay(displayId) &&
- !forceToFullscreen
+ taskRepository.isMinimizedPipPresentInDisplay(displayId)
) {
return false
} else {
@@ -2295,7 +2317,7 @@
willExitDesktop(
triggerTaskId = task.taskId,
displayId = task.displayId,
- forceToFullscreen = true,
+ forceExitDesktop = true,
),
)
wct.reorder(task.token, true)
@@ -2328,7 +2350,7 @@
willExitDesktop(
triggerTaskId = task.taskId,
displayId = task.displayId,
- forceToFullscreen = true,
+ forceExitDesktop = true,
),
)
return wct
@@ -2433,7 +2455,7 @@
willExitDesktop(
triggerTaskId = task.taskId,
displayId = task.displayId,
- forceToFullscreen = true,
+ forceExitDesktop = true,
),
)
}
@@ -2471,7 +2493,7 @@
willExitDesktop(
triggerTaskId = task.taskId,
displayId = task.displayId,
- forceToFullscreen = true,
+ forceExitDesktop = true,
),
)
}
@@ -3173,25 +3195,24 @@
val wct = WindowContainerTransaction()
wct.setBounds(taskInfo.token, destinationBounds)
- // TODO: b/362720497 - reparent to a specific desk within the target display.
- // Reparent task if it has been moved to a new display.
- if (Flags.enableConnectedDisplaysWindowDrag()) {
- val newDisplayId = motionEvent.getDisplayId()
- if (newDisplayId != taskInfo.getDisplayId()) {
- val displayAreaInfo =
- rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(newDisplayId)
- if (displayAreaInfo == null) {
- logW(
- "Task reparent cannot find DisplayAreaInfo for displayId=%d",
- newDisplayId,
- )
- } else {
- wct.reparent(taskInfo.token, displayAreaInfo.token, /* onTop= */ true)
- }
+ val newDisplayId = motionEvent.getDisplayId()
+ val displayAreaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(newDisplayId)
+ val isCrossDisplayDrag =
+ Flags.enableConnectedDisplaysWindowDrag() &&
+ newDisplayId != taskInfo.getDisplayId() &&
+ displayAreaInfo != null
+ val handler =
+ if (isCrossDisplayDrag) {
+ dragToDisplayTransitionHandler
+ } else {
+ null
}
+ if (isCrossDisplayDrag) {
+ // TODO: b/362720497 - reparent to a specific desk within the target display.
+ wct.reparent(taskInfo.token, displayAreaInfo.token, /* onTop= */ true)
}
- transitions.startTransition(TRANSIT_CHANGE, wct, null)
+ transitions.startTransition(TRANSIT_CHANGE, wct, handler)
releaseVisualIndicator()
}
@@ -3613,27 +3634,11 @@
controller,
{ c ->
run {
- c.taskRepository.addDeskChangeListener(
- deskChangeListener,
- c.mainExecutor,
- )
- c.taskRepository.addVisibleTasksListener(
- visibleTasksListener,
- c.mainExecutor,
- )
- c.taskbarDesktopTaskListener = taskbarDesktopTaskListener
- c.desktopModeEnterExitTransitionListener =
- desktopModeEntryExitTransitionListener
+ syncInitialState(c)
+ registerListeners(c)
}
},
- { c ->
- run {
- c.taskRepository.removeDeskChangeListener(deskChangeListener)
- c.taskRepository.removeVisibleTasksListener(visibleTasksListener)
- c.taskbarDesktopTaskListener = null
- c.desktopModeEnterExitTransitionListener = null
- }
- },
+ { c -> run { unregisterListeners(c) } },
)
}
@@ -3729,6 +3734,31 @@
c.startLaunchIntentTransition(intent, options, displayId)
}
}
+
+ private fun syncInitialState(c: DesktopTasksController) {
+ remoteListener.call { l ->
+ // TODO: b/393962589 - implement desks limit.
+ val canCreateDesks = true
+ l.onListenerConnected(
+ c.taskRepository.getDeskDisplayStateForRemote(),
+ canCreateDesks,
+ )
+ }
+ }
+
+ private fun registerListeners(c: DesktopTasksController) {
+ c.taskRepository.addDeskChangeListener(deskChangeListener, c.mainExecutor)
+ c.taskRepository.addVisibleTasksListener(visibleTasksListener, c.mainExecutor)
+ c.taskbarDesktopTaskListener = taskbarDesktopTaskListener
+ c.desktopModeEnterExitTransitionListener = desktopModeEntryExitTransitionListener
+ }
+
+ private fun unregisterListeners(c: DesktopTasksController) {
+ c.taskRepository.removeDeskChangeListener(deskChangeListener)
+ c.taskRepository.removeVisibleTasksListener(visibleTasksListener)
+ c.taskbarDesktopTaskListener = null
+ c.desktopModeEnterExitTransitionListener = null
+ }
}
private fun logV(msg: String, vararg arguments: Any?) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt
index 9a97ae8..df2cf67 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt
@@ -26,6 +26,7 @@
import android.view.WindowManager.TRANSIT_PIP
import android.view.WindowManager.TRANSIT_TO_BACK
import android.view.WindowManager.TRANSIT_TO_FRONT
+import android.window.DesktopExperienceFlags
import android.window.DesktopModeFlags
import android.window.DesktopModeFlags.ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER
import android.window.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY
@@ -162,18 +163,24 @@
continue
}
val desktopRepository = desktopUserRepositories.getProfile(taskInfo.userId)
- val visibleTaskCount = desktopRepository.getVisibleTaskCount(taskInfo.displayId)
+ val isInDesktop = desktopRepository.isAnyDeskActive(taskInfo.displayId)
if (
- visibleTaskCount > 0 &&
+ isInDesktop &&
change.mode == TRANSIT_TO_BACK &&
taskInfo.windowingMode == WINDOWING_MODE_FREEFORM
) {
+ val isLastTask =
+ if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
+ desktopRepository.hasOnlyOneVisibleTask(taskInfo.displayId)
+ } else {
+ desktopRepository.isOnlyVisibleTask(taskInfo.taskId, taskInfo.displayId)
+ }
desktopRepository.minimizeTask(taskInfo.displayId, taskInfo.taskId)
desktopMixedTransitionHandler.addPendingMixedTransition(
DesktopMixedTransitionHandler.PendingMixedTransition.Minimize(
transition,
taskInfo.taskId,
- visibleTaskCount == 1,
+ isLastTask,
)
)
}
@@ -227,9 +234,9 @@
taskInfo: ActivityManager.RunningTaskInfo
): Int? {
val desktopRepository = desktopUserRepositories.getProfile(taskInfo.userId)
- val visibleTaskCount = desktopRepository.getVisibleTaskCount(taskInfo.displayId)
+ val isInDesktop = desktopRepository.isAnyDeskActive(taskInfo.displayId)
if (
- visibleTaskCount > 0 &&
+ isInDesktop &&
taskInfo.windowingMode == WINDOWING_MODE_FREEFORM &&
backAnimationController.latestTriggerBackTask == taskInfo.taskId &&
!desktopRepository.isClosingTask(taskInfo.taskId)
@@ -253,7 +260,7 @@
val desktopRepository = desktopUserRepositories.getProfile(taskInfo.userId)
if (
- desktopRepository.getVisibleTaskCount(taskInfo.displayId) == 0 &&
+ !desktopRepository.isAnyDeskActive(taskInfo.displayId) &&
change.mode == TRANSIT_CLOSE &&
taskInfo.windowingMode == WINDOWING_MODE_FREEFORM &&
desktopWallpaperActivityTokenProvider.getToken(taskInfo.displayId) != null
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandler.kt
new file mode 100644
index 0000000..d51576a
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandler.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2025 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.wm.shell.desktopmode
+
+import android.os.IBinder
+import android.view.SurfaceControl
+import android.window.TransitionInfo
+import android.window.TransitionRequestInfo
+import android.window.WindowContainerTransaction
+import com.android.wm.shell.transition.Transitions
+
+/** Handles the transition to drag a window to another display by dragging the caption. */
+class DragToDisplayTransitionHandler : Transitions.TransitionHandler {
+ override fun handleRequest(
+ transition: IBinder,
+ request: TransitionRequestInfo,
+ ): WindowContainerTransaction? {
+ return null
+ }
+
+ override fun startAnimation(
+ transition: IBinder,
+ info: TransitionInfo,
+ startTransaction: SurfaceControl.Transaction,
+ finishTransaction: SurfaceControl.Transaction,
+ finishCallback: Transitions.TransitionFinishCallback,
+ ): Boolean {
+ for (change in info.changes) {
+ val sc = change.leash
+ val endBounds = change.endAbsBounds
+ val endPosition = change.endRelOffset
+ startTransaction
+ .setWindowCrop(sc, endBounds.width(), endBounds.height())
+ .setPosition(sc, endPosition.x.toFloat(), endPosition.y.toFloat())
+ finishTransaction
+ .setWindowCrop(sc, endBounds.width(), endBounds.height())
+ .setPosition(sc, endPosition.x.toFloat(), endPosition.y.toFloat())
+ }
+
+ startTransaction.apply()
+ finishCallback.onTransitionFinished(null)
+ return true
+ }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt
index 224ff37..3576b25 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt
@@ -162,7 +162,7 @@
}
private fun isDesktopModeShowing(displayId: Int): Boolean =
- desktopUserRepositories.current.getVisibleTaskCount(displayId) > 0
+ desktopUserRepositories.current.isAnyDeskActive(displayId)
override fun handleRequest(
transition: IBinder,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS
index 44d46ee..7a63ec5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS
@@ -2,7 +2,6 @@
atsjenk@google.com
jorgegil@google.com
madym@google.com
-nmusgrave@google.com
pbdr@google.com
vaniadesmonda@google.com
pragyabajoria@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 61a193c..04f0336 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -782,7 +782,7 @@
private boolean isPipExitingToDesktopMode() {
DesktopRepository currentRepo = getCurrentRepo();
return Flags.enableDesktopWindowingPip() && currentRepo != null
- && (currentRepo.getVisibleTaskCount(mTaskInfo.displayId) > 0
+ && (currentRepo.isAnyDeskActive(mTaskInfo.displayId)
|| isDisplayInFreeform());
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/OWNERS
index 5aa3c4e..245669b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/OWNERS
@@ -1,3 +1,2 @@
# WM shell sub-module TV pip owner
-galinap@google.com
bronger@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
index b869bf1..af1e98a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
@@ -395,6 +395,7 @@
void finishResize() {
if (mLastResizeBounds.isEmpty()) {
resetState();
+ return;
}
// Cache initial bounds after release for animation before mLastResizeBounds are modified.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
index 7805ec3..383afcf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
@@ -16,9 +16,11 @@
package com.android.wm.shell.pip2.phone;
+import android.app.PictureInPictureParams;
import android.content.Context;
import android.graphics.Matrix;
import android.graphics.Rect;
+import android.os.SystemProperties;
import android.view.SurfaceControl;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
@@ -28,6 +30,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.ProtoLog;
+import com.android.wm.shell.common.ScreenshotUtils;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.pip.PipBoundsState;
import com.android.wm.shell.common.pip.PipDesktopState;
@@ -39,6 +42,7 @@
import com.android.wm.shell.splitscreen.SplitScreenController;
import java.util.Optional;
+import java.util.function.Supplier;
/**
* Scheduler for Shell initiated PiP transitions and animations.
@@ -46,6 +50,15 @@
public class PipScheduler {
private static final String TAG = PipScheduler.class.getSimpleName();
+ /**
+ * The fixed start delay in ms when fading out the content overlay from bounds animation.
+ * The fadeout animation is guaranteed to start after the client has drawn under the new config.
+ */
+ public static final int EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS =
+ SystemProperties.getInt(
+ "persist.wm.debug.extra_content_overlay_fade_out_delay_ms", 400);
+ private static final int CONTENT_OVERLAY_FADE_OUT_DURATION_MS = 500;
+
private final Context mContext;
private final PipBoundsState mPipBoundsState;
private final ShellExecutor mMainExecutor;
@@ -60,6 +73,7 @@
@Nullable private Runnable mUpdateMovementBoundsRunnable;
private PipAlphaAnimatorSupplier mPipAlphaAnimatorSupplier;
+ private Supplier<PictureInPictureParams> mPipParamsSupplier;
public PipScheduler(Context context,
PipBoundsState pipBoundsState,
@@ -222,6 +236,16 @@
tx.apply();
}
+ void startOverlayFadeoutAnimation(@NonNull SurfaceControl overlayLeash,
+ boolean withStartDelay, @NonNull Runnable onAnimationEnd) {
+ PipAlphaAnimator animator = mPipAlphaAnimatorSupplier.get(mContext, overlayLeash,
+ null /* startTx */, null /* finishTx */, PipAlphaAnimator.FADE_OUT);
+ animator.setDuration(CONTENT_OVERLAY_FADE_OUT_DURATION_MS);
+ animator.setStartDelay(withStartDelay ? EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS : 0);
+ animator.setAnimationEndCallback(onAnimationEnd);
+ animator.start();
+ }
+
void setUpdateMovementBoundsRunnable(@Nullable Runnable updateMovementBoundsRunnable) {
mUpdateMovementBoundsRunnable = updateMovementBoundsRunnable;
}
@@ -236,6 +260,25 @@
if (mPipBoundsState.getBounds().equals(newBounds)) {
return;
}
+
+ // Take a screenshot of PiP and fade it out after resize is finished if seamless resize
+ // is off and if the PiP size is changing.
+ boolean animateCrossFadeResize = !getPipParams().isSeamlessResizeEnabled()
+ && !(mPipBoundsState.getBounds().width() == newBounds.width()
+ && mPipBoundsState.getBounds().height() == newBounds.height());
+ if (animateCrossFadeResize) {
+ final Rect crop = new Rect(newBounds);
+ crop.offsetTo(0, 0);
+ // Note: Put this at layer=MAX_VALUE-2 since the input consumer for PIP is placed at
+ // MAX_VALUE-1
+ final SurfaceControl snapshotSurface = ScreenshotUtils.takeScreenshot(
+ mSurfaceControlTransactionFactory.getTransaction(),
+ mPipTransitionState.getPinnedTaskLeash(), crop, Integer.MAX_VALUE - 2);
+ startOverlayFadeoutAnimation(snapshotSurface, false /* withStartDelay */, () -> {
+ mSurfaceControlTransactionFactory.getTransaction().remove(snapshotSurface).apply();
+ });
+ }
+
mPipBoundsState.setBounds(newBounds);
maybeUpdateMovementBounds();
}
@@ -259,4 +302,14 @@
void setPipAlphaAnimatorSupplier(@NonNull PipAlphaAnimatorSupplier supplier) {
mPipAlphaAnimatorSupplier = supplier;
}
+
+ void setPipParamsSupplier(@NonNull Supplier<PictureInPictureParams> pipParamsSupplier) {
+ mPipParamsSupplier = pipParamsSupplier;
+ }
+
+ @NonNull
+ private PictureInPictureParams getPipParams() {
+ if (mPipParamsSupplier == null) return new PictureInPictureParams.Builder().build();
+ return mPipParamsSupplier.get();
+ }
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java
index dbcbf36..d663484 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTaskListener.java
@@ -91,6 +91,7 @@
});
}
mPipResizeAnimatorSupplier = PipResizeAnimator::new;
+ mPipScheduler.setPipParamsSupplier(this::getPictureInPictureParams);
}
void setPictureInPictureParams(@Nullable PictureInPictureParams params) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
index 0cfab11..91fbd45 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
@@ -50,7 +50,6 @@
import android.graphics.Rect;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.SystemProperties;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
@@ -102,15 +101,6 @@
"animating_bounds_change_duration";
static final int BOUNDS_CHANGE_JUMPCUT_DURATION = 0;
- /**
- * The fixed start delay in ms when fading out the content overlay from bounds animation.
- * The fadeout animation is guaranteed to start after the client has drawn under the new config.
- */
- private static final int EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS =
- SystemProperties.getInt(
- "persist.wm.debug.extra_content_overlay_fade_out_delay_ms", 400);
- private static final int CONTENT_OVERLAY_FADE_OUT_DURATION_MS = 500;
-
//
// Dependencies
//
@@ -481,7 +471,8 @@
if (swipePipToHomeOverlay != null) {
// fadeout the overlay if needed.
- startOverlayFadeoutAnimation(swipePipToHomeOverlay, () -> {
+ mPipScheduler.startOverlayFadeoutAnimation(swipePipToHomeOverlay,
+ true /* withStartDelay */, () -> {
SurfaceControl.Transaction tx = new SurfaceControl.Transaction();
tx.remove(swipePipToHomeOverlay);
tx.apply();
@@ -542,8 +533,8 @@
animator.setAnimationStartCallback(() -> animator.setEnterStartState(pipChange));
animator.setAnimationEndCallback(() -> {
if (animator.getContentOverlayLeash() != null) {
- startOverlayFadeoutAnimation(animator.getContentOverlayLeash(),
- animator::clearAppIconOverlay);
+ mPipScheduler.startOverlayFadeoutAnimation(animator.getContentOverlayLeash(),
+ true /* withStartDelay */, animator::clearAppIconOverlay);
}
finishTransition();
});
@@ -551,16 +542,6 @@
return true;
}
- private void startOverlayFadeoutAnimation(@NonNull SurfaceControl overlayLeash,
- @NonNull Runnable onAnimationEnd) {
- PipAlphaAnimator animator = new PipAlphaAnimator(mContext, overlayLeash,
- null /* startTx */, null /* finishTx */, PipAlphaAnimator.FADE_OUT);
- animator.setDuration(CONTENT_OVERLAY_FADE_OUT_DURATION_MS);
- animator.setStartDelay(EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS);
- animator.setAnimationEndCallback(onAnimationEnd);
- animator.start();
- }
-
private void handleBoundsEnterFixedRotation(TransitionInfo info,
TransitionInfo.Change outPipTaskChange,
TransitionInfo.Change outPipActivityChange) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index 0438d16..9302347 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -93,6 +93,7 @@
import android.app.ActivityOptions;
import android.app.IActivityTaskManager;
import android.app.PendingIntent;
+import android.app.PictureInPictureParams;
import android.app.TaskInfo;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -2890,6 +2891,16 @@
prepareEnterSplitScreen(out);
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
+ } else if (isSplitScreenVisible() && isOpening) {
+ // launching into an existing split stage; possibly launchAdjacent
+ // If we're replacing a pip-able app, we need to let mixed handler take care of
+ // it. Otherwise we'll just treat it as an enter+resize
+ if (mSplitLayout.calculateCurrentSnapPosition() != SNAP_TO_2_50_50) {
+ // updated layout will get applied in startAnimation pendingResize
+ mSplitTransitions.setEnterTransition(transition,
+ request.getRemoteTransition(),
+ TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE, true /*resizeAnim*/);
+ }
} else if (inFullscreen && isSplitScreenVisible()) {
// If the trigger task is in fullscreen and in split, exit split and place
// task on top
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/OWNERS
index 28be0ef..9dc0ebb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/tv/OWNERS
@@ -1,3 +1,2 @@
# WM shell sub-module TV splitscreen owner
-galinap@google.com
bronger@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
index 347dcff..a0fb625 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
@@ -377,7 +377,7 @@
return this::setRecentsTransitionDuringKeyguard;
} else if (mDesktopTasksController != null
// Check on the default display. Recents/gesture nav is only available there
- && mDesktopTasksController.visibleTaskCount(DEFAULT_DISPLAY) > 0) {
+ && mDesktopTasksController.isAnyDeskActive(DEFAULT_DISPLAY)) {
return this::setRecentsTransitionDuringDesktop;
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
index e9c6ade..3652a16 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
@@ -67,7 +67,6 @@
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN;
import static com.android.wm.shell.transition.DefaultSurfaceAnimator.buildSurfaceAnimation;
-import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionTypeFromInfo;
import static com.android.wm.shell.transition.TransitionAnimationHelper.isCoveredByOpaqueFullscreenChange;
@@ -543,21 +542,9 @@
backgroundColorForTransition);
if (!isTask && a.getExtensionEdges() != 0x0) {
- if (com.android.graphics.libgui.flags.Flags.edgeExtensionShader()) {
- startTransaction.setEdgeExtensionEffect(
- change.getLeash(), a.getExtensionEdges());
- finishTransaction.setEdgeExtensionEffect(change.getLeash(), /* edge */ 0);
- } else {
- if (!TransitionUtil.isOpeningType(mode)) {
- // Can screenshot now (before startTransaction is applied)
- edgeExtendWindow(change, a, startTransaction, finishTransaction);
- } else {
- // Need to screenshot after startTransaction is applied otherwise
- // activity may not be visible or ready yet.
- postStartTransactionCallbacks
- .add(t -> edgeExtendWindow(change, a, t, finishTransaction));
- }
- }
+ startTransaction.setEdgeExtensionEffect(
+ change.getLeash(), a.getExtensionEdges());
+ finishTransaction.setEdgeExtensionEffect(change.getLeash(), /* edge */ 0);
}
final Rect clipRect = TransitionUtil.isClosingType(mode)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java
index e04682a..f0f1ad0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java
@@ -16,6 +16,7 @@
package com.android.wm.shell.transition;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.WindowManager.TRANSIT_CHANGE;
@@ -216,6 +217,17 @@
}
/**
+ * Gets the globally focused task ID.
+ */
+ public int getGloballyFocusedTaskId() {
+ if (!enableDisplayFocusInShellTransitions() || mFocusedDisplayId == INVALID_DISPLAY) {
+ return INVALID_TASK_ID;
+ }
+ final RunningTaskInfo globallyFocusedTask = mFocusedTaskOnDisplay.get(mFocusedDisplayId);
+ return globallyFocusedTask != null ? globallyFocusedTask.taskId : INVALID_TASK_ID;
+ }
+
+ /**
* Checks whether the given task has focused globally on the system.
* (Note {@link RunningTaskInfo#isFocused} represents per-display focus.)
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
index 7984bce..edfb560 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
@@ -26,7 +26,6 @@
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.window.TransitionInfo.FLAGS_IS_NON_APP_WINDOW;
import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
-import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT;
import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_CLOSE;
@@ -39,20 +38,10 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.WindowConfiguration;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Insets;
-import android.graphics.Paint;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.Shader;
-import android.view.Surface;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.view.animation.Animation;
-import android.view.animation.Transformation;
-import android.window.ScreenCapture;
import android.window.TransitionInfo;
import com.android.internal.R;
@@ -317,129 +306,6 @@
}
/**
- * Adds edge extension surface to the given {@code change} for edge extension animation.
- */
- public static void edgeExtendWindow(@NonNull TransitionInfo.Change change,
- @NonNull Animation a, @NonNull SurfaceControl.Transaction startTransaction,
- @NonNull SurfaceControl.Transaction finishTransaction) {
- // Do not create edge extension surface for transfer starting window change.
- // The app surface could be empty thus nothing can draw on the hardware renderer, which will
- // block this thread when calling Surface#unlockCanvasAndPost.
- if ((change.getFlags() & FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT) != 0) {
- return;
- }
- final Transformation transformationAtStart = new Transformation();
- a.getTransformationAt(0, transformationAtStart);
- final Transformation transformationAtEnd = new Transformation();
- a.getTransformationAt(1, transformationAtEnd);
-
- // We want to create an extension surface that is the maximal size and the animation will
- // take care of cropping any part that overflows.
- final Insets maxExtensionInsets = Insets.min(
- transformationAtStart.getInsets(), transformationAtEnd.getInsets());
-
- final int targetSurfaceHeight = Math.max(change.getStartAbsBounds().height(),
- change.getEndAbsBounds().height());
- final int targetSurfaceWidth = Math.max(change.getStartAbsBounds().width(),
- change.getEndAbsBounds().width());
- if (maxExtensionInsets.left < 0) {
- final Rect edgeBounds = new Rect(0, 0, 1, targetSurfaceHeight);
- final Rect extensionRect = new Rect(0, 0,
- -maxExtensionInsets.left, targetSurfaceHeight);
- final int xPos = maxExtensionInsets.left;
- final int yPos = 0;
- createExtensionSurface(change.getLeash(), edgeBounds, extensionRect, xPos, yPos,
- "Left Edge Extension", startTransaction, finishTransaction);
- }
-
- if (maxExtensionInsets.top < 0) {
- final Rect edgeBounds = new Rect(0, 0, targetSurfaceWidth, 1);
- final Rect extensionRect = new Rect(0, 0,
- targetSurfaceWidth, -maxExtensionInsets.top);
- final int xPos = 0;
- final int yPos = maxExtensionInsets.top;
- createExtensionSurface(change.getLeash(), edgeBounds, extensionRect, xPos, yPos,
- "Top Edge Extension", startTransaction, finishTransaction);
- }
-
- if (maxExtensionInsets.right < 0) {
- final Rect edgeBounds = new Rect(targetSurfaceWidth - 1, 0,
- targetSurfaceWidth, targetSurfaceHeight);
- final Rect extensionRect = new Rect(0, 0,
- -maxExtensionInsets.right, targetSurfaceHeight);
- final int xPos = targetSurfaceWidth;
- final int yPos = 0;
- createExtensionSurface(change.getLeash(), edgeBounds, extensionRect, xPos, yPos,
- "Right Edge Extension", startTransaction, finishTransaction);
- }
-
- if (maxExtensionInsets.bottom < 0) {
- final Rect edgeBounds = new Rect(0, targetSurfaceHeight - 1,
- targetSurfaceWidth, targetSurfaceHeight);
- final Rect extensionRect = new Rect(0, 0,
- targetSurfaceWidth, -maxExtensionInsets.bottom);
- final int xPos = maxExtensionInsets.left;
- final int yPos = targetSurfaceHeight;
- createExtensionSurface(change.getLeash(), edgeBounds, extensionRect, xPos, yPos,
- "Bottom Edge Extension", startTransaction, finishTransaction);
- }
- }
-
- /**
- * Takes a screenshot of {@code surfaceToExtend}'s edge and extends it for edge extension
- * animation.
- */
- private static SurfaceControl createExtensionSurface(@NonNull SurfaceControl surfaceToExtend,
- @NonNull Rect edgeBounds, @NonNull Rect extensionRect, int xPos, int yPos,
- @NonNull String layerName, @NonNull SurfaceControl.Transaction startTransaction,
- @NonNull SurfaceControl.Transaction finishTransaction) {
- final SurfaceControl edgeExtensionLayer = new SurfaceControl.Builder()
- .setName(layerName)
- .setParent(surfaceToExtend)
- .setHidden(true)
- .setCallsite("TransitionAnimationHelper#createExtensionSurface")
- .setOpaque(true)
- .setBufferSize(extensionRect.width(), extensionRect.height())
- .build();
-
- final ScreenCapture.LayerCaptureArgs captureArgs =
- new ScreenCapture.LayerCaptureArgs.Builder(surfaceToExtend)
- .setSourceCrop(edgeBounds)
- .setFrameScale(1)
- .setPixelFormat(PixelFormat.RGBA_8888)
- .setChildrenOnly(true)
- .setAllowProtected(false)
- .setCaptureSecureLayers(true)
- .build();
- final ScreenCapture.ScreenshotHardwareBuffer edgeBuffer =
- ScreenCapture.captureLayers(captureArgs);
-
- if (edgeBuffer == null) {
- ProtoLog.e(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
- "Failed to capture edge of window.");
- return null;
- }
-
- final BitmapShader shader = new BitmapShader(edgeBuffer.asBitmap(),
- Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
- final Paint paint = new Paint();
- paint.setShader(shader);
-
- final Surface surface = new Surface(edgeExtensionLayer);
- final Canvas c = surface.lockHardwareCanvas();
- c.drawRect(extensionRect, paint);
- surface.unlockCanvasAndPost(c);
- surface.release();
-
- startTransaction.setLayer(edgeExtensionLayer, Integer.MIN_VALUE);
- startTransaction.setPosition(edgeExtensionLayer, xPos, yPos);
- startTransaction.setVisibility(edgeExtensionLayer, true);
- finishTransaction.remove(edgeExtensionLayer);
-
- return edgeExtensionLayer;
- }
-
- /**
* Returns whether there is an opaque fullscreen Change positioned in front of the given Change
* in the given TransitionInfo.
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
index 49510c8..5e8c1fe 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
@@ -61,6 +61,7 @@
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
+import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHost;
import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHostSupplier;
import com.android.wm.shell.windowdecor.extension.TaskInfoKt;
@@ -247,6 +248,10 @@
relayoutParams.mOccludingCaptionElements.add(controlsElement);
relayoutParams.mCaptionTopPadding = getTopPadding(relayoutParams,
taskInfo.getConfiguration().windowConfiguration.getBounds(), displayInsetsState);
+ // Set opaque background for all freeform tasks to prevent freeform tasks below
+ // from being visible if freeform task window above is translucent.
+ // Otherwise if fluid resize is enabled, add a background to freeform tasks.
+ relayoutParams.mShouldSetBackground = DesktopModeStatus.shouldSetBackground(taskInfo);
}
@SuppressLint("MissingPermission")
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
index 0d773ec..7ef1a93 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
@@ -558,6 +558,7 @@
} else {
decoration.relayout(taskInfo, taskInfo.isFocused, decoration.mExclusionRegion);
}
+ mDesktopTilingDecorViewModel.onTaskInfoChange(taskInfo);
mActivityOrientationChangeHandler.ifPresent(handler ->
handler.handleActivityOrientationChange(oldTaskInfo, taskInfo));
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
index 6165dbf..30e5c2a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
@@ -1064,6 +1064,10 @@
relayoutParams.mCornerRadius = shouldIgnoreCornerRadius ? INVALID_CORNER_RADIUS :
getCornerRadius(context, relayoutParams.mLayoutResId);
}
+ // Set opaque background for all freeform tasks to prevent freeform tasks below
+ // from being visible if freeform task window above is translucent.
+ // Otherwise if fluid resize is enabled, add a background to freeform tasks.
+ relayoutParams.mShouldSetBackground = DesktopModeStatus.shouldSetBackground(taskInfo);
}
private static int getCornerRadius(@NonNull Context context, int layoutResId) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.kt
index ff50672..ad2e23c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleMenu.kt
@@ -50,6 +50,7 @@
import androidx.core.view.isGone
import com.android.window.flags.Flags
import com.android.wm.shell.R
+import com.android.wm.shell.bubbles.ContextUtils.isRtl
import com.android.wm.shell.shared.annotations.ShellBackgroundThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper
@@ -60,6 +61,8 @@
import com.android.wm.shell.windowdecor.common.DecorThemeUtil
import com.android.wm.shell.windowdecor.common.WindowDecorTaskResourceLoader
import com.android.wm.shell.windowdecor.common.calculateMenuPosition
+import com.android.wm.shell.windowdecor.common.DrawableInsets
+import com.android.wm.shell.windowdecor.common.createRippleDrawable
import com.android.wm.shell.windowdecor.extension.isFullscreen
import com.android.wm.shell.windowdecor.extension.isMultiWindow
import com.android.wm.shell.windowdecor.extension.isPinned
@@ -71,6 +74,7 @@
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+
/**
* Handle menu opened when the appropriate button is clicked on.
*
@@ -467,6 +471,33 @@
val rootView = LayoutInflater.from(context)
.inflate(R.layout.desktop_mode_window_decor_handle_menu, null /* root */) as View
+ private val windowingButtonRippleRadius = context.resources
+ .getDimensionPixelSize(R.dimen.desktop_mode_handle_menu_windowing_action_ripple_radius)
+ private val windowingButtonDrawableInsets = DrawableInsets(
+ vertical = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_base),
+ horizontal = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_base)
+ )
+ private val windowingButtonDrawableInsetsLeft = DrawableInsets(
+ vertical = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_base),
+ horizontalLeft = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_shift),
+ )
+ private val windowingButtonDrawableInsetsRight = DrawableInsets(
+ vertical = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_base),
+ horizontalRight = context.resources
+ .getDimensionPixelSize(
+ R.dimen.desktop_mode_handle_menu_windowing_action_ripple_inset_shift)
+ )
+
// App Info Pill.
private val appInfoPill = rootView.requireViewById<View>(R.id.app_info_pill)
private val collapseMenuButton = appInfoPill.requireViewById<HandleMenuImageButton>(
@@ -708,6 +739,49 @@
desktopBtn.isSelected = taskInfo.isFreeform
desktopBtn.isEnabled = !taskInfo.isFreeform
desktopBtn.imageTintList = style.windowingButtonColor
+
+ val startInsets = if (context.isRtl) {
+ windowingButtonDrawableInsetsRight
+ } else {
+ windowingButtonDrawableInsetsLeft
+ }
+ val endInsets = if (context.isRtl) {
+ windowingButtonDrawableInsetsLeft
+ } else {
+ windowingButtonDrawableInsetsRight
+ }
+
+ fullscreenBtn.apply {
+ background = createRippleDrawable(
+ color = style.textColor,
+ cornerRadius = windowingButtonRippleRadius,
+ drawableInsets = startInsets
+ )
+ }
+
+ splitscreenBtn.apply {
+ background = createRippleDrawable(
+ color = style.textColor,
+ cornerRadius = windowingButtonRippleRadius,
+ drawableInsets = windowingButtonDrawableInsets
+ )
+ }
+
+ floatingBtn.apply {
+ background = createRippleDrawable(
+ color = style.textColor,
+ cornerRadius = windowingButtonRippleRadius,
+ drawableInsets = windowingButtonDrawableInsets
+ )
+ }
+
+ desktopBtn.apply {
+ background = createRippleDrawable(
+ color = style.textColor,
+ cornerRadius = windowingButtonRippleRadius,
+ drawableInsets = endInsets
+ )
+ }
}
private fun bindMoreActionsPill(style: MenuStyle) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
index c6cb62d..1b0e0f70 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
@@ -363,10 +363,11 @@
dragEventListeners.remove(dragEventListener)
}
- override fun onTopologyChanged(topology: DisplayTopology) {
+ override fun onTopologyChanged(topology: DisplayTopology?) {
// TODO: b/383069173 - Cancel window drag when topology changes happen during drag.
displayIds.clear()
+ if (topology == null) return
val displayBounds = topology.getAbsoluteBounds()
displayIds.addAll(List(displayBounds.size()) { displayBounds.keyAt(it) })
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt
index 7af6b8e..5bd4228 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt
@@ -225,7 +225,7 @@
val veilAnimT = surfaceControlTransactionSupplier.get()
val iconAnimT = surfaceControlTransactionSupplier.get()
veilAnimator = ValueAnimator.ofFloat(0f, 1f).apply {
- duration = RESIZE_ALPHA_DURATION
+ duration = VEIL_ENTRY_ALPHA_ANIMATION_DURATION
addUpdateListener {
veilAnimT.setAlpha(background, animatedValue as Float)
.apply()
@@ -243,7 +243,8 @@
})
}
iconAnimator = ValueAnimator.ofFloat(0f, 1f).apply {
- duration = RESIZE_ALPHA_DURATION
+ duration = ICON_ALPHA_ANIMATION_DURATION
+ startDelay = ICON_ENTRY_DELAY
addUpdateListener {
iconAnimT.setAlpha(icon, animatedValue as Float)
.apply()
@@ -387,23 +388,38 @@
if (background == null || icon == null) return
veilAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
- duration = RESIZE_ALPHA_DURATION
+ duration = VEIL_EXIT_ALPHA_ANIMATION_DURATION
+ startDelay = VEIL_EXIT_DELAY
addUpdateListener {
surfaceControlTransactionSupplier.get()
.setAlpha(background, animatedValue as Float)
- .setAlpha(icon, animatedValue as Float)
.apply()
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
surfaceControlTransactionSupplier.get()
.hide(background)
- .hide(icon)
.apply()
}
})
}
+ iconAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
+ duration = ICON_ALPHA_ANIMATION_DURATION
+ addUpdateListener {
+ surfaceControlTransactionSupplier.get()
+ .setAlpha(icon, animatedValue as Float)
+ .apply()
+ }
+ addListener(object : AnimatorListenerAdapter() {
+ override fun onAnimationEnd(animation: Animator) {
+ surfaceControlTransactionSupplier.get()
+ .hide(icon)
+ .apply()
+ }
+ })
+ }
veilAnimator?.start()
+ iconAnimator?.start()
isVisible = false
}
@@ -451,7 +467,11 @@
companion object {
private const val TAG = "ResizeVeil"
- private const val RESIZE_ALPHA_DURATION = 100L
+ private const val ICON_ALPHA_ANIMATION_DURATION = 50L
+ private const val VEIL_ENTRY_ALPHA_ANIMATION_DURATION = 50L
+ private const val VEIL_EXIT_ALPHA_ANIMATION_DURATION = 200L
+ private const val ICON_ENTRY_DELAY = 33L
+ private const val VEIL_EXIT_DELAY = 33L
private const val VEIL_CONTAINER_LAYER = TaskConstants.TASK_CHILD_LAYER_RESIZE_VEIL
/** The background is a child of the veil container layer and goes at the bottom. */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
index 4002dc5..7baef2b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -16,7 +16,6 @@
package com.android.wm.shell.windowdecor;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.content.res.Configuration.DENSITY_DPI_UNDEFINED;
import static android.view.WindowInsets.Type.captionBar;
import static android.view.WindowInsets.Type.mandatorySystemGestures;
@@ -57,7 +56,6 @@
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.desktopmode.DesktopModeEventLogger;
-import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.windowdecor.WindowDecoration.RelayoutParams.OccludingCaptionElement;
import com.android.wm.shell.windowdecor.additionalviewcontainer.AdditionalViewHostViewContainer;
import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHost;
@@ -504,15 +502,14 @@
startT.show(mTaskSurface);
}
- if (mTaskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM
- && !DesktopModeStatus.isVeiledResizeEnabled()) {
- // When fluid resize is enabled, add a background to freeform tasks
- int backgroundColorInt = mTaskInfo.taskDescription.getBackgroundColor();
+ if (params.mShouldSetBackground) {
+ final int backgroundColorInt = mTaskInfo.taskDescription != null
+ ? mTaskInfo.taskDescription.getBackgroundColor() : Color.BLACK;
mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
startT.setColor(mTaskSurface, mTmpColor);
- } else if (!DesktopModeStatus.isVeiledResizeEnabled()) {
+ } else {
startT.unsetColor(mTaskSurface);
}
@@ -833,6 +830,7 @@
boolean mSetTaskVisibilityPositionAndCrop;
boolean mHasGlobalFocus;
boolean mShouldSetAppBounds;
+ boolean mShouldSetBackground;
void reset() {
mLayoutResId = Resources.ID_NULL;
@@ -857,6 +855,7 @@
mAsyncViewHost = false;
mHasGlobalFocus = false;
mShouldSetAppBounds = false;
+ mShouldSetBackground = false;
}
boolean hasInputFeatureSpy() {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/ButtonBackgroundDrawableUtils.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/ButtonBackgroundDrawableUtils.kt
new file mode 100644
index 0000000..e18239d
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/ButtonBackgroundDrawableUtils.kt
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2025 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.wm.shell.windowdecor.common
+
+import android.annotation.ColorInt
+import android.graphics.Color
+import android.graphics.drawable.LayerDrawable
+import android.graphics.drawable.RippleDrawable
+import android.graphics.drawable.ShapeDrawable
+import android.graphics.drawable.shapes.RoundRectShape
+import com.android.wm.shell.windowdecor.common.OPACITY_11
+import com.android.wm.shell.windowdecor.common.OPACITY_15
+import android.content.res.ColorStateList
+
+/**
+ * Represents drawable insets, specifying the number of pixels to inset a drawable from its bounds.
+ */
+data class DrawableInsets(val l: Int, val t: Int, val r: Int, val b: Int) {
+ constructor(vertical: Int = 0, horizontal: Int = 0) :
+ this(horizontal, vertical, horizontal, vertical)
+ constructor(vertical: Int = 0, horizontalLeft: Int = 0, horizontalRight: Int = 0) :
+ this(horizontalLeft, vertical, horizontalRight, vertical)
+}
+
+/**
+ * Replaces the alpha component of a color with the given alpha value.
+ */
+@ColorInt
+fun replaceColorAlpha(@ColorInt color: Int, alpha: Int): Int {
+ return Color.argb(
+ alpha,
+ Color.red(color),
+ Color.green(color),
+ Color.blue(color)
+ )
+}
+
+/**
+ * Creates a RippleDrawable with specified color, corner radius, and insets.
+ */
+fun createRippleDrawable(
+ @ColorInt color: Int,
+ cornerRadius: Int,
+ drawableInsets: DrawableInsets,
+): RippleDrawable {
+ return RippleDrawable(
+ ColorStateList(
+ arrayOf(
+ intArrayOf(android.R.attr.state_hovered),
+ intArrayOf(android.R.attr.state_pressed),
+ intArrayOf(),
+ ),
+ intArrayOf(
+ replaceColorAlpha(color, OPACITY_11),
+ replaceColorAlpha(color, OPACITY_15),
+ Color.TRANSPARENT,
+ )
+ ),
+ null /* content */,
+ LayerDrawable(arrayOf(
+ ShapeDrawable().apply {
+ shape = RoundRectShape(
+ FloatArray(8) { cornerRadius.toFloat() },
+ null /* inset */,
+ null /* innerRadii */
+ )
+ paint.color = Color.WHITE
+ }
+ )).apply {
+ require(numberOfLayers == 1) { "Must only contain one layer" }
+ setLayerInset(0 /* index */,
+ drawableInsets.l, drawableInsets.t, drawableInsets.r, drawableInsets.b)
+ }
+ )
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDecorViewModel.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDecorViewModel.kt
index ee5d0e8..e9426d2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDecorViewModel.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDecorViewModel.kt
@@ -137,6 +137,10 @@
}
}
+ fun onTaskInfoChange(taskInfo: RunningTaskInfo) {
+ tilingTransitionHandlerByDisplayId.get(taskInfo.displayId)?.onTaskInfoChange(taskInfo)
+ }
+
override fun onDisplayChange(
displayId: Int,
fromRotation: Int,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManager.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManager.kt
index fbbf1a5..cb45c17 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManager.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManager.kt
@@ -57,6 +57,7 @@
private val transactionSupplier: Supplier<SurfaceControl.Transaction>,
private var dividerBounds: Rect,
private val displayContext: Context,
+ private val isDarkMode: Boolean,
) : WindowlessWindowManager(config, leash, null), DividerMoveCallback, View.OnLayoutChangeListener {
private lateinit var viewHost: SurfaceControlViewHost
private var tilingDividerView: TilingDividerView? = null
@@ -153,7 +154,7 @@
surfaceControlViewHost.setView(dividerView, lp)
val tmpDividerBounds = Rect()
getDividerBounds(tmpDividerBounds)
- dividerView.setup(this, tmpDividerBounds, handleRegionSize)
+ dividerView.setup(this, tmpDividerBounds, handleRegionSize, isDarkMode)
t.setRelativeLayer(leash, relativeLeash, 1)
.setPosition(
leash,
@@ -172,6 +173,11 @@
updateTouchRegion()
}
+ /** Changes divider colour if dark/light mode is toggled. */
+ fun onUiModeChange(isDarkMode: Boolean) {
+ tilingDividerView?.onUiModeChange(isDarkMode)
+ }
+
/** Hides the divider bar. */
fun hideDividerBar() {
if (!dividerShown) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingWindowDecoration.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingWindowDecoration.kt
index 9833325..a45df04 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingWindowDecoration.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingWindowDecoration.kt
@@ -103,6 +103,7 @@
@VisibleForTesting
var desktopTilingDividerWindowManager: DesktopTilingDividerWindowManager? = null
private lateinit var dividerBounds: Rect
+ private var isDarkMode = false
private var isResizing = false
private var isTilingFocused = false
@@ -129,6 +130,7 @@
val isTiled = destinationBounds != taskInfo.configuration.windowConfiguration.bounds
initTilingApps(resizeMetadata, position, taskInfo)
+ isDarkMode = isTaskInDarkMode(taskInfo)
// Observe drag resizing to break tiling if a task is drag resized.
desktopModeWindowDecoration.addDragResizeListener(this)
@@ -232,6 +234,7 @@
transactionSupplier,
dividerBounds,
displayContext,
+ isDarkMode,
)
}
// a leash to present the divider on top of, without re-parenting.
@@ -356,6 +359,17 @@
transitions.startTransition(TRANSIT_CHANGE, wct, this)
}
+ fun onTaskInfoChange(taskInfo: RunningTaskInfo) {
+ val isCurrentTaskInDarkMode = isTaskInDarkMode(taskInfo)
+ if (isCurrentTaskInDarkMode == isDarkMode || !isTilingManagerInitialised) return
+ isDarkMode = isCurrentTaskInDarkMode
+ desktopTilingDividerWindowManager?.onUiModeChange(isDarkMode)
+ }
+
+ fun isTaskInDarkMode(taskInfo: RunningTaskInfo): Boolean =
+ (taskInfo.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) ==
+ Configuration.UI_MODE_NIGHT_YES
+
override fun startAnimation(
transition: IBinder,
info: TransitionInfo,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/TilingDividerView.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/TilingDividerView.kt
index b8e3b0f..54dcd2d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/TilingDividerView.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/tiling/TilingDividerView.kt
@@ -16,6 +16,7 @@
package com.android.wm.shell.windowdecor.tiling
import android.content.Context
+import android.content.res.Configuration
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
@@ -85,11 +86,14 @@
dividerMoveCallback: DividerMoveCallback,
dividerBounds: Rect,
handleRegionSize: Size,
+ isDarkMode: Boolean,
) {
callback = dividerMoveCallback
this.dividerBounds.set(dividerBounds)
handle.setIsLeftRightSplit(true)
+ handle.setup(/* isSplitScreen= */ false, isDarkMode)
corners.setIsLeftRightSplit(true)
+ corners.setup(/* isSplitScreen= */ false, isDarkMode)
handleRegionHeight = handleRegionSize.height
handleRegionWidth = handleRegionSize.width
cornersRadius =
@@ -103,6 +107,18 @@
)
}
+ fun onUiModeChange(isDarkMode: Boolean) {
+ handle.onUiModeChange(isDarkMode)
+ corners.onUiModeChange(isDarkMode)
+ paint.color =
+ if (isDarkMode) {
+ resources.getColor(R.color.tiling_divider_background_dark, null /* theme */)
+ } else {
+ resources.getColor(R.color.tiling_divider_background_light, null /* theme */)
+ }
+ invalidate()
+ }
+
override fun onFinishInflate() {
super.onFinishInflate()
dividerBar = requireViewById(R.id.divider_bar)
@@ -112,7 +128,15 @@
resources.getDimensionPixelSize(R.dimen.docked_stack_divider_lift_elevation)
setOnTouchListener(this)
setWillNotDraw(false)
- paint.color = resources.getColor(R.color.split_divider_background, null)
+ paint.color =
+ if (
+ context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK ==
+ Configuration.UI_MODE_NIGHT_YES
+ ) {
+ resources.getColor(R.color.tiling_divider_background_dark, /* theme= */null)
+ } else {
+ resources.getColor(R.color.tiling_divider_background_light, /* theme= */ null)
+ }
paint.isAntiAlias = true
paint.style = Paint.Style.FILL
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
index 870c894..eb8b617 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt
@@ -61,6 +61,8 @@
import com.android.wm.shell.windowdecor.common.OPACITY_55
import com.android.wm.shell.windowdecor.common.OPACITY_65
import com.android.wm.shell.windowdecor.common.Theme
+import com.android.wm.shell.windowdecor.common.DrawableInsets
+import com.android.wm.shell.windowdecor.common.createRippleDrawable
import com.android.wm.shell.windowdecor.extension.isLightCaptionBarAppearance
import com.android.wm.shell.windowdecor.extension.isTransparentCaptionBarAppearance
@@ -635,61 +637,10 @@
)
}
- @ColorInt
- private fun replaceColorAlpha(@ColorInt color: Int, alpha: Int): Int {
- return Color.argb(
- alpha,
- Color.red(color),
- Color.green(color),
- Color.blue(color)
- )
- }
-
- private fun createRippleDrawable(
- @ColorInt color: Int,
- cornerRadius: Int,
- drawableInsets: DrawableInsets,
- ): RippleDrawable {
- return RippleDrawable(
- ColorStateList(
- arrayOf(
- intArrayOf(android.R.attr.state_hovered),
- intArrayOf(android.R.attr.state_pressed),
- intArrayOf(),
- ),
- intArrayOf(
- replaceColorAlpha(color, OPACITY_11),
- replaceColorAlpha(color, OPACITY_15),
- Color.TRANSPARENT
- )
- ),
- null /* content */,
- LayerDrawable(arrayOf(
- ShapeDrawable().apply {
- shape = RoundRectShape(
- FloatArray(8) { cornerRadius.toFloat() },
- null /* inset */,
- null /* innerRadii */
- )
- paint.color = Color.WHITE
- }
- )).apply {
- require(numberOfLayers == 1) { "Must only contain one layer" }
- setLayerInset(0 /* index */,
- drawableInsets.l, drawableInsets.t, drawableInsets.r, drawableInsets.b)
- }
- )
- }
-
private enum class SizeToggleDirection {
MAXIMIZE, RESTORE
}
- private data class DrawableInsets(val l: Int, val t: Int, val r: Int, val b: Int) {
- constructor(vertical: Int = 0, horizontal: Int = 0) :
- this(horizontal, vertical, horizontal, vertical)
- }
-
private data class Header(
val type: Type,
val appTheme: Theme,
diff --git a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/ExitDesktopWithDragToTopDragZone.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/ExitDesktopWithDragToTopDragZone.kt
index 2800839..d82c066 100644
--- a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/ExitDesktopWithDragToTopDragZone.kt
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/ExitDesktopWithDragToTopDragZone.kt
@@ -18,9 +18,9 @@
import android.tools.NavBar
import android.tools.Rotation
-import com.android.internal.R
import com.android.window.flags.Flags
import com.android.wm.shell.Utils
+import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import org.junit.After
import org.junit.Assume
import org.junit.Before
@@ -42,8 +42,8 @@
fun setup() {
Assume.assumeTrue(Flags.enableDesktopWindowingMode() && tapl.isTablet)
// Skip the test when the drag-to-maximize is enabled on this device.
- Assume.assumeFalse(Flags.enableDragToMaximize() &&
- instrumentation.context.resources.getBoolean(R.bool.config_dragToMaximizeInDesktopMode))
+ Assume.assumeFalse(
+ DesktopModeStatus.shouldMaximizeWhenDragToTopEdge(instrumentation.context))
tapl.setEnableRotation(true)
tapl.setExpectedRotation(rotation.value)
testApp.enterDesktopMode(wmHelper, device)
diff --git a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MaximizeAppWindowWithDragToTopDragZone.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MaximizeAppWindowWithDragToTopDragZone.kt
index 60a0fb5..675b63c 100644
--- a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MaximizeAppWindowWithDragToTopDragZone.kt
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/MaximizeAppWindowWithDragToTopDragZone.kt
@@ -23,12 +23,12 @@
import android.tools.traces.parsers.WindowManagerStateHelper
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
-import com.android.internal.R
import com.android.launcher3.tapl.LauncherInstrumentation
import com.android.server.wm.flicker.helpers.DesktopModeAppHelper
import com.android.server.wm.flicker.helpers.SimpleAppHelper
import com.android.window.flags.Flags
import com.android.wm.shell.Utils
+import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import org.junit.After
import org.junit.Assume
import org.junit.Before
@@ -54,8 +54,8 @@
fun setup() {
Assume.assumeTrue(Flags.enableDesktopWindowingMode() && tapl.isTablet)
// Skip the test when the drag-to-maximize is disabled on this device.
- Assume.assumeTrue(Flags.enableDragToMaximize() &&
- instrumentation.context.resources.getBoolean(R.bool.config_dragToMaximizeInDesktopMode))
+ Assume.assumeTrue(
+ DesktopModeStatus.shouldMaximizeWhenDragToTopEdge(instrumentation.context))
tapl.setEnableRotation(true)
tapl.setExpectedRotation(rotation.value)
ChangeDisplayOrientationRule.setRotation(rotation)
diff --git a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/OpenAppWithExternalDisplayConnected.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/OpenAppWithExternalDisplayConnected.kt
index 81c46f1..b9a5e4a9 100644
--- a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/OpenAppWithExternalDisplayConnected.kt
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/OpenAppWithExternalDisplayConnected.kt
@@ -25,6 +25,7 @@
import android.tools.flicker.rules.ChangeDisplayOrientationRule
import android.tools.traces.parsers.WindowManagerStateHelper
import android.util.DisplayMetrics
+import android.window.DesktopExperienceFlags
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.launcher3.tapl.LauncherInstrumentation
@@ -64,7 +65,7 @@
@Before
fun setup() {
Assume.assumeTrue(Flags.enableDesktopWindowingMode() && tapl.isTablet)
- Assume.assumeTrue(Flags.enableDisplayWindowingModeSwitching())
+ Assume.assumeTrue(DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue)
tapl.setEnableRotation(true)
tapl.setExpectedRotation(rotation.value)
ChangeDisplayOrientationRule.setRotation(rotation)
diff --git a/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt b/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt
index 7f48499..e39fa3a 100644
--- a/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt
+++ b/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/CopyContentInSplit.kt
@@ -22,7 +22,6 @@
import android.tools.flicker.legacy.LegacyFlickerTest
import android.tools.flicker.legacy.LegacyFlickerTestFactory
import android.tools.traces.component.ComponentNameMatcher
-import android.tools.traces.component.EdgeExtensionComponentMatcher
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.wm.shell.flicker.splitscreen.benchmark.CopyContentInSplitBenchmark
@@ -99,7 +98,6 @@
ComponentNameMatcher.SPLASH_SCREEN,
ComponentNameMatcher.SNAPSHOT,
ComponentNameMatcher.IME_SNAPSHOT,
- EdgeExtensionComponentMatcher(),
magnifierLayer,
popupWindowLayer
)
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.java
index 75ad621..e85d30f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/pip/PipDesktopStateTest.java
@@ -124,7 +124,7 @@
@Test
public void isPipEnteringInDesktopMode_visibleCountZero_minimizedPipPresent_returnsTrue() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
when(mMockDesktopRepository.isMinimizedPipPresentInDisplay(DISPLAY_ID)).thenReturn(true);
assertTrue(mPipDesktopState.isPipEnteringInDesktopMode(mMockTaskInfo));
@@ -132,7 +132,7 @@
@Test
public void isPipEnteringInDesktopMode_visibleCountNonzero_minimizedPipAbsent_returnsTrue() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(1);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
when(mMockDesktopRepository.isMinimizedPipPresentInDisplay(DISPLAY_ID)).thenReturn(false);
assertTrue(mPipDesktopState.isPipEnteringInDesktopMode(mMockTaskInfo));
@@ -140,7 +140,7 @@
@Test
public void isPipEnteringInDesktopMode_visibleCountZero_minimizedPipAbsent_returnsFalse() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
when(mMockDesktopRepository.isMinimizedPipPresentInDisplay(DISPLAY_ID)).thenReturn(false);
assertFalse(mPipDesktopState.isPipEnteringInDesktopMode(mMockTaskInfo));
@@ -148,7 +148,7 @@
@Test
public void shouldExitPipExitDesktopMode_visibleCountZero_wallpaperInvisible_returnsFalse() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
when(mMockDesktopWallpaperActivityTokenProvider.isWallpaperActivityVisible(
DISPLAY_ID)).thenReturn(false);
@@ -157,7 +157,7 @@
@Test
public void shouldExitPipExitDesktopMode_visibleCountNonzero_wallpaperVisible_returnsFalse() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(1);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
when(mMockDesktopWallpaperActivityTokenProvider.isWallpaperActivityVisible(
DISPLAY_ID)).thenReturn(true);
@@ -166,7 +166,7 @@
@Test
public void shouldExitPipExitDesktopMode_visibleCountZero_wallpaperVisible_returnsTrue() {
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
when(mMockDesktopWallpaperActivityTokenProvider.isWallpaperActivityVisible(
DISPLAY_ID)).thenReturn(true);
@@ -176,7 +176,7 @@
@Test
public void getOutPipWindowingMode_exitToDesktop_displayFreeform_returnsUndefined() {
// Set visible task count to 1 so isPipExitingToDesktopMode returns true
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(1);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
setDisplayWindowingMode(WINDOWING_MODE_FREEFORM);
assertEquals(WINDOWING_MODE_UNDEFINED, mPipDesktopState.getOutPipWindowingMode());
@@ -185,7 +185,7 @@
@Test
public void getOutPipWindowingMode_exitToDesktop_displayFullscreen_returnsFreeform() {
// Set visible task count to 1 so isPipExitingToDesktopMode returns true
- when(mMockDesktopRepository.getVisibleTaskCount(DISPLAY_ID)).thenReturn(1);
+ when(mMockDesktopRepository.isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN);
assertEquals(WINDOWING_MODE_FREEFORM, mPipDesktopState.getOutPipWindowingMode());
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
index 2264ade..598a101 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
@@ -67,8 +67,6 @@
import dagger.Lazy;
-import java.util.Optional;
-
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -78,6 +76,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.Optional;
+
/**
* Tests for {@link CompatUIController}.
*
@@ -707,13 +707,13 @@
@EnableFlags(Flags.FLAG_SKIP_COMPAT_UI_EDUCATION_IN_DESKTOP_MODE)
public void testUpdateActiveTaskInfo_removeAllComponentWhenInDesktopModeFlagEnabled() {
TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
- when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mDesktopUserRepositories.getCurrent().isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
verify(mController, never()).removeLayouts(taskInfo.taskId);
- when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(2);
+ when(mDesktopUserRepositories.getCurrent().isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
@@ -724,14 +724,14 @@
@RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK)
@DisableFlags(Flags.FLAG_SKIP_COMPAT_UI_EDUCATION_IN_DESKTOP_MODE)
public void testUpdateActiveTaskInfo_removeAllComponentWhenInDesktopModeFlagDisabled() {
- when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(0);
+ when(mDesktopUserRepositories.getCurrent().isAnyDeskActive(DISPLAY_ID)).thenReturn(false);
TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true);
mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
verify(mController, never()).removeLayouts(taskInfo.taskId);
- when(mDesktopUserRepositories.getCurrent().getVisibleTaskCount(DISPLAY_ID)).thenReturn(2);
+ when(mDesktopUserRepositories.getCurrent().isAnyDeskActive(DISPLAY_ID)).thenReturn(true);
mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener));
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt
index 0ff7230..d054de4 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt
@@ -22,6 +22,8 @@
import android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED
import android.content.ContentResolver
import android.os.Binder
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS
import android.testing.AndroidTestingRunner
@@ -32,6 +34,7 @@
import android.window.WindowContainerTransaction
import androidx.test.filters.SmallTest
import com.android.dx.mockito.inline.extended.ExtendedMockito.never
+import com.android.window.flags.Flags
import com.android.wm.shell.MockToken
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.ShellTaskOrganizer
@@ -101,7 +104,7 @@
private fun testDisplayWindowingModeSwitch(
defaultWindowingMode: Int,
extendedDisplayEnabled: Boolean,
- expectTransition: Boolean,
+ expectToSwitch: Boolean,
) {
defaultTDA.configuration.windowConfiguration.windowingMode = defaultWindowingMode
whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(defaultWindowingMode)
@@ -113,10 +116,14 @@
settingsSession.use {
connectExternalDisplay()
- defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM
+ if (expectToSwitch) {
+ // Assumes [connectExternalDisplay] properly triggered the switching transition.
+ // Will verify the transition later along with [disconnectExternalDisplay].
+ defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM
+ }
disconnectExternalDisplay()
- if (expectTransition) {
+ if (expectToSwitch) {
val arg = argumentCaptor<WindowContainerTransaction>()
verify(transitions, times(2))
.startTransition(eq(TRANSIT_CHANGE), arg.capture(), isNull())
@@ -135,33 +142,47 @@
}
@Test
+ @DisableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
+ fun displayWindowingModeSwitchOnDisplayConnected_fullscreenDisplay_flagDisabled() {
+ testDisplayWindowingModeSwitch(
+ defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
+ extendedDisplayEnabled = true,
+ expectToSwitch = false,
+ )
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
fun displayWindowingModeSwitchOnDisplayConnected_extendedDisplayDisabled() {
testDisplayWindowingModeSwitch(
defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
extendedDisplayEnabled = false,
- expectTransition = false,
+ expectToSwitch = false,
)
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
fun displayWindowingModeSwitchOnDisplayConnected_fullscreenDisplay() {
testDisplayWindowingModeSwitch(
defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
extendedDisplayEnabled = true,
- expectTransition = true,
+ expectToSwitch = true,
)
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
fun displayWindowingModeSwitchOnDisplayConnected_freeformDisplay() {
testDisplayWindowingModeSwitch(
defaultWindowingMode = WINDOWING_MODE_FREEFORM,
extendedDisplayEnabled = true,
- expectTransition = false,
+ expectToSwitch = false,
)
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
fun displayWindowingModeSwitch_existingTasksOnConnected() {
defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN
whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(WINDOWING_MODE_FULLSCREEN)
@@ -180,6 +201,7 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
fun displayWindowingModeSwitch_existingTasksOnDisconnected() {
defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM
whenever(mockWindowManager.getWindowingMode(anyInt())).thenAnswer {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
index ac1deec..d5c84ba 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
@@ -145,6 +145,7 @@
import com.android.wm.shell.sysui.ShellCommandHandler
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
+import com.android.wm.shell.transition.FocusTransitionObserver
import com.android.wm.shell.transition.OneShotRemoteHandler
import com.android.wm.shell.transition.TestRemoteTransition
import com.android.wm.shell.transition.Transitions
@@ -239,6 +240,7 @@
@Mock private lateinit var taskbarDesktopTaskListener: TaskbarDesktopTaskListener
@Mock private lateinit var freeformTaskTransitionStarter: FreeformTaskTransitionStarter
@Mock private lateinit var mockHandler: Handler
+ @Mock private lateinit var focusTransitionObserver: FocusTransitionObserver
@Mock private lateinit var desktopModeEventLogger: DesktopModeEventLogger
@Mock private lateinit var desktopModeUiEventLogger: DesktopModeUiEventLogger
@Mock lateinit var persistentRepository: DesktopPersistentRepository
@@ -261,6 +263,7 @@
@Mock private lateinit var desksTransitionsObserver: DesksTransitionObserver
@Mock private lateinit var packageManager: PackageManager
@Mock private lateinit var mockDisplayContext: Context
+ @Mock private lateinit var dragToDisplayTransitionHandler: DragToDisplayTransitionHandler
private lateinit var controller: DesktopTasksController
private lateinit var shellInit: ShellInit
@@ -422,6 +425,7 @@
recentTasksController,
mockInteractionJankMonitor,
mockHandler,
+ focusTransitionObserver,
desktopModeEventLogger,
desktopModeUiEventLogger,
desktopWallpaperActivityTokenProvider,
@@ -431,6 +435,7 @@
desksTransitionsObserver,
userProfileContexts,
desktopModeCompatPolicy,
+ dragToDisplayTransitionHandler,
)
@After
@@ -1062,34 +1067,40 @@
}
@Test
- fun visibleTaskCount_noTasks_returnsZero() {
- assertThat(controller.visibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(0)
+ fun isAnyDeskActive_noTasks_returnsFalse() {
+ assertThat(controller.isAnyDeskActive(DEFAULT_DISPLAY)).isFalse()
}
@Test
- fun visibleTaskCount_twoTasks_bothVisible_returnsTwo() {
+ fun isAnyDeskActive_twoTasks_bothVisible_returnsTrue() {
setUpHomeTask()
+
setUpFreeformTask().also(::markTaskVisible)
setUpFreeformTask().also(::markTaskVisible)
- assertThat(controller.visibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(2)
+
+ assertThat(controller.isAnyDeskActive(DEFAULT_DISPLAY)).isTrue()
}
@Test
- fun visibleTaskCount_twoTasks_oneVisible_returnsOne() {
+ fun isInDesktop_twoTasks_oneVisible_returnsTrue() {
setUpHomeTask()
+
setUpFreeformTask().also(::markTaskVisible)
setUpFreeformTask().also(::markTaskHidden)
- assertThat(controller.visibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(1)
+
+ assertThat(controller.isAnyDeskActive(DEFAULT_DISPLAY)).isTrue()
}
@Test
- fun visibleTaskCount_twoTasksVisibleOnDifferentDisplays_returnsOne() {
+ fun isAnyDeskActive_twoTasksVisibleOnDifferentDisplays_returnsTrue() {
taskRepository.addDesk(displayId = SECOND_DISPLAY, deskId = SECOND_DISPLAY)
taskRepository.setActiveDesk(displayId = SECOND_DISPLAY, deskId = SECOND_DISPLAY)
setUpHomeTask()
+
setUpFreeformTask(DEFAULT_DISPLAY).also(::markTaskVisible)
setUpFreeformTask(SECOND_DISPLAY).also(::markTaskVisible)
- assertThat(controller.visibleTaskCount(SECOND_DISPLAY)).isEqualTo(1)
+
+ assertThat(controller.isAnyDeskActive(SECOND_DISPLAY)).isTrue()
}
@Test
@@ -1605,7 +1616,7 @@
@Test
@DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
fun moveTaskToDesktop_desktopWallpaperDisabled_nonRunningTask_launchesInFreeform() {
- val task = createTaskInfo(1)
+ val task = createRecentTaskInfo(1)
whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task)
@@ -1620,7 +1631,7 @@
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY)
fun moveTaskToDesktop_desktopWallpaperEnabled_nonRunningTask_launchesInFreeform() {
whenever(desktopWallpaperActivityTokenProvider.getToken()).thenReturn(null)
- val task = createTaskInfo(1)
+ val task = createRecentTaskInfo(1)
whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task)
@@ -1792,7 +1803,7 @@
whenever(transitions.startTransition(anyInt(), any(), transitionHandlerArgCaptor.capture()))
.thenReturn(Binder())
- val task = createTaskInfo(1)
+ val task = createRecentTaskInfo(1)
whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task)
controller.moveTaskToDefaultDeskAndActivate(
@@ -1807,6 +1818,34 @@
}
@Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_PER_DISPLAY_DESKTOP_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
+ )
+ fun moveBackgroundTaskToDesktop_nonDefaultDisplay_reordersHomeAndWallpaperOfNonDefaultDisplay() {
+ val homeTask = setUpHomeTask(displayId = SECOND_DISPLAY)
+ val wallpaperToken = MockToken().token()
+ whenever(desktopWallpaperActivityTokenProvider.getToken(SECOND_DISPLAY))
+ .thenReturn(wallpaperToken)
+ val task = setUpFreeformTask(displayId = SECOND_DISPLAY, deskId = 2, background = true)
+
+ controller.moveTaskToDefaultDeskAndActivate(
+ taskId = task.taskId,
+ transitionSource = UNKNOWN,
+ remoteTransition = RemoteTransition(spy(TestRemoteTransition())),
+ )
+
+ val wct = getLatestTransition()
+ val homeReorderIndex = wct.indexOfReorder(homeTask, toTop = true)
+ val wallpaperReorderIndex = wct.indexOfReorder(wallpaperToken, toTop = true)
+ assertThat(homeReorderIndex).isNotEqualTo(-1)
+ assertThat(wallpaperReorderIndex).isNotEqualTo(-1)
+ // Wallpaper last, to be in front of Home.
+ assertThat(wallpaperReorderIndex).isGreaterThan(homeReorderIndex)
+ }
+
+ @Test
fun moveRunningTaskToDesktop_remoteTransition_usesOneShotHandler() {
val transitionHandlerArgCaptor = argumentCaptor<TransitionHandler>()
whenever(transitions.startTransition(anyInt(), any(), transitionHandlerArgCaptor.capture()))
@@ -2069,6 +2108,21 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun moveToFullscreen_fromDeskWithMultipleTasks_deactivatesDesk() {
+ val deskId = 1
+ taskRepository.addDesk(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ taskRepository.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ val task1 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ val task2 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = deskId)
+
+ controller.moveToFullscreen(task1.taskId, transitionSource = UNKNOWN)
+
+ val wct = getLatestExitDesktopWct()
+ verify(desksOrganizer).deactivateDesk(wct, deskId = deskId)
+ }
+
+ @Test
fun moveToFullscreen_tdaFullscreen_windowingModeSetToUndefined() {
val task = setUpFreeformTask()
val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
@@ -2278,7 +2332,10 @@
}
@Test
- @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ @DisableFlags(
+ Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP,
+ )
fun moveToFullscreen_multipleVisibleNonMinimizedTasks_doesNotRemoveWallpaperActivity() {
val homeTask = setUpHomeTask()
val task1 = setUpFreeformTask()
@@ -2305,29 +2362,6 @@
}
@Test
- @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
- fun moveToFullscreen_multipleVisibleNonMinimizedTasks_doesNotRemoveWallpaperActivity_multiDesksEnabled() {
- val homeTask = setUpHomeTask()
- val task1 = setUpFreeformTask()
- // Setup task2
- setUpFreeformTask()
-
- val tdaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)
- assertNotNull(tdaInfo).configuration.windowConfiguration.windowingMode =
- WINDOWING_MODE_FULLSCREEN
-
- controller.moveToFullscreen(task1.taskId, transitionSource = UNKNOWN)
-
- val wct = getLatestExitDesktopWct()
- val task1Change = assertNotNull(wct.changes[task1.token.asBinder()])
- assertThat(task1Change.windowingMode).isEqualTo(WINDOWING_MODE_UNDEFINED)
- verify(desktopModeEnterExitTransitionListener)
- .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION)
- // Does not remove wallpaper activity, as desktop still has a visible desktop task
- wct.assertWithoutHop(ReorderPredicate(wallpaperToken, toTop = false))
- }
-
- @Test
fun moveToFullscreen_nonExistentTask_doesNothing() {
controller.moveToFullscreen(999, transitionSource = UNKNOWN)
verifyExitDesktopWCTNotExecuted()
@@ -2462,7 +2496,7 @@
@Test
fun moveTaskToFront_backgroundTask_launchesTask() {
- val task = createTaskInfo(1)
+ val task = createRecentTaskInfo(1)
whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
whenever(
desktopMixedTransitionHandler.startLaunchTransition(
@@ -2484,7 +2518,7 @@
@Test
fun moveTaskToFront_backgroundTaskBringsTasksOverLimit_minimizesBackTask() {
val freeformTasks = (1..MAX_TASK_LIMIT).map { _ -> setUpFreeformTask() }
- val task = createTaskInfo(1001)
+ val task = createRecentTaskInfo(1001)
whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(null)
whenever(
desktopMixedTransitionHandler.startLaunchTransition(
@@ -2780,6 +2814,73 @@
}
@Test
+ @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun moveToNextDisplay_toDesktopInOtherDisplay_bringsExistingTasksToFront() {
+ val transition = Binder()
+ val sourceDeskId = 0
+ val targetDeskId = 2
+ taskRepository.addDesk(displayId = SECOND_DISPLAY, deskId = targetDeskId)
+ taskRepository.setDeskInactive(deskId = targetDeskId)
+ // Set up two display ids
+ whenever(rootTaskDisplayAreaOrganizer.displayIds)
+ .thenReturn(intArrayOf(DEFAULT_DISPLAY, SECOND_DISPLAY))
+ // Create a mock for the target display area: second display
+ val secondDisplayArea = DisplayAreaInfo(MockToken().token(), SECOND_DISPLAY, 0)
+ whenever(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(SECOND_DISPLAY))
+ .thenReturn(secondDisplayArea)
+ whenever(transitions.startTransition(eq(TRANSIT_CHANGE), any(), anyOrNull()))
+ .thenReturn(transition)
+ val task1 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = sourceDeskId)
+ val task2 = setUpFreeformTask(displayId = SECOND_DISPLAY, deskId = targetDeskId)
+
+ controller.moveToNextDisplay(task1.taskId)
+
+ // Existing desktop task in the target display is moved to front.
+ val wct = getLatestTransition()
+ wct.assertReorder(task2.token, /* toTop= */ true)
+ }
+
+ @Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_PER_DISPLAY_DESKTOP_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
+ )
+ @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun moveToNextDisplay_toDesktopInOtherDisplay_movesHomeAndWallpaperToFront() {
+ val homeTask = setUpHomeTask(displayId = SECOND_DISPLAY)
+ whenever(desktopWallpaperActivityTokenProvider.getToken(SECOND_DISPLAY))
+ .thenReturn(wallpaperToken)
+ val transition = Binder()
+ val sourceDeskId = 0
+ val targetDeskId = 2
+ taskRepository.addDesk(displayId = SECOND_DISPLAY, deskId = targetDeskId)
+ taskRepository.setDeskInactive(deskId = targetDeskId)
+ // Set up two display ids
+ whenever(rootTaskDisplayAreaOrganizer.displayIds)
+ .thenReturn(intArrayOf(DEFAULT_DISPLAY, SECOND_DISPLAY))
+ // Create a mock for the target display area: second display
+ val secondDisplayArea = DisplayAreaInfo(MockToken().token(), SECOND_DISPLAY, 0)
+ whenever(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(SECOND_DISPLAY))
+ .thenReturn(secondDisplayArea)
+ whenever(transitions.startTransition(eq(TRANSIT_CHANGE), any(), anyOrNull()))
+ .thenReturn(transition)
+ val task1 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = sourceDeskId)
+
+ controller.moveToNextDisplay(task1.taskId)
+
+ // Home / Wallpaper should be moved to front as the background of desktop tasks, otherwise
+ // fullscreen (non-desktop) tasks could remain visible.
+ val wct = getLatestTransition()
+ val homeReorderIndex = wct.indexOfReorder(homeTask, toTop = true)
+ val wallpaperReorderIndex = wct.indexOfReorder(wallpaperToken, toTop = true)
+ assertThat(homeReorderIndex).isNotEqualTo(-1)
+ assertThat(wallpaperReorderIndex).isNotEqualTo(-1)
+ // Wallpaper last, to be in front of Home.
+ assertThat(wallpaperReorderIndex).isGreaterThan(homeReorderIndex)
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
fun moveToNextDisplay_toDeskInOtherDisplay_movesToDeskAndActivates() {
val transition = Binder()
@@ -2853,6 +2954,35 @@
}
@Test
+ fun moveToNextDisplay_movingToDesktop_sendsTaskbarRoundingUpdate() {
+ val transition = Binder()
+ val sourceDeskId = 1
+ val targetDeskId = 2
+ taskRepository.addDesk(displayId = SECOND_DISPLAY, deskId = targetDeskId)
+ taskRepository.setDeskInactive(deskId = targetDeskId)
+ // Set up two display ids
+ whenever(rootTaskDisplayAreaOrganizer.displayIds)
+ .thenReturn(intArrayOf(DEFAULT_DISPLAY, SECOND_DISPLAY))
+ // Create a mock for the target display area: second display
+ val secondDisplayArea = DisplayAreaInfo(MockToken().token(), SECOND_DISPLAY, 0)
+ whenever(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(SECOND_DISPLAY))
+ .thenReturn(secondDisplayArea)
+ whenever(transitions.startTransition(eq(TRANSIT_CHANGE), any(), anyOrNull()))
+ .thenReturn(transition)
+
+ val task = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = sourceDeskId)
+ taskRepository.addTaskToDesk(
+ displayId = DEFAULT_DISPLAY,
+ deskId = sourceDeskId,
+ taskId = task.taskId,
+ isVisible = true,
+ )
+ controller.moveToNextDisplay(task.taskId)
+
+ verify(taskbarDesktopTaskListener).onTaskbarCornerRoundingUpdate(anyBoolean())
+ }
+
+ @Test
fun getTaskWindowingMode() {
val fullscreenTask = setUpFullscreenTask()
val freeformTask = setUpFreeformTask()
@@ -4455,7 +4585,10 @@
}
@Test
- @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ @DisableFlags(
+ Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP,
+ )
fun moveFocusedTaskToFullscreen_multipleVisibleTasks_doesNotRemoveWallpaperActivity() {
val homeTask = setUpHomeTask()
val task1 = setUpFreeformTask()
@@ -4480,27 +4613,6 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
- fun moveFocusedTaskToFullscreen_multipleVisibleTasks_doesNotRemoveWallpaperActivity_multiDesksEnabled() {
- val homeTask = setUpHomeTask()
- val task1 = setUpFreeformTask()
- val task2 = setUpFreeformTask()
- val task3 = setUpFreeformTask()
-
- task1.isFocused = false
- task2.isFocused = true
- task3.isFocused = false
- controller.enterFullscreen(DEFAULT_DISPLAY, transitionSource = UNKNOWN)
-
- val wct = getLatestExitDesktopWct()
- val taskChange = assertNotNull(wct.changes[task2.token.asBinder()])
- assertThat(taskChange.windowingMode)
- .isEqualTo(WINDOWING_MODE_UNDEFINED) // inherited FULLSCREEN
- // Does not remove wallpaper activity
- wct.assertWithoutHop(ReorderPredicate(wallpaperToken, toTop = null))
- }
-
- @Test
- @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
fun moveFocusedTaskToFullscreen_multipleVisibleTasks_fullscreenOverHome_multiDesksEnabled() {
val homeTask = setUpHomeTask()
val task1 = setUpFreeformTask()
@@ -5031,7 +5143,7 @@
Mockito.argThat { wct ->
return@argThat wct.hierarchyOps[0].isReparent
},
- eq(null),
+ eq(dragToDisplayTransitionHandler),
)
}
@@ -5225,6 +5337,10 @@
}
@Test
+ @DisableFlags(
+ Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP,
+ )
fun enterSplit_multipleVisibleNonMinimizedTasks_removesWallpaperActivity() {
val task1 = setUpFreeformTask()
val task2 = setUpFreeformTask()
@@ -6628,7 +6744,7 @@
if (background) {
whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(null)
whenever(recentTasksController.findTaskInBackground(task.taskId))
- .thenReturn(createTaskInfo(task.taskId))
+ .thenReturn(createRecentTaskInfo(taskId = task.taskId, displayId = displayId))
} else {
whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(task)
}
@@ -6799,6 +6915,12 @@
return arg.lastValue
}
+ private fun getLatestTransition(): WindowContainerTransaction {
+ val arg = argumentCaptor<WindowContainerTransaction>()
+ verify(transitions).startTransition(any(), arg.capture(), anyOrNull())
+ return arg.lastValue
+ }
+
private fun getLatestEnterDesktopWct(): WindowContainerTransaction {
val arg = argumentCaptor<WindowContainerTransaction>()
verify(enterDesktopTransitionHandler).moveToDesktop(arg.capture(), any())
@@ -7057,8 +7179,9 @@
} ?: false
}
-private fun createTaskInfo(id: Int) =
+private fun createRecentTaskInfo(taskId: Int, displayId: Int = DEFAULT_DISPLAY) =
RecentTaskInfo().apply {
- taskId = id
+ this.taskId = taskId
+ this.displayId = displayId
token = WindowContainerToken(mock(IWindowContainerToken::class.java))
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt
index dd577f4..5b0f94f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserverTest.kt
@@ -128,7 +128,7 @@
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION)
fun backNavigation_taskMinimized() {
val task = createTaskInfo(1)
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
transitionObserver.onTransitionReady(
transition = mock(),
@@ -146,7 +146,9 @@
fun backNavigation_withCloseTransitionNotLastTask_taskMinimized() {
val task = createTaskInfo(1)
val transition = mock<IBinder>()
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(2)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
+ whenever(taskRepository.isOnlyVisibleTask(task.taskId, task.displayId)).thenReturn(false)
+ whenever(taskRepository.hasOnlyOneVisibleTask(task.displayId)).thenReturn(false)
whenever(taskRepository.isClosingTask(task.taskId)).thenReturn(false)
whenever(backAnimationController.latestTriggerBackTask).thenReturn(task.taskId)
@@ -173,7 +175,7 @@
fun backNavigation_withCloseTransitionLastTask_wallpaperActivityClosed_taskMinimized() {
val task = createTaskInfo(1)
val transition = mock<IBinder>()
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
whenever(taskRepository.isClosingTask(task.taskId)).thenReturn(false)
whenever(backAnimationController.latestTriggerBackTask).thenReturn(task.taskId)
@@ -202,7 +204,7 @@
fun backNavigation_withCloseTransitionLastTask_wallpaperActivityReordered_taskMinimized() {
val task = createTaskInfo(1)
val transition = mock<IBinder>()
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
whenever(taskRepository.isClosingTask(task.taskId)).thenReturn(false)
whenever(backAnimationController.latestTriggerBackTask).thenReturn(task.taskId)
@@ -227,7 +229,7 @@
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION)
fun backNavigation_nullTaskInfo_taskNotMinimized() {
val task = createTaskInfo(1)
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
transitionObserver.onTransitionReady(
transition = mock(),
@@ -243,7 +245,7 @@
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION)
fun removeTasks_onTaskFullscreenLaunchWithOpenTransition_taskRemovedFromRepo() {
val task = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN)
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
whenever(taskRepository.isActiveTask(task.taskId)).thenReturn(true)
transitionObserver.onTransitionReady(
@@ -261,7 +263,7 @@
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION)
fun removeTasks_onTaskFullscreenLaunchExitDesktopTransition_taskRemovedFromRepo() {
val task = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN)
- whenever(taskRepository.getVisibleTaskCount(any())).thenReturn(1)
+ whenever(taskRepository.isAnyDeskActive(any())).thenReturn(true)
whenever(taskRepository.isActiveTask(task.taskId)).thenReturn(true)
transitionObserver.onTransitionReady(
@@ -280,7 +282,7 @@
fun closeLastTask_wallpaperTokenExists_wallpaperIsRemoved() {
val mockTransition = Mockito.mock(IBinder::class.java)
val task = createTaskInfo(1, WINDOWING_MODE_FREEFORM)
- whenever(taskRepository.getVisibleTaskCount(task.displayId)).thenReturn(0)
+ whenever(taskRepository.isAnyDeskActive(task.displayId)).thenReturn(false)
transitionObserver.onTransitionReady(
transition = mockTransition,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandlerTest.kt
new file mode 100644
index 0000000..51c3029
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDisplayTransitionHandlerTest.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2025 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.wm.shell.desktopmode
+
+import android.graphics.Point
+import android.graphics.Rect
+import android.os.IBinder
+import android.view.SurfaceControl
+import android.window.TransitionInfo
+import android.window.TransitionRequestInfo
+import com.android.wm.shell.transition.Transitions
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.verify
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
+
+/**
+ * Test class for {@link DragToDisplayTransitionHandler}
+ *
+ * Usage: atest WMShellUnitTests:DragToDisplayTransitionHandlerTest
+ */
+class DragToDisplayTransitionHandlerTest {
+ private lateinit var handler: DragToDisplayTransitionHandler
+ private val mockTransition: IBinder = mock()
+ private val mockRequestInfo: TransitionRequestInfo = mock()
+ private val mockTransitionInfo: TransitionInfo = mock()
+ private val mockStartTransaction: SurfaceControl.Transaction = mock()
+ private val mockFinishTransaction: SurfaceControl.Transaction = mock()
+ private val mockFinishCallback: Transitions.TransitionFinishCallback = mock()
+
+ @Before
+ fun setUp() {
+ handler = DragToDisplayTransitionHandler()
+ whenever(mockStartTransaction.setWindowCrop(any(), any(), any()))
+ .thenReturn(mockStartTransaction)
+ whenever(mockFinishTransaction.setWindowCrop(any(), any(), any()))
+ .thenReturn(mockFinishTransaction)
+ }
+
+ @Test
+ fun handleRequest_anyRequest_returnsNull() {
+ val result = handler.handleRequest(mockTransition, mockRequestInfo)
+ assert(result == null)
+ }
+
+ @Test
+ fun startAnimation_verifyTransformationsApplied() {
+ val mockChange1 = mock<TransitionInfo.Change>()
+ val leash1 = mock<SurfaceControl>()
+ val endBounds1 = Rect(0, 0, 50, 50)
+ val endPosition1 = Point(5, 5)
+
+ whenever(mockChange1.leash).doReturn(leash1)
+ whenever(mockChange1.endAbsBounds).doReturn(endBounds1)
+ whenever(mockChange1.endRelOffset).doReturn(endPosition1)
+
+ val mockChange2 = mock<TransitionInfo.Change>()
+ val leash2 = mock<SurfaceControl>()
+ val endBounds2 = Rect(100, 100, 200, 150)
+ val endPosition2 = Point(15, 25)
+
+ whenever(mockChange2.leash).doReturn(leash2)
+ whenever(mockChange2.endAbsBounds).doReturn(endBounds2)
+ whenever(mockChange2.endRelOffset).doReturn(endPosition2)
+
+ whenever(mockTransitionInfo.changes).doReturn(listOf(mockChange1, mockChange2))
+
+ handler.startAnimation(
+ mockTransition,
+ mockTransitionInfo,
+ mockStartTransaction,
+ mockFinishTransaction,
+ mockFinishCallback,
+ )
+
+ verify(mockStartTransaction).setWindowCrop(leash1, endBounds1.width(), endBounds1.height())
+ verify(mockStartTransaction)
+ .setPosition(leash1, endPosition1.x.toFloat(), endPosition1.y.toFloat())
+ verify(mockStartTransaction).setWindowCrop(leash2, endBounds2.width(), endBounds2.height())
+ verify(mockStartTransaction)
+ .setPosition(leash2, endPosition2.x.toFloat(), endPosition2.y.toFloat())
+ verify(mockStartTransaction).apply()
+ verify(mockFinishCallback).onTransitionFinished(null)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandlerTest.kt
index 143d232..7560945 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandlerTest.kt
@@ -84,7 +84,7 @@
spyContext = spy(mContext)
// Simulate having one Desktop task so that we see Desktop Mode as active
whenever(desktopUserRepositories.current).thenReturn(desktopRepository)
- whenever(desktopRepository.getVisibleTaskCount(anyInt())).thenReturn(1)
+ whenever(desktopRepository.isAnyDeskActive(anyInt())).thenReturn(true)
whenever(spyContext.packageManager).thenReturn(packageManager)
whenever(componentName.packageName).thenReturn(HOME_LAUNCHER_PACKAGE_NAME)
whenever(packageManager.getHomeActivities(ArrayList())).thenReturn(componentName)
@@ -111,7 +111,7 @@
@Test
fun startAnimation_desktopNotActive_doesNotAnimate() {
- whenever(desktopUserRepositories.current.getVisibleTaskCount(anyInt())).thenReturn(1)
+ whenever(desktopUserRepositories.current.isAnyDeskActive(anyInt())).thenReturn(true)
val info =
TransitionInfoBuilder(TRANSIT_OPEN)
.addChange(TRANSIT_OPEN, createSystemModalTaskWithBaseActivity())
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/OWNERS b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/OWNERS
index 736d4cf..a7d1890 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/OWNERS
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/OWNERS
@@ -1,3 +1,2 @@
# WM shell sub-module TV pip owners
-galinap@google.com
-bronger@google.com
\ No newline at end of file
+bronger@google.com
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
index 0c19529..275e488 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
@@ -28,6 +28,7 @@
import static org.mockito.kotlin.VerificationKt.verify;
import android.app.ActivityManager;
+import android.app.PictureInPictureParams;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Matrix;
@@ -47,6 +48,7 @@
import com.android.wm.shell.pip2.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip2.animation.PipAlphaAnimator;
import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.util.StubTransaction;
import org.junit.Before;
import org.junit.Test;
@@ -107,6 +109,8 @@
mPipScheduler.setSurfaceControlTransactionFactory(mMockFactory);
mPipScheduler.setPipAlphaAnimatorSupplier((context, leash, startTx, finishTx, direction) ->
mMockAlphaAnimator);
+ final PictureInPictureParams params = new PictureInPictureParams.Builder().build();
+ mPipScheduler.setPipParamsSupplier(() -> params);
SurfaceControl testLeash = new SurfaceControl.Builder()
.setContainerLayer()
@@ -289,6 +293,28 @@
verify(mMockUpdateMovementBoundsRunnable, times(1)).run();
}
+ @Test
+ public void finishResize_nonSeamless_alphaAnimatorStarted() {
+ final PictureInPictureParams params =
+ new PictureInPictureParams.Builder().setSeamlessResizeEnabled(false).build();
+ mPipScheduler.setPipParamsSupplier(() -> params);
+ when(mMockFactory.getTransaction()).thenReturn(new StubTransaction());
+
+ mPipScheduler.scheduleFinishResizePip(TEST_BOUNDS);
+
+ verify(mMockAlphaAnimator, times(1)).start();
+ }
+
+ @Test
+ public void finishResize_seamless_animatorNotStarted() {
+ final PictureInPictureParams params =
+ new PictureInPictureParams.Builder().setSeamlessResizeEnabled(true).build();
+ mPipScheduler.setPipParamsSupplier(() -> params);
+
+ mPipScheduler.scheduleFinishResizePip(TEST_BOUNDS);
+ verify(mMockAlphaAnimator, never()).start();
+ }
+
private void setNullPipTaskToken() {
when(mMockPipTransitionState.getPipTaskToken()).thenReturn(null);
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipTaskListenerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipTaskListenerTest.java
index 1b462c3..333569a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipTaskListenerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipTaskListenerTest.java
@@ -294,6 +294,8 @@
mPipTaskListener = new PipTaskListener(mMockContext, mMockShellTaskOrganizer,
mMockPipTransitionState, mMockPipScheduler, mMockPipBoundsState,
mMockPipBoundsAlgorithm, mMockShellExecutor);
+ clearInvocations(mMockPipScheduler);
+
Bundle extras = new Bundle();
extras.putBoolean(ANIMATING_ASPECT_RATIO_CHANGE, false);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt
index 4082ffd..fb62ba7 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt
@@ -16,6 +16,7 @@
package com.android.wm.shell.shared.desktopmode
+import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
import android.content.Context
import android.content.res.Resources
import android.platform.test.annotations.DisableFlags
@@ -27,6 +28,7 @@
import com.android.internal.R
import com.android.window.flags.Flags
import com.android.wm.shell.ShellTestCase
+import com.android.wm.shell.util.createTaskInfo
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
@@ -152,6 +154,70 @@
assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue()
}
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS,
+ )
+ @Test
+ fun shouldSetBackground_BTWFlagEnabled_freeformTask_returnsTrue() {
+ val freeFormTaskInfo = createTaskInfo(deviceWindowingMode = WINDOWING_MODE_FREEFORM)
+ assertThat(DesktopModeStatus.shouldSetBackground(freeFormTaskInfo)).isTrue()
+ }
+
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS,
+ )
+ @Test
+ fun shouldSetBackground_BTWFlagEnabled_notFreeformTask_returnsFalse() {
+ val notFreeFormTaskInfo = createTaskInfo()
+ assertThat(DesktopModeStatus.shouldSetBackground(notFreeFormTaskInfo)).isFalse()
+ }
+
+ @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
+ @DisableFlags(Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS)
+ @Test
+ fun shouldSetBackground_BTWFlagDisabled_freeformTaskAndFluid_returnsTrue() {
+ val freeFormTaskInfo = createTaskInfo(deviceWindowingMode = WINDOWING_MODE_FREEFORM)
+
+ setIsVeiledResizeEnabled(false)
+ assertThat(DesktopModeStatus.shouldSetBackground(freeFormTaskInfo)).isTrue()
+ }
+
+ @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
+ @DisableFlags(Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS)
+ @Test
+ fun shouldSetBackground_BTWFlagDisabled_freeformTaskAndVeiled_returnsFalse() {
+ val freeFormTaskInfo = createTaskInfo(deviceWindowingMode = WINDOWING_MODE_FREEFORM)
+
+ setIsVeiledResizeEnabled(true)
+ assertThat(DesktopModeStatus.shouldSetBackground(freeFormTaskInfo)).isFalse()
+ }
+
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS,
+ )
+ @Test
+ fun shouldSetBackground_BTWFlagEnabled_freeformTaskAndFluid_returnsTrue() {
+ val freeFormTaskInfo = createTaskInfo(deviceWindowingMode = WINDOWING_MODE_FREEFORM)
+
+ setIsVeiledResizeEnabled(false)
+ assertThat(DesktopModeStatus.shouldSetBackground(freeFormTaskInfo)).isTrue()
+ }
+
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS,
+ )
+ @Test
+ fun shouldSetBackground_BTWFlagEnabled_windowModesTask_freeformTaskAndVeiled_returnsTrue() {
+ val freeFormTaskInfo = createTaskInfo(deviceWindowingMode = WINDOWING_MODE_FREEFORM)
+
+ setIsVeiledResizeEnabled(true)
+ assertThat(DesktopModeStatus.shouldSetBackground(freeFormTaskInfo)).isTrue()
+ }
+
@Test
fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktop_returnsTrue() {
doReturn(true).whenever(mockResources).getBoolean(eq(R.bool.config_isDesktopModeSupported))
@@ -254,4 +320,11 @@
deviceRestrictions.isAccessible = true
deviceRestrictions.setBoolean(/* obj= */ null, /* z= */ !eligible)
}
+
+ private fun setIsVeiledResizeEnabled(enabled: Boolean) {
+ val deviceRestrictions =
+ DesktopModeStatus::class.java.getDeclaredField("IS_VEILED_RESIZE_ENABLED")
+ deviceRestrictions.isAccessible = true
+ deviceRestrictions.setBoolean(/* obj= */ null, /* z= */ enabled)
+ }
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
index 414c014..ffef0d1 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
@@ -16,6 +16,8 @@
package com.android.wm.shell.splitscreen;
+import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50;
+
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -58,6 +60,7 @@
doReturn(leash).when(out).getDividerLeash();
doReturn(bounds1).when(out).getTopLeftBounds();
doReturn(bounds2).when(out).getBottomRightBounds();
+ doReturn(SNAP_TO_2_50_50).when(out).calculateCurrentSnapPosition();
return out;
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
index 6f73db0..6773307 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
@@ -1316,9 +1316,11 @@
mTransactionPool, createTestDisplayController(), mMainExecutor,
mMainHandler, mAnimExecutor, mock(HomeTransitionObserver.class),
mock(FocusTransitionObserver.class));
+ final RecentTasksController mockRecentsTaskController = mock(RecentTasksController.class);
+ doReturn(mContext).when(mockRecentsTaskController).getContext();
final RecentsTransitionHandler recentsHandler =
new RecentsTransitionHandler(shellInit, mock(ShellTaskOrganizer.class), transitions,
- mock(RecentTasksController.class), mock(HomeTransitionObserver.class));
+ mockRecentsTaskController, mock(HomeTransitionObserver.class));
transitions.replaceDefaultHandlerForTest(mDefaultHandler);
shellInit.init();
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
index 16c7935..e89a122 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
@@ -321,6 +321,19 @@
}
@Test
+ fun testOnTaskInfoChanged_tilingNotified() {
+ val task = createTask(
+ windowingMode = WINDOWING_MODE_FREEFORM
+ )
+ setUpMockDecorationsForTasks(task)
+
+ onTaskOpening(task)
+ desktopModeWindowDecorViewModel.onTaskInfoChanged(task)
+
+ verify(mockTilingWindowDecoration).onTaskInfoChange(task)
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_IMMERSIVE_HANDLE_HIDING)
fun testInsetsStateChanged_notifiesAllDecorsInDisplay() {
val task1 = createTask(windowingMode = WINDOWING_MODE_FREEFORM, displayId = 1)
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
index af01623..a2927fa 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
@@ -24,7 +24,6 @@
import static android.view.WindowInsets.Type.mandatorySystemGestures;
import static android.view.WindowInsets.Type.statusBars;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlBuilder;
import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlTransaction;
@@ -51,7 +50,6 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.mockito.quality.Strictness.LENIENT;
import android.annotation.NonNull;
import android.app.ActivityManager;
@@ -79,13 +77,11 @@
import androidx.test.filters.SmallTest;
-import com.android.dx.mockito.inline.extended.StaticMockitoSession;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestRunningTaskInfoBuilder;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.desktopmode.DesktopModeEventLogger;
-import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.tests.R;
import com.android.wm.shell.windowdecor.additionalviewcontainer.AdditionalViewContainer;
import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHost;
@@ -564,12 +560,7 @@
}
@Test
- public void testRelayout_fluidResizeEnabled_freeformTask_setTaskSurfaceColor() {
- StaticMockitoSession mockitoSession = mockitoSession().mockStatic(
- DesktopModeStatus.class).strictness(
- LENIENT).startMocking();
- when(DesktopModeStatus.isVeiledResizeEnabled()).thenReturn(false);
-
+ public void testRelayout_shouldSetBackground_freeformTask_setTaskSurfaceColor() {
final Display defaultDisplay = mock(Display.class);
doReturn(defaultDisplay).when(mMockDisplayController)
.getDisplay(Display.DEFAULT_DISPLAY);
@@ -595,11 +586,10 @@
.build();
final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo);
+ mRelayoutParams.mShouldSetBackground = true;
windowDecor.relayout(taskInfo, true /* hasGlobalFocus */);
verify(mMockSurfaceControlStartT).setColor(mMockTaskSurface, new float[]{1.f, 1.f, 0.f});
-
- mockitoSession.finishMocking();
}
@Test
@@ -627,11 +617,7 @@
}
@Test
- public void testRelayout_fluidResizeEnabled_fullscreenTask_clearTaskSurfaceColor() {
- StaticMockitoSession mockitoSession = mockitoSession().mockStatic(
- DesktopModeStatus.class).strictness(LENIENT).startMocking();
- when(DesktopModeStatus.isVeiledResizeEnabled()).thenReturn(false);
-
+ public void testRelayout_shouldNotSetBackground_fullscreenTask_clearTaskSurfaceColor() {
final Display defaultDisplay = mock(Display.class);
doReturn(defaultDisplay).when(mMockDisplayController)
.getDisplay(Display.DEFAULT_DISPLAY);
@@ -655,12 +641,11 @@
.setWindowingMode(WINDOWING_MODE_FULLSCREEN)
.build();
final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo);
+ mRelayoutParams.mIsCaptionVisible = false;
windowDecor.relayout(taskInfo, true /* hasGlobalFocus */);
verify(mMockSurfaceControlStartT).unsetColor(mMockTaskSurface);
-
- mockitoSession.finishMocking();
}
@Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManagerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManagerTest.kt
index 121e0e9..8442056 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManagerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/DesktopTilingDividerWindowManagerTest.kt
@@ -81,6 +81,7 @@
transactionSupplierMock,
BOUNDS,
context,
+ /* isDarkMode= */ true
)
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/TilingDividerViewTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/TilingDividerViewTest.kt
index 9a9d05a..9a3d5d8 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/TilingDividerViewTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/tiling/TilingDividerViewTest.kt
@@ -60,7 +60,7 @@
tilingDividerView =
LayoutInflater.from(mContext).inflate(R.layout.tiling_split_divider, /* root= */ null)
as TilingDividerView
- tilingDividerView.setup(dividerMoveCallbackMock, DIVIDER_BOUNDS, HANDLE_SIZE)
+ tilingDividerView.setup(dividerMoveCallbackMock, DIVIDER_BOUNDS, HANDLE_SIZE, true)
tilingDividerView.handleY = 0..1500
}
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 38ac8ab..a892e88 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -141,6 +141,7 @@
"libsync",
"libui",
"aconfig_text_flags_c_lib",
+ "aconfig_view_accessibility_flags_c_lib",
"server_configurable_flags",
"libaconfig_storage_read_api_cc",
"libgraphicsenv",
diff --git a/libs/hwui/FeatureFlags.h b/libs/hwui/FeatureFlags.h
index 5f84f47..5ceb97c 100644
--- a/libs/hwui/FeatureFlags.h
+++ b/libs/hwui/FeatureFlags.h
@@ -18,6 +18,7 @@
#define ANDROID_HWUI_FEATURE_FLAGS_H
#ifdef __ANDROID__
+#include <android_view_accessibility.h>
#include <com_android_text_flags.h>
#endif // __ANDROID__
@@ -44,6 +45,19 @@
} // namespace text_feature
+namespace view_accessibility_flags {
+
+inline bool force_invert_color() {
+#ifdef __ANDROID__
+ static bool flag = android::view::accessibility::force_invert_color();
+ return flag;
+#else
+ return true;
+#endif // __ANDROID__
+}
+
+} // namespace view_accessibility_flags
+
} // namespace android
#endif // ANDROID_HWUI_FEATURE_FLAGS_H
diff --git a/libs/hwui/OWNERS b/libs/hwui/OWNERS
index 70d13ab..9c06fd5 100644
--- a/libs/hwui/OWNERS
+++ b/libs/hwui/OWNERS
@@ -3,7 +3,7 @@
alecmouri@google.com
djsollen@google.com
jreck@google.com
-njawad@google.com
+nscobie@google.com
sumir@google.com
# For text, e.g. Typeface, Font, Minikin, etc.
diff --git a/location/java/android/location/GnssAntennaInfo.java b/location/java/android/location/GnssAntennaInfo.java
index 3558dd5..39ce8a3 100644
--- a/location/java/android/location/GnssAntennaInfo.java
+++ b/location/java/android/location/GnssAntennaInfo.java
@@ -33,6 +33,8 @@
*
* <p> Antenna info parameters are measured for each specific device model by the device
* manufacturers and provided to the Android framework.
+ *
+ * <p> {@link GnssAntennaInfo} is returned per frequency band at the center frequency of the band.
*/
public final class GnssAntennaInfo implements Parcelable {
private final double mCarrierFrequencyMHz;
@@ -479,6 +481,7 @@
}
}
+ /** Returns the center frequency of the corresponding carrier frequency band. */
@FloatRange(from = 0.0f)
public double getCarrierFrequencyMHz() {
return mCarrierFrequencyMHz;
diff --git a/location/java/android/location/GnssMeasurement.java b/location/java/android/location/GnssMeasurement.java
index 200d4ef..6ae73a2 100644
--- a/location/java/android/location/GnssMeasurement.java
+++ b/location/java/android/location/GnssMeasurement.java
@@ -1484,6 +1484,10 @@
* in an open sky test - the important aspect of this output is that changes in this value are
* indicative of changes on input signal power in the frequency band for this measurement.
*
+ * <p> This field is part of the GnssMeasurement object so it is only reported when the GNSS
+ * measurement is reported. E.g., when a GNSS signal is too weak to be acquired, the AGC value
+ * is not reported.
+ *
* <p> The value is only available if {@link #hasAutomaticGainControlLevelDb()} is {@code true}
*
* @deprecated Use {@link GnssMeasurementsEvent#getGnssAutomaticGainControls()} instead.
diff --git a/location/java/android/location/GnssMeasurementsEvent.java b/location/java/android/location/GnssMeasurementsEvent.java
index 4fc2ee8..8cdfd01 100644
--- a/location/java/android/location/GnssMeasurementsEvent.java
+++ b/location/java/android/location/GnssMeasurementsEvent.java
@@ -158,6 +158,14 @@
/**
* Gets the collection of {@link GnssAutomaticGainControl} associated with the
* current event.
+ *
+ * <p>This field must be reported when the GNSS measurement engine is running, even when the
+ * GnssMeasurement or GnssClock fields are not reported yet. E.g., when a GNSS signal is too
+ * weak to be acquired, the AGC value must still be reported.
+ *
+ * <p>For devices that do not support this field, an empty collection is returned. In that case,
+ * please use {@link GnssMeasurement#hasAutomaticGainControlLevelDb()}
+ * and {@link GnssMeasuremen#getAutomaticGainControlLevelDb()}.
*/
@NonNull
public Collection<GnssAutomaticGainControl> getGnssAutomaticGainControls() {
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
index 8b6194f..fb89973 100644
--- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
+++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
@@ -28,7 +28,6 @@
import android.util.Log;
import com.android.internal.annotations.KeepForWeakReference;
-import com.android.internal.telephony.flags.Flags;
import java.util.concurrent.TimeUnit;
@@ -146,17 +145,12 @@
< emergencyExtensionMillis);
boolean isInEmergencyCallback = false;
boolean isInEmergencySmsMode = false;
- if (!Flags.enforceTelephonyFeatureMappingForPublicApis()) {
+ PackageManager pm = mContext.getPackageManager();
+ if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
isInEmergencyCallback = mTelephonyManager.getEmergencyCallbackMode();
+ }
+ if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
isInEmergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
- } else {
- PackageManager pm = mContext.getPackageManager();
- if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
- isInEmergencyCallback = mTelephonyManager.getEmergencyCallbackMode();
- }
- if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
- isInEmergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
- }
}
return mIsInEmergencyCall || isInEmergencyCallback || isInEmergencyExtension
|| isInEmergencySmsMode;
diff --git a/media/OWNERS b/media/OWNERS
index 5e39195..50995ea 100644
--- a/media/OWNERS
+++ b/media/OWNERS
@@ -18,5 +18,4 @@
include platform/frameworks/av:/media/janitors/media_solutions_OWNERS
# SEA/KIR/BVE
-jtinker@google.com
robertshih@google.com
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index b11a810..4e1d472 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -375,6 +375,9 @@
/**
* Extract DRM initialization data if it exists
*
+ * <p>If the media contains a PSSH box, only PSSH version 0 is supported. The result for media
+ * with other PSSH versions is undefined.
+ *
* @return DRM initialization data in the content, or {@code null}
* if no recognizable DRM format is found;
* @see DrmInitData
@@ -460,6 +463,10 @@
/**
* Get the PSSH info if present.
+ *
+ * <p>This method only supports version 0 PSSH boxes. The result for other versions is
+ * undefined.
+ *
* @return a map of uuid-to-bytes, with the uuid specifying
* the crypto scheme, and the bytes being the data specific to that scheme.
* This can be {@code null} if the source does not contain PSSH info.
diff --git a/media/java/android/media/flags/projection.aconfig b/media/java/android/media/flags/projection.aconfig
index 6d4f0b4..846448b 100644
--- a/media/java/android/media/flags/projection.aconfig
+++ b/media/java/android/media/flags/projection.aconfig
@@ -39,3 +39,12 @@
}
is_exported: true
}
+
+flag {
+ namespace: "media_projection"
+ name: "app_content_sharing"
+ description: "Enable apps to share some sub-surface"
+ bug: "379989921"
+ is_exported: true
+}
+
diff --git a/media/java/android/media/musicrecognition/OWNERS b/media/java/android/media/musicrecognition/OWNERS
index 037b048..820be00 100644
--- a/media/java/android/media/musicrecognition/OWNERS
+++ b/media/java/android/media/musicrecognition/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 830636
oni@google.com
-volnov@google.com
diff --git a/media/java/android/media/projection/MediaProjectionConfig.java b/media/java/android/media/projection/MediaProjectionConfig.java
index 30f34fe..598b534 100644
--- a/media/java/android/media/projection/MediaProjectionConfig.java
+++ b/media/java/android/media/projection/MediaProjectionConfig.java
@@ -27,7 +27,6 @@
import android.os.Parcelable;
import com.android.internal.util.AnnotationValidations;
-import com.android.internal.util.DataClass;
import java.lang.annotation.Retention;
@@ -35,36 +34,25 @@
* Configure the {@link MediaProjection} session requested from
* {@link MediaProjectionManager#createScreenCaptureIntent(MediaProjectionConfig)}.
*/
-@DataClass(
- genEqualsHashCode = true,
- genAidl = true,
- genSetters = false,
- genConstructor = false,
- genBuilder = false,
- genToString = false,
- genHiddenConstDefs = true,
- genHiddenGetters = true,
- genConstDefs = false
-)
public final class MediaProjectionConfig implements Parcelable {
/**
* The user, rather than the host app, determines which region of the display to capture.
+ *
* @hide
*/
public static final int CAPTURE_REGION_USER_CHOICE = 0;
/**
* The host app specifies a particular display to capture.
+ *
* @hide
*/
public static final int CAPTURE_REGION_FIXED_DISPLAY = 1;
/** @hide */
- @IntDef(prefix = "CAPTURE_REGION_", value = {
- CAPTURE_REGION_USER_CHOICE,
- CAPTURE_REGION_FIXED_DISPLAY
- })
+ @IntDef(prefix = "CAPTURE_REGION_", value = {CAPTURE_REGION_USER_CHOICE,
+ CAPTURE_REGION_FIXED_DISPLAY})
@Retention(SOURCE)
public @interface CaptureRegion {
}
@@ -72,7 +60,7 @@
/**
* The particular display to capture. Only used when {@link #getRegionToCapture()} is
* {@link #CAPTURE_REGION_FIXED_DISPLAY}; ignored otherwise.
- *
+ * <p>
* Only supports values of {@link android.view.Display#DEFAULT_DISPLAY}.
*/
@IntRange(from = DEFAULT_DISPLAY, to = DEFAULT_DISPLAY)
@@ -82,13 +70,7 @@
* The region to capture. Defaults to the user's choice.
*/
@CaptureRegion
- private int mRegionToCapture = CAPTURE_REGION_USER_CHOICE;
-
- /**
- * Default instance, with region set to the user's choice.
- */
- private MediaProjectionConfig() {
- }
+ private int mRegionToCapture;
/**
* Customized instance, with region set to the provided value.
@@ -129,51 +111,29 @@
*/
@NonNull
private static String captureRegionToString(int value) {
- switch (value) {
- case CAPTURE_REGION_USER_CHOICE:
- return "CAPTURE_REGION_USERS_CHOICE";
- case CAPTURE_REGION_FIXED_DISPLAY:
- return "CAPTURE_REGION_GIVEN_DISPLAY";
- default:
- return Integer.toHexString(value);
- }
+ return switch (value) {
+ case CAPTURE_REGION_USER_CHOICE -> "CAPTURE_REGION_USERS_CHOICE";
+ case CAPTURE_REGION_FIXED_DISPLAY -> "CAPTURE_REGION_GIVEN_DISPLAY";
+ default -> Integer.toHexString(value);
+ };
}
@Override
public String toString() {
- return "MediaProjectionConfig { "
- + "displayToCapture = " + mDisplayToCapture + ", "
- + "regionToCapture = " + captureRegionToString(mRegionToCapture)
- + " }";
+ return "MediaProjectionConfig { " + "displayToCapture = " + mDisplayToCapture + ", "
+ + "regionToCapture = " + captureRegionToString(mRegionToCapture) + " }";
}
-
-
-
- // Code below generated by codegen v1.0.23.
- //
- // DO NOT MODIFY!
- // CHECKSTYLE:OFF Generated code
- //
- // To regenerate run:
- // $ codegen $ANDROID_BUILD_TOP/frameworks/base/media/java/android/media/projection/MediaProjectionConfig.java
- //
- // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
- // Settings > Editor > Code Style > Formatter Control
- //@formatter:off
-
-
/**
* The particular display to capture. Only used when {@link #getRegionToCapture()} is
* {@link #CAPTURE_REGION_FIXED_DISPLAY}; ignored otherwise.
- *
+ * <p>
* Only supports values of {@link android.view.Display#DEFAULT_DISPLAY}.
*
* @hide
*/
- @DataClass.Generated.Member
- public @IntRange(from = DEFAULT_DISPLAY, to = DEFAULT_DISPLAY) int getDisplayToCapture() {
+ public int getDisplayToCapture() {
return mDisplayToCapture;
}
@@ -182,34 +142,21 @@
*
* @hide
*/
- @DataClass.Generated.Member
public @CaptureRegion int getRegionToCapture() {
return mRegionToCapture;
}
@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(MediaProjectionConfig other) { ... }
- // boolean fieldNameEquals(FieldType otherValue) { ... }
-
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
- @SuppressWarnings("unchecked")
MediaProjectionConfig that = (MediaProjectionConfig) o;
- //noinspection PointlessBooleanExpression
- return true
- && mDisplayToCapture == that.mDisplayToCapture
+ return mDisplayToCapture == that.mDisplayToCapture
&& mRegionToCapture == that.mRegionToCapture;
}
@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 + mDisplayToCapture;
_hash = 31 * _hash + mRegionToCapture;
@@ -217,65 +164,36 @@
}
@Override
- @DataClass.Generated.Member
public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
- // You can override field parcelling by defining methods like:
- // void parcelFieldName(Parcel dest, int flags) { ... }
-
dest.writeInt(mDisplayToCapture);
dest.writeInt(mRegionToCapture);
}
@Override
- @DataClass.Generated.Member
- public int describeContents() { return 0; }
+ public int describeContents() {
+ return 0;
+ }
/** @hide */
- @SuppressWarnings({"unchecked", "RedundantCast"})
- @DataClass.Generated.Member
/* package-private */ MediaProjectionConfig(@NonNull android.os.Parcel in) {
- // You can override field unparcelling by defining methods like:
- // static FieldType unparcelFieldName(Parcel in) { ... }
-
int displayToCapture = in.readInt();
int regionToCapture = in.readInt();
- this.mDisplayToCapture = displayToCapture;
- AnnotationValidations.validate(
- IntRange.class, null, mDisplayToCapture,
- "from", DEFAULT_DISPLAY,
- "to", DEFAULT_DISPLAY);
- this.mRegionToCapture = regionToCapture;
- AnnotationValidations.validate(
- CaptureRegion.class, null, mRegionToCapture);
-
- // onConstructed(); // You can define this method to get a callback
+ mDisplayToCapture = displayToCapture;
+ mRegionToCapture = regionToCapture;
+ AnnotationValidations.validate(CaptureRegion.class, null, mRegionToCapture);
}
- @DataClass.Generated.Member
- public static final @NonNull Parcelable.Creator<MediaProjectionConfig> CREATOR
- = new Parcelable.Creator<MediaProjectionConfig>() {
- @Override
- public MediaProjectionConfig[] newArray(int size) {
- return new MediaProjectionConfig[size];
- }
+ public static final @NonNull Parcelable.Creator<MediaProjectionConfig> CREATOR =
+ new Parcelable.Creator<>() {
+ @Override
+ public MediaProjectionConfig[] newArray(int size) {
+ return new MediaProjectionConfig[size];
+ }
- @Override
- public MediaProjectionConfig createFromParcel(@NonNull android.os.Parcel in) {
- return new MediaProjectionConfig(in);
- }
- };
-
- @DataClass.Generated(
- time = 1673548980960L,
- codegenVersion = "1.0.23",
- sourceFile = "frameworks/base/media/java/android/media/projection/MediaProjectionConfig.java",
- inputSignatures = "public static final int CAPTURE_REGION_USER_CHOICE\npublic static final int CAPTURE_REGION_FIXED_DISPLAY\nprivate @android.annotation.IntRange int mDisplayToCapture\nprivate @android.media.projection.MediaProjectionConfig.CaptureRegion int mRegionToCapture\npublic static @android.annotation.NonNull android.media.projection.MediaProjectionConfig createConfigForDefaultDisplay()\npublic static @android.annotation.NonNull android.media.projection.MediaProjectionConfig createConfigForUserChoice()\nprivate static @android.annotation.NonNull java.lang.String captureRegionToString(int)\npublic @java.lang.Override java.lang.String toString()\nclass MediaProjectionConfig extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genAidl=true, genSetters=false, genConstructor=false, genBuilder=false, genToString=false, genHiddenConstDefs=true, genHiddenGetters=true, genConstDefs=false)")
- @Deprecated
- private void __metadata() {}
-
-
- //@formatter:on
- // End of generated code
-
+ @Override
+ public MediaProjectionConfig createFromParcel(@NonNull android.os.Parcel in) {
+ return new MediaProjectionConfig(in);
+ }
+ };
}
diff --git a/media/jni/OWNERS b/media/jni/OWNERS
index fdddf13..84618a3 100644
--- a/media/jni/OWNERS
+++ b/media/jni/OWNERS
@@ -1,5 +1,5 @@
# extra for MTP related files
-per-file android_mtp_*.cpp=aprasath@google.com,anothermark@google.com,kumarashishg@google.com,sarup@google.com,jsharkey@android.com,jameswei@google.com,rmojumder@google.com
+per-file android_mtp_*.cpp=aprasath@google.com,anothermark@google.com,sarup@google.com,jsharkey@android.com,jameswei@google.com,rmojumder@google.com
# extra for TV related files
per-file android_media_tv_*=hgchen@google.com,quxiangfang@google.com
diff --git a/opengl/java/android/opengl/OWNERS b/opengl/java/android/opengl/OWNERS
index e340bc6..4ec9e29 100644
--- a/opengl/java/android/opengl/OWNERS
+++ b/opengl/java/android/opengl/OWNERS
@@ -3,4 +3,3 @@
sumir@google.com
prahladk@google.com
ianelliott@google.com
-lpy@google.com
diff --git a/packages/CompanionDeviceManager/res/values-af/strings.xml b/packages/CompanionDeviceManager/res/values-af/strings.xml
index 9476dc5..b802d0f 100644
--- a/packages/CompanionDeviceManager/res/values-af/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-af/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Moenie toelaat nie"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Kanselleer"</string>
<string name="consent_back" msgid="2560683030046918882">"Terug"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Vou <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> uit"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Vou <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> in"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Gee programme op <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> dieselfde toestemmings as op <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-am/strings.xml b/packages/CompanionDeviceManager/res/values-am/strings.xml
index e53efce..d4d0b07 100644
--- a/packages/CompanionDeviceManager/res/values-am/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-am/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"አትፍቀድ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ይቅር"</string>
<string name="consent_back" msgid="2560683030046918882">"ተመለስ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ን ዘርጋ"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ን ሰብስብ"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"በ<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ላይ ላሉ መተግበሪያዎች በ<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ላይ ካሉት ጋር ተመሳሳይ ፈቃዶች ይሰጣቸው?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ar/strings.xml b/packages/CompanionDeviceManager/res/values-ar/strings.xml
index 5b6ea65..f4e1721 100644
--- a/packages/CompanionDeviceManager/res/values-ar/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ar/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"عدم السماح"</string>
<string name="consent_cancel" msgid="5655005528379285841">"إلغاء"</string>
<string name="consent_back" msgid="2560683030046918882">"رجوع"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"توسيع <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"تصغير <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"هل تريد منح التطبيقات على <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> نفس الأذونات على <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>؟"</string>
diff --git a/packages/CompanionDeviceManager/res/values-as/strings.xml b/packages/CompanionDeviceManager/res/values-as/strings.xml
index 9001a2c..322d422 100644
--- a/packages/CompanionDeviceManager/res/values-as/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-as/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"অনুমতি নিদিব"</string>
<string name="consent_cancel" msgid="5655005528379285841">"বাতিল কৰক"</string>
<string name="consent_back" msgid="2560683030046918882">"উভতি যাওক"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> বিস্তাৰ কৰক"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> সংকোচন কৰক"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"এপ্সমূহক <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>ত দিয়াৰ দৰে <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>তো একে অনুমতি প্ৰদান কৰিবনে?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-az/strings.xml b/packages/CompanionDeviceManager/res/values-az/strings.xml
index 2ffe84e..9f3ab2bd 100644
--- a/packages/CompanionDeviceManager/res/values-az/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-az/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"İcazə verməyin"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Ləğv edin"</string>
<string name="consent_back" msgid="2560683030046918882">"Geriyə"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Genişləndirin: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Yığcamlaşdırın: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> cihazındakı tətbiqlərə <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> cihazındakılarla eyni icazələr verilsin?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
index dfe3cbe..d28b9b2 100644
--- a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ne dozvoli"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Otkaži"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Proširi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Skupi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Aplikcijama na uređaju <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> dajete sve dozvole kao na uređaju <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-be/strings.xml b/packages/CompanionDeviceManager/res/values-be/strings.xml
index 6e5e1b5..14878c1 100644
--- a/packages/CompanionDeviceManager/res/values-be/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-be/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Не дазваляць"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Скасаваць"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Разгарнуць <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Згарнуць <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Даць праграмам на прыладзе <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> такія самыя дазволы, што і на прыладзе <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bg/strings.xml b/packages/CompanionDeviceManager/res/values-bg/strings.xml
index 9c3b94e..6e5b323 100644
--- a/packages/CompanionDeviceManager/res/values-bg/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bg/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Забраняване"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Отказ"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Разгъване на <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Свиване на <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Искате ли да дадете на приложенията на <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> същите разрешения както на <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bn/strings.xml b/packages/CompanionDeviceManager/res/values-bn/strings.xml
index 88db2a5..214dc71 100644
--- a/packages/CompanionDeviceManager/res/values-bn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bn/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"অনুমতি দেবেন না"</string>
<string name="consent_cancel" msgid="5655005528379285841">"বাতিল করুন"</string>
<string name="consent_back" msgid="2560683030046918882">"ফিরুন"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> বড় করুন"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> আড়াল করুন"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>-এ যে অনুমতি দেওয়া আছে <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>-এও সেই একই অনুমতি দিতে চান?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bs/strings.xml b/packages/CompanionDeviceManager/res/values-bs/strings.xml
index bc74b1a..b23f600 100644
--- a/packages/CompanionDeviceManager/res/values-bs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bs/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nemoj dozvoliti"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Otkaži"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Proširivanje stavke <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Sužavanje stavke <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dati aplikacijama na uređaju <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ista odobrenja kao na uređaju <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ca/strings.xml b/packages/CompanionDeviceManager/res/values-ca/strings.xml
index 8c0b117..21f3871 100644
--- a/packages/CompanionDeviceManager/res/values-ca/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ca/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"No permetis"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancel·la"</string>
<string name="consent_back" msgid="2560683030046918882">"Enrere"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Desplega <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Replega <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vols concedir a les aplicacions del dispositiu <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> els mateixos permisos que tenen a <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-cs/strings.xml b/packages/CompanionDeviceManager/res/values-cs/strings.xml
index cde31af..cd89130 100644
--- a/packages/CompanionDeviceManager/res/values-cs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-cs/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nepovolovat"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Zrušit"</string>
<string name="consent_back" msgid="2560683030046918882">"Zpět"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Rozbalit sekci <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Sbalit sekci <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Udělit aplikacím v zařízení <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> stejné oprávnění, jako mají v zařízení <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml
index 1062af8..6dc34e7 100644
--- a/packages/CompanionDeviceManager/res/values-da/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-da/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Tillad ikke"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annuller"</string>
<string name="consent_back" msgid="2560683030046918882">"Tilbage"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Udvid <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Skjul <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vil du give apps på <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> de samme tilladelser som på <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml
index 6f8a902..4dc2929 100644
--- a/packages/CompanionDeviceManager/res/values-de/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-de/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nicht zulassen"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Abbrechen"</string>
<string name="consent_back" msgid="2560683030046918882">"Zurück"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> maximieren"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> minimieren"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Apps auf <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> die gleichen Berechtigungen geben wie auf <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml
index c90bf21..1dc00dc 100644
--- a/packages/CompanionDeviceManager/res/values-el/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-el/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Να μην επιτρέπεται"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Ακύρωση"</string>
<string name="consent_back" msgid="2560683030046918882">"Πίσω"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Ανάπτυξη <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Σύμπτυξη <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Παραχώρηση των ίδιων αδειών στις εφαρμογές στη συσκευή <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> όπως στη συσκευή <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>;"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
index 8590e9f..bbd81bf 100644
--- a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> the same permissions as on <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
index 041966e..8d73380 100644
--- a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> the same permissions as on <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
index 8590e9f..bbd81bf 100644
--- a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> the same permissions as on <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
index 8590e9f..bbd81bf 100644
--- a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> the same permissions as on <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
index 88ae3ed..50f7654 100644
--- a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expandir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"¿Dar a las apps de <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> los mismos permisos que tienen en <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es/strings.xml b/packages/CompanionDeviceManager/res/values-es/strings.xml
index a309d7c..f8e2c74 100644
--- a/packages/CompanionDeviceManager/res/values-es/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Desplegar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"¿Dar a las aplicaciones de <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> los mismos permisos que <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-et/strings.xml b/packages/CompanionDeviceManager/res/values-et/strings.xml
index 91d1b69..0f390e1 100644
--- a/packages/CompanionDeviceManager/res/values-et/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-et/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ära luba"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Tühista"</string>
<string name="consent_back" msgid="2560683030046918882">"Tagasi"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Laienda: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Ahenda: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Kas anda rakendustele seadmes <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> samad load, mis seadmes <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-eu/strings.xml b/packages/CompanionDeviceManager/res/values-eu/strings.xml
index c52c2b9..1c7f1f3 100644
--- a/packages/CompanionDeviceManager/res/values-eu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-eu/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ez eman baimenik"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Utzi"</string>
<string name="consent_back" msgid="2560683030046918882">"Atzera"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Zabaldu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Tolestu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> gailuan dituzten baimen berberak eman nahi dizkiezu <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> gailuko aplikazioei?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fa/strings.xml b/packages/CompanionDeviceManager/res/values-fa/strings.xml
index 048bf3e..fb36c46 100644
--- a/packages/CompanionDeviceManager/res/values-fa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fa/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"اجازه ندادن"</string>
<string name="consent_cancel" msgid="5655005528379285841">"لغو"</string>
<string name="consent_back" msgid="2560683030046918882">"برگشتن"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"ازهم بازکردن <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"جمع کردن <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"به برنامههای موجود در <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> همان اجازههای <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> داده شود؟"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fi/strings.xml b/packages/CompanionDeviceManager/res/values-fi/strings.xml
index 3f4a9d3..ff6cae1 100644
--- a/packages/CompanionDeviceManager/res/values-fi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fi/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Älä salli"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Peruuta"</string>
<string name="consent_back" msgid="2560683030046918882">"Takaisin"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Laajenna <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Tiivistä <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Anna laitteen <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> sovelluksille samat luvat kuin laitteella <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
index 52b136c..4d7de76 100644
--- a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annuler"</string>
<string name="consent_back" msgid="2560683030046918882">"Retour"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Développer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Réduire <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Accorder aux applis sur <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> les autorisations déjà accordées sur <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr/strings.xml b/packages/CompanionDeviceManager/res/values-fr/strings.xml
index e7741c4..d4c12fb 100644
--- a/packages/CompanionDeviceManager/res/values-fr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annuler"</string>
<string name="consent_back" msgid="2560683030046918882">"Retour"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Développer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Réduire <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Accorder les mêmes autorisations aux applis sur <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> que sur <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gl/strings.xml b/packages/CompanionDeviceManager/res/values-gl/strings.xml
index bf58761..999ab97 100644
--- a/packages/CompanionDeviceManager/res/values-gl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gl/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Non permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Despregar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Queres darlles ás aplicacións de <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> os mesmos permisos que teñen as de <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gu/strings.xml b/packages/CompanionDeviceManager/res/values-gu/strings.xml
index 9df54da..51d07c9 100644
--- a/packages/CompanionDeviceManager/res/values-gu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gu/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"મંજૂરી આપશો નહીં"</string>
<string name="consent_cancel" msgid="5655005528379285841">"રદ કરો"</string>
<string name="consent_back" msgid="2560683030046918882">"પાછળ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ને મોટું કરો"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ને નાનું કરો"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> પરની ઍપને <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> પર છે તે જ પરવાનગીઓ આપીએ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hi/strings.xml b/packages/CompanionDeviceManager/res/values-hi/strings.xml
index fe04cbd..f7086c6 100644
--- a/packages/CompanionDeviceManager/res/values-hi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hi/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"अनुमति न दें"</string>
<string name="consent_cancel" msgid="5655005528379285841">"रद्द करें"</string>
<string name="consent_back" msgid="2560683030046918882">"वापस जाएं"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> को बड़ा करें"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> को छोटा करें"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"क्या <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> पर ऐप्लिकेशन को वही अनुमतियां देनी हैं जो <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> पर दी हैं?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hr/strings.xml b/packages/CompanionDeviceManager/res/values-hr/strings.xml
index c5ed386..04872e5 100644
--- a/packages/CompanionDeviceManager/res/values-hr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hr/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nemoj dopustiti"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Odustani"</string>
<string name="consent_back" msgid="2560683030046918882">"Natrag"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Proširi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Sažmi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dati jednaka dopuštenja aplikacijama na uređaju <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> kao i na uređaju <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hu/strings.xml b/packages/CompanionDeviceManager/res/values-hu/strings.xml
index 9fb92c3..5d3b313 100644
--- a/packages/CompanionDeviceManager/res/values-hu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hu/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Tiltás"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Mégse"</string>
<string name="consent_back" msgid="2560683030046918882">"Vissza"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> kibontása"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> összecsukása"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ugyanolyan engedélyeket ad a(z) <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> eszközön található alkalmazásoknak, mint a(z) <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> eszköz esetén?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hy/strings.xml b/packages/CompanionDeviceManager/res/values-hy/strings.xml
index b398b94..e7c7139 100644
--- a/packages/CompanionDeviceManager/res/values-hy/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hy/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Չթույլատրել"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Չեղարկել"</string>
<string name="consent_back" msgid="2560683030046918882">"Հետ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Ծավալել «<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>» բաժինը"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Ծալել «<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>» բաժինը"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>-ում հավելվածներին տա՞լ նույն թույլտվությունները, ինչ <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>-ում"</string>
diff --git a/packages/CompanionDeviceManager/res/values-in/strings.xml b/packages/CompanionDeviceManager/res/values-in/strings.xml
index 9c9144c..f582205 100644
--- a/packages/CompanionDeviceManager/res/values-in/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-in/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Jangan izinkan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Batal"</string>
<string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Luaskan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Ciutkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Berikan aplikasi di <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> izin yang sama seperti di <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-is/strings.xml b/packages/CompanionDeviceManager/res/values-is/strings.xml
index 1247aae..b66133c 100644
--- a/packages/CompanionDeviceManager/res/values-is/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-is/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ekki leyfa"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Hætta við"</string>
<string name="consent_back" msgid="2560683030046918882">"Til baka"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Stækka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Minnka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Veita forritum í <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> sömu heimildir og í <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-it/strings.xml b/packages/CompanionDeviceManager/res/values-it/strings.xml
index 36647ad..3496718 100644
--- a/packages/CompanionDeviceManager/res/values-it/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-it/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Non consentire"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annulla"</string>
<string name="consent_back" msgid="2560683030046918882">"Indietro"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Espandi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Comprimi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vuoi dare alle app su <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> le stesse autorizzazioni che hai dato su <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-iw/strings.xml b/packages/CompanionDeviceManager/res/values-iw/strings.xml
index f08ee6e..626ae7a 100644
--- a/packages/CompanionDeviceManager/res/values-iw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-iw/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"אין אישור"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ביטול"</string>
<string name="consent_back" msgid="2560683030046918882">"חזרה"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"הרחבה של <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"כיווץ של <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"האם לתת לאפליקציות ב-<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> את אותן הרשאות כמו ב-<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ja/strings.xml b/packages/CompanionDeviceManager/res/values-ja/strings.xml
index 0ad41cd..a8dc756 100644
--- a/packages/CompanionDeviceManager/res/values-ja/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ja/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"許可しない"</string>
<string name="consent_cancel" msgid="5655005528379285841">"キャンセル"</string>
<string name="consent_back" msgid="2560683030046918882">"戻る"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>を開く"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>を閉じる"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> のアプリに <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> の場合と同じ権限を付与しますか?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ka/strings.xml b/packages/CompanionDeviceManager/res/values-ka/strings.xml
index 3fb5519..97f3087 100644
--- a/packages/CompanionDeviceManager/res/values-ka/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ka/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"არ დაიშვას"</string>
<string name="consent_cancel" msgid="5655005528379285841">"გაუქმება"</string>
<string name="consent_back" msgid="2560683030046918882">"უკან"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-ის გაფართოება"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-ის ჩაკეცვა"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"გსურთ აპებს <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>-ზე იგივე ნებართვები მიანიჭოთ, როგორიც აქვს <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>-ზე?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kk/strings.xml b/packages/CompanionDeviceManager/res/values-kk/strings.xml
index 06b82ec..4d77c6c 100644
--- a/packages/CompanionDeviceManager/res/values-kk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kk/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Рұқсат бермеу"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Бас тарту"</string>
<string name="consent_back" msgid="2560683030046918882">"Артқа"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"\"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\" панелін жаю"</string>
<string name="permission_collapse" msgid="3320833884220844084">"\"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\" панелін жию"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> құрылғысындағы қолданбаларға <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> құрылғысындағыдай рұқсаттар берілсін бе?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-km/strings.xml b/packages/CompanionDeviceManager/res/values-km/strings.xml
index 3f6eacf..9047b05 100644
--- a/packages/CompanionDeviceManager/res/values-km/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-km/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"មិនអនុញ្ញាត"</string>
<string name="consent_cancel" msgid="5655005528379285841">"បោះបង់"</string>
<string name="consent_back" msgid="2560683030046918882">"ថយក្រោយ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"ពង្រីក <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"បង្រួម <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ផ្ដល់ការអនុញ្ញាតឱ្យកម្មវិធីនៅលើ <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ដូចនៅលើ <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ឬ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kn/strings.xml b/packages/CompanionDeviceManager/res/values-kn/strings.xml
index 269d729..751ac1f 100644
--- a/packages/CompanionDeviceManager/res/values-kn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kn/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ಅನುಮತಿಸಬೇಡಿ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ರದ್ದುಮಾಡಿ"</string>
<string name="consent_back" msgid="2560683030046918882">"ಹಿಂದೆ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ಅನ್ನು ವಿಸ್ತರಿಸಿ"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ಅನ್ನು ಕುಗ್ಗಿಸಿ"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"</strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ನಲ್ಲಿನ ಅನುಮತಿಗಳನ್ನೇ </strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ನಲ್ಲಿನ ಆ್ಯಪ್ಗಳಿಗೆ ನೀಡಬೇಕೆ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ko/strings.xml b/packages/CompanionDeviceManager/res/values-ko/strings.xml
index 0b4274e..a7a5dc1 100644
--- a/packages/CompanionDeviceManager/res/values-ko/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ko/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"허용 안함"</string>
<string name="consent_cancel" msgid="5655005528379285841">"취소"</string>
<string name="consent_back" msgid="2560683030046918882">"뒤로"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> 펼치기"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> 접기"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>에 설치된 앱에 <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>에 설치된 앱과 동일한 권한을 부여하시겠습니까?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ky/strings.xml b/packages/CompanionDeviceManager/res/values-ky/strings.xml
index a7b4f40..991fc9f 100644
--- a/packages/CompanionDeviceManager/res/values-ky/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ky/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Уруксат берилбесин"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Жок"</string>
<string name="consent_back" msgid="2560683030046918882">"Артка"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> жайып көрсөтүү"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> жыйыштыруу"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> түзмөгүнө да <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> түзмөгүнө берилген уруксаттар берилсинби?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lo/strings.xml b/packages/CompanionDeviceManager/res/values-lo/strings.xml
index d7f777d..91399b6 100644
--- a/packages/CompanionDeviceManager/res/values-lo/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lo/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ບໍ່ອະນຸຍາດ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ຍົກເລີກ"</string>
<string name="consent_back" msgid="2560683030046918882">"ກັບຄືນ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"ຂະຫຍາຍ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"ຫຍໍ້ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ລົງ"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ໃຫ້ການອະນຸຍາດແອັບຢູ່ <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ເປັນການອະນຸຍາດດຽວກັນກັບຢູ່ <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ບໍ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lt/strings.xml b/packages/CompanionDeviceManager/res/values-lt/strings.xml
index 5dd1d06..a3ac47b 100644
--- a/packages/CompanionDeviceManager/res/values-lt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lt/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Neleisti"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Atšaukti"</string>
<string name="consent_back" msgid="2560683030046918882">"Atgal"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Išskleisti „<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>“"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Sutraukti „<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>“"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Suteikti <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> esančioms programoms tuos pačius leidimus kaip <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> esančioms programoms?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lv/strings.xml b/packages/CompanionDeviceManager/res/values-lv/strings.xml
index 40de5d1..35c7481 100644
--- a/packages/CompanionDeviceManager/res/values-lv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lv/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Neatļaut"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Atcelt"</string>
<string name="consent_back" msgid="2560683030046918882">"Atpakaļ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Izvērst: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Sakļaut: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vai lietotnēm ierīcē <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> piešķirt tādas pašas atļaujas kā ierīcē <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mk/strings.xml b/packages/CompanionDeviceManager/res/values-mk/strings.xml
index db1c06a..1eaf2d2 100644
--- a/packages/CompanionDeviceManager/res/values-mk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mk/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Не дозволувај"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Откажи"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Прошири <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Собери <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Дасе дадат исти дозволи на апликациите на <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> како на <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ml/strings.xml b/packages/CompanionDeviceManager/res/values-ml/strings.xml
index de50fc7..52fcb1f 100644
--- a/packages/CompanionDeviceManager/res/values-ml/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ml/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"അനുവദിക്കരുത്"</string>
<string name="consent_cancel" msgid="5655005528379285841">"റദ്ദാക്കുക"</string>
<string name="consent_back" msgid="2560683030046918882">"മടങ്ങുക"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> വികസിപ്പിക്കുക"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ചുരുക്കുക"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> എന്നതിലെ അതേ അനുമതികൾ <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> എന്നതിലെ ആപ്പുകൾക്ക് നൽകണോ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mn/strings.xml b/packages/CompanionDeviceManager/res/values-mn/strings.xml
index e76f688..5faf241 100644
--- a/packages/CompanionDeviceManager/res/values-mn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mn/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Бүү зөвшөөр"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Цуцлах"</string>
<string name="consent_back" msgid="2560683030046918882">"Буцах"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-г дэлгэх"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-г хураах"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> дээрх аппуудад <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> дээрхтэй адил зөвшөөрөл өгөх үү?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml
index 03a5271..94e49fe 100644
--- a/packages/CompanionDeviceManager/res/values-mr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"अनुमती देऊ नका"</string>
<string name="consent_cancel" msgid="5655005528379285841">"रद्द करा"</string>
<string name="consent_back" msgid="2560683030046918882">"मागे जा"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> चा विस्तार करा"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> कोलॅप्स करा"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> वरील अॅप्सना <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> प्रमाणेच परवानग्या द्यायच्या आहेत का?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ms/strings.xml b/packages/CompanionDeviceManager/res/values-ms/strings.xml
index ca41c6f..8b1170b 100644
--- a/packages/CompanionDeviceManager/res/values-ms/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ms/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Jangan benarkan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Batal"</string>
<string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Kembangkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Kuncupkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Beri apl pada <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> kebenaran yang sama seperti pada <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-my/strings.xml b/packages/CompanionDeviceManager/res/values-my/strings.xml
index f03048b..faca3e3 100644
--- a/packages/CompanionDeviceManager/res/values-my/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-my/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ခွင့်မပြုပါ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"မလုပ်တော့"</string>
<string name="consent_back" msgid="2560683030046918882">"နောက်သို့"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ကို ပိုပြရန်"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ကို လျှော့ပြရန်"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"အက်ပ်များကို <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> တွင်ပေးထားသည့် ခွင့်ပြုချက်များအတိုင်း <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> တွင် ပေးမလား။"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nb/strings.xml b/packages/CompanionDeviceManager/res/values-nb/strings.xml
index 6008299..4188951 100644
--- a/packages/CompanionDeviceManager/res/values-nb/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nb/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ikke tillat"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Avbryt"</string>
<string name="consent_back" msgid="2560683030046918882">"Tilbake"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Vis <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Skjul <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vil du gi apper på <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> de samme tillatelsene som på <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ne/strings.xml b/packages/CompanionDeviceManager/res/values-ne/strings.xml
index dd8b1ae..2cd4fef 100644
--- a/packages/CompanionDeviceManager/res/values-ne/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ne/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"अनुमति नदिनुहोस्"</string>
<string name="consent_cancel" msgid="5655005528379285841">"रद्द गर्नुहोस्"</string>
<string name="consent_back" msgid="2560683030046918882">"पछाडि"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> एक्स्पान्ड गर्नुहोस्"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> कोल्याप्स गर्नुहोस्"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> मा भएका एपहरूलाई पनि <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> मा दिइएकै अनुमति दिने हो?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nl/strings.xml b/packages/CompanionDeviceManager/res/values-nl/strings.xml
index 22feb9d..2f0fc9a 100644
--- a/packages/CompanionDeviceManager/res/values-nl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nl/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Niet toestaan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annuleren"</string>
<string name="consent_back" msgid="2560683030046918882">"Terug"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> uitvouwen"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> samenvouwen"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Apps op de <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> dezelfde rechten geven als op de <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-or/strings.xml b/packages/CompanionDeviceManager/res/values-or/strings.xml
index 96c6207..8298a5b 100644
--- a/packages/CompanionDeviceManager/res/values-or/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-or/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="consent_back" msgid="2560683030046918882">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>କୁ ବିସ୍ତାର କରନ୍ତୁ"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>କୁ ସଙ୍କୁଚିତ କରନ୍ତୁ"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>ପରି <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>ରେ ଥିବା ଆପ୍ସକୁ ସମାନ ଅନୁମତିଗୁଡ଼ିକ ଦେବେ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pa/strings.xml b/packages/CompanionDeviceManager/res/values-pa/strings.xml
index c2db62f..fe13c00 100644
--- a/packages/CompanionDeviceManager/res/values-pa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pa/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ਆਗਿਆ ਨਾ ਦਿਓ"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ਰੱਦ ਕਰੋ"</string>
<string name="consent_back" msgid="2560683030046918882">"ਪਿੱਛੇ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ਨੂੰ ਸਮੇਟੋ"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ਕੀ <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> \'ਤੇ ਮੌਜੂਦ ਐਪਾਂ ਨੂੰ <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> \'ਤੇ ਮੌਜੂਦ ਐਪਾਂ ਵਾਂਗ ਇਜਾਜ਼ਤਾਂ ਦੇਣੀਆਂ ਹਨ?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pl/strings.xml b/packages/CompanionDeviceManager/res/values-pl/strings.xml
index 62a0d40..1599f3f 100644
--- a/packages/CompanionDeviceManager/res/values-pl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pl/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nie zezwalaj"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Anuluj"</string>
<string name="consent_back" msgid="2560683030046918882">"Wstecz"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Rozwiń sekcję <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Zwiń sekcję <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Czy aplikacjom na urządzeniu <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> przyznać te same uprawnienia co na urządzeniu <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
index 81c50c1..85c23ea7 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Abrir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Fechar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar aos apps no dispositivo <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> as mesmas permissões do dispositivo <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
index bec6f11..bee8e91 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Expandir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Reduzir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar às apps no dispositivo <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> as mesmas autorizações de <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt/strings.xml b/packages/CompanionDeviceManager/res/values-pt/strings.xml
index 81c50c1..85c23ea7 100644
--- a/packages/CompanionDeviceManager/res/values-pt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Abrir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Fechar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar aos apps no dispositivo <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> as mesmas permissões do dispositivo <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ro/strings.xml b/packages/CompanionDeviceManager/res/values-ro/strings.xml
index 40ae72e..6820d5b 100644
--- a/packages/CompanionDeviceManager/res/values-ro/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ro/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nu permite"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Anulează"</string>
<string name="consent_back" msgid="2560683030046918882">"Înapoi"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Extinde <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Restrânge <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Acorzi aplicațiilor de pe <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> aceleași permisiuni ca pe <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ru/strings.xml b/packages/CompanionDeviceManager/res/values-ru/strings.xml
index a5b5b59..3213a2f 100644
--- a/packages/CompanionDeviceManager/res/values-ru/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ru/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Запретить"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Отмена"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Разворачивать список \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\"."</string>
<string name="permission_collapse" msgid="3320833884220844084">"Сворачивать список \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\"."</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Предоставить приложениям на устройстве <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> те же разрешения, что на устройстве <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-si/strings.xml b/packages/CompanionDeviceManager/res/values-si/strings.xml
index cc04f4b..7fd6611 100644
--- a/packages/CompanionDeviceManager/res/values-si/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-si/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ඉඩ නොදෙන්න"</string>
<string name="consent_cancel" msgid="5655005528379285841">"අවලංගු කරන්න"</string>
<string name="consent_back" msgid="2560683030046918882">"ආපසු"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> විදහන්න"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> හකුළන්න"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> the හි යෙදුම්වලට <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> හි අවසරම දෙන්නද?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sk/strings.xml b/packages/CompanionDeviceManager/res/values-sk/strings.xml
index f46252e..5194f21 100644
--- a/packages/CompanionDeviceManager/res/values-sk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sk/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Nepovoliť"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Zrušiť"</string>
<string name="consent_back" msgid="2560683030046918882">"Späť"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Rozbaliť sekciu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Zbaliť sekciu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Chcete udeliť aplikáciám v zariadení <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> rovnaké povolenia ako v zariadení <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sl/strings.xml b/packages/CompanionDeviceManager/res/values-sl/strings.xml
index 0696c98..2200220 100644
--- a/packages/CompanionDeviceManager/res/values-sl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sl/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ne dovoli"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Prekliči"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazaj"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Razširi dovoljenje »<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>«"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Strni dovoljenje »<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>«"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ali želite aplikacijam v napravi <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> odobriti enaka dovoljenja kot v napravi <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sq/strings.xml b/packages/CompanionDeviceManager/res/values-sq/strings.xml
index 02f88ce..f683dd9 100644
--- a/packages/CompanionDeviceManager/res/values-sq/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sq/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Mos lejo"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Anulo"</string>
<string name="consent_back" msgid="2560683030046918882">"Pas"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Zgjero: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Palos: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"T\'i jepen aplikacioneve në <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> të njëjtat leje si në <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sr/strings.xml b/packages/CompanionDeviceManager/res/values-sr/strings.xml
index 5f7e53d..d568009 100644
--- a/packages/CompanionDeviceManager/res/values-sr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sr/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Не дозволи"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Откажи"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Прошири <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Скупи <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Апликцијама на уређају <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> дајете све дозволе као на уређају <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sv/strings.xml b/packages/CompanionDeviceManager/res/values-sv/strings.xml
index a622ff4..5c6f5ba 100644
--- a/packages/CompanionDeviceManager/res/values-sv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sv/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Tillåt inte"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Avbryt"</string>
<string name="consent_back" msgid="2560683030046918882">"Tillbaka"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Utöka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Komprimera <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vill du ge apparna på <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> samma behörigheter som de har på <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sw/strings.xml b/packages/CompanionDeviceManager/res/values-sw/strings.xml
index c010837..7a1cf98 100644
--- a/packages/CompanionDeviceManager/res/values-sw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sw/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Usiruhusu"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Ghairi"</string>
<string name="consent_back" msgid="2560683030046918882">"Nyuma"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Panua <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Kunja <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ungependa kuzipa programu katika <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ruhusa ile ile kama kwenye <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ta/strings.xml b/packages/CompanionDeviceManager/res/values-ta/strings.xml
index 96f7d63..2313cc3 100644
--- a/packages/CompanionDeviceManager/res/values-ta/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ta/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"அனுமதிக்க வேண்டாம்"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ரத்துசெய்"</string>
<string name="consent_back" msgid="2560683030046918882">"பின்செல்"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ஐ விரிவாக்கும்"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ஐச் சுருக்கும்"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> சாதனத்தில் இருக்கும் அதே அனுமதிகளை <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> சாதனத்தில் உள்ள ஆப்ஸுக்கும் வழங்கவா?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml
index f353b80..eed0eee 100644
--- a/packages/CompanionDeviceManager/res/values-te/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-te/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"అనుమతించవద్దు"</string>
<string name="consent_cancel" msgid="5655005528379285841">"రద్దు చేయండి"</string>
<string name="consent_back" msgid="2560683030046918882">"వెనుకకు"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ను విస్తరించండి"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ను కుదించండి"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>లోని యాప్లకు <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>లో ఉన్న అనుమతులను ఇవ్వాలా?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-th/strings.xml b/packages/CompanionDeviceManager/res/values-th/strings.xml
index 6a38c99..bf14f4c 100644
--- a/packages/CompanionDeviceManager/res/values-th/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-th/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"ไม่อนุญาต"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ยกเลิก"</string>
<string name="consent_back" msgid="2560683030046918882">"กลับ"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"ขยาย <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"ยุบ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ให้แอปใน <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> มีสิทธิ์เหมือนกับใน <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> ไหม"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tl/strings.xml b/packages/CompanionDeviceManager/res/values-tl/strings.xml
index 8d5470c..90e5eb7 100644
--- a/packages/CompanionDeviceManager/res/values-tl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tl/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Huwag payagan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Kanselahin"</string>
<string name="consent_back" msgid="2560683030046918882">"Bumalik"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"I-expand ang <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"I-collapse ang <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Bigyan ang mga app sa <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ng mga pahintulot na mayroon din sa <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tr/strings.xml b/packages/CompanionDeviceManager/res/values-tr/strings.xml
index 86c0e46..56997d7 100644
--- a/packages/CompanionDeviceManager/res/values-tr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tr/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"İzin verme"</string>
<string name="consent_cancel" msgid="5655005528379285841">"İptal"</string>
<string name="consent_back" msgid="2560683030046918882">"Geri"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> panelini genişlet"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> panelini daralt"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> cihazındaki uygulamalara, <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> cihazındakiyle aynı izinler verilsin mi?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-uk/strings.xml b/packages/CompanionDeviceManager/res/values-uk/strings.xml
index ff93a65..7d7b9de 100644
--- a/packages/CompanionDeviceManager/res/values-uk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uk/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Не дозволяти"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Скасувати"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Розгорнути дозвіл \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\""</string>
<string name="permission_collapse" msgid="3320833884220844084">"Згорнути дозвіл \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\""</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Надати додаткам на пристрої <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> такі самі дозволи, що й на пристрої <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ur/strings.xml b/packages/CompanionDeviceManager/res/values-ur/strings.xml
index 8c50d81..690e439 100644
--- a/packages/CompanionDeviceManager/res/values-ur/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ur/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"اجازت نہ دیں"</string>
<string name="consent_cancel" msgid="5655005528379285841">"منسوخ کریں"</string>
<string name="consent_back" msgid="2560683030046918882">"پیچھے"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> کو پھیلائیں"</string>
<string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> کو سکیڑیں"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ایپس کو <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> پر وہی اجازتیں دیں جو <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> پر دی گئی ہیں؟"</string>
diff --git a/packages/CompanionDeviceManager/res/values-uz/strings.xml b/packages/CompanionDeviceManager/res/values-uz/strings.xml
index 076bb74..e1a024c 100644
--- a/packages/CompanionDeviceManager/res/values-uz/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uz/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ruxsat berilmasin"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Bekor qilish"</string>
<string name="consent_back" msgid="2560683030046918882">"Orqaga"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Yoyish: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Yopish: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> ilovalariga <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> qurilmasidagi kabi bir xil ruxsatlar berilsinmi?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-vi/strings.xml b/packages/CompanionDeviceManager/res/values-vi/strings.xml
index a44af74..0293317 100644
--- a/packages/CompanionDeviceManager/res/values-vi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-vi/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Không cho phép"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Huỷ"</string>
<string name="consent_back" msgid="2560683030046918882">"Quay lại"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Mở rộng <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Thu gọn <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Cấp cho các ứng dụng trên <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> các quyền giống như trên <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
index ccc046b..ed68dd3 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"不允许"</string>
<string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"展开<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"收起<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"要让<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong>上的应用享有在<strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>上的同等权限吗?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
index 3dcaa9f..17d3482f 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"不允許"</string>
<string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"展開<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"收合<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"<strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> 上的應用程式可獲在 <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong> 上的相同權限嗎?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
index a96e43f..542a73fc 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"不允許"</string>
<string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"展開<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"收合<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"要讓「<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>」<strong></strong>的應用程式沿用在「<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>」<strong></strong>上的權限嗎?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zu/strings.xml b/packages/CompanionDeviceManager/res/values-zu/strings.xml
index bc7bb81..b1c7a14 100644
--- a/packages/CompanionDeviceManager/res/values-zu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zu/strings.xml
@@ -51,6 +51,10 @@
<string name="consent_no" msgid="2640796915611404382">"Ungavumeli"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Khansela"</string>
<string name="consent_back" msgid="2560683030046918882">"Emuva"</string>
+ <!-- no translation found for downward_arrow_action (2327165938832076333) -->
+ <skip />
+ <!-- no translation found for downward_arrow (2292427714411156088) -->
+ <skip />
<string name="permission_expand" msgid="893185038020887411">"Nweba i-<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_collapse" msgid="3320833884220844084">"Goqa i-<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Nikeza ama-app <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> izimvume ezifanayot <strong>njengaku-<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
index 3113129..dd77c61 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
@@ -592,6 +592,15 @@
mDeviceListRecyclerView.setVisibility(View.VISIBLE);
}
+ // Set accessibility action for mCancelScanLayout (wraps mButtonCancelScan) for TalkBack.
+ mButtonCancelScan.setAccessibilityDelegate(new View.AccessibilityDelegate() {
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK);
+ }
+ });
+
+
mSummary.setVisibility(View.GONE);
mButtonAllow.setVisibility(View.GONE);
mButtonNotAllow.setVisibility(View.GONE);
diff --git a/packages/CredentialManager/res/values-sv/strings.xml b/packages/CredentialManager/res/values-sv/strings.xml
index cab499a..4bdd408 100644
--- a/packages/CredentialManager/res/values-sv/strings.xml
+++ b/packages/CredentialManager/res/values-sv/strings.xml
@@ -93,6 +93,6 @@
<string name="get_dialog_heading_from_another_device" msgid="1166697017046724072">"Via en annan enhet"</string>
<string name="get_dialog_option_headline_use_a_different_device" msgid="8201578814988047549">"Använd en annan enhet"</string>
<string name="request_cancelled_by" msgid="3735222326886267820">"Begäran avbruten av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="dropdown_presentation_more_sign_in_options_text" msgid="1693727354272417902">"Inloggningsalternativ"</string>
+ <string name="dropdown_presentation_more_sign_in_options_text" msgid="1693727354272417902">"Inloggningsalternativ"</string>
<string name="more_options_content_description" msgid="1323427365788198808">"Mer"</string>
</resources>
diff --git a/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt b/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
index 9d037e9..806580b 100644
--- a/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
+++ b/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
@@ -17,20 +17,20 @@
package com.android.settingslib.widget
import android.content.Context
-import android.os.Build
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
-import androidx.annotation.RequiresApi
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
import com.android.settingslib.widget.preference.intro.R
-class IntroPreference @JvmOverloads constructor(
+class IntroPreference
+@JvmOverloads
+constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
- defStyleRes: Int = 0
+ defStyleRes: Int = 0,
) : Preference(context, attrs, defStyleAttr, defStyleRes), GroupSectionDividerMixin {
private var isCollapsable: Boolean = true
@@ -66,9 +66,9 @@
/**
* Sets whether the summary is collapsable.
+ *
* @param collapsable True if the summary should be collapsable, false otherwise.
*/
- @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun setCollapsable(collapsable: Boolean) {
isCollapsable = collapsable
minLines = if (isCollapsable) DEFAULT_MIN_LINES else DEFAULT_MAX_LINES
@@ -77,9 +77,9 @@
/**
* Sets the minimum number of lines to display when collapsed.
+ *
* @param lines The minimum number of lines.
*/
- @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun setMinLines(lines: Int) {
minLines = lines.coerceIn(1, DEFAULT_MAX_LINES)
notifyChanged()
@@ -87,9 +87,9 @@
/**
* Sets the action when clicking on the hyperlink in the text.
+ *
* @param listener The click listener for hyperlink.
*/
- @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun setHyperlinkListener(listener: View.OnClickListener) {
if (hyperlinkListener != listener) {
hyperlinkListener = listener
@@ -99,9 +99,9 @@
/**
* Sets the action when clicking on the learn more view.
+ *
* @param listener The click listener for learn more.
*/
- @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun setLearnMoreAction(listener: View.OnClickListener) {
if (learnMoreListener != listener) {
learnMoreListener = listener
@@ -111,9 +111,9 @@
/**
* Sets the text of learn more view.
+ *
* @param text The text of learn more.
*/
- @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun setLearnMoreText(text: CharSequence) {
if (!TextUtils.equals(learnMoreText, text)) {
learnMoreText = text
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
index 1cb8005..02bef9f 100644
--- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
+++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt
@@ -59,8 +59,6 @@
private val preferenceHierarchy: PreferenceHierarchy,
) : KeyedDataObservable<String>() {
- private val mainExecutor = HandlerExecutor.main
-
private val preferenceLifecycleContext =
object : PreferenceLifecycleContext(context) {
override val lifecycleScope: LifecycleCoroutineScope
@@ -88,11 +86,11 @@
private val preferences: ImmutableMap<String, PreferenceHierarchyNode>
private val dependencies: ImmutableMultimap<String, String>
private val lifecycleAwarePreferences: Array<PreferenceLifecycleProvider>
- private val storages = mutableMapOf<String, KeyedObservable<String>>()
+ private val observables = mutableMapOf<String, KeyedObservable<String>>()
private val preferenceObserver: KeyedObserver<String?>
- private val storageObserver =
+ private val observer =
KeyedObserver<String> { key, reason ->
if (DataChangeReason.isDataChange(reason)) {
notifyChange(key, PreferenceChangeReason.VALUE)
@@ -133,15 +131,19 @@
this.dependencies = dependenciesBuilder.build()
this.lifecycleAwarePreferences = lifecycleAwarePreferences.toTypedArray()
+ val executor = HandlerExecutor.main
preferenceObserver = KeyedObserver { key, reason -> onPreferenceChange(key, reason) }
- addObserver(preferenceObserver, mainExecutor)
+ addObserver(preferenceObserver, executor)
preferenceScreen.forEachRecursively {
- it.preferenceDataStore?.findKeyValueStore()?.let { keyValueStore ->
- val key = it.key
- storages[key] = keyValueStore
- keyValueStore.addObserver(key, storageObserver, mainExecutor)
- }
+ val key = it.key ?: return@forEachRecursively
+ @Suppress("UNCHECKED_CAST")
+ val observable =
+ it.preferenceDataStore?.findKeyValueStore()
+ ?: (preferences[key]?.metadata as? KeyedObservable<String>)
+ ?: return@forEachRecursively
+ observables[key] = observable
+ observable.addObserver(key, observer, executor)
}
}
@@ -212,7 +214,7 @@
fun onDestroy() {
removeObserver(preferenceObserver)
- for ((key, storage) in storages) storage.removeObserver(key, storageObserver)
+ for ((key, observable) in observables) observable.removeObserver(key, observer)
for (preference in lifecycleAwarePreferences) {
preference.onDestroy(preferenceLifecycleContext)
}
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v36/preference_selector_with_widget.xml b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v36/preference_selector_with_widget.xml
new file mode 100644
index 0000000..a79d69d
--- /dev/null
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v36/preference_selector_with_widget.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2025 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.
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/selectableItemBackground"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+ <LinearLayout
+ android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingEnd="@dimen/settingslib_expressive_space_extrasmall6"
+ android:gravity="center"
+ android:minWidth="32dp"
+ android:orientation="vertical"/>
+
+ <LinearLayout
+ android:id="@+id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:minWidth="32dp"
+ android:orientation="horizontal"
+ android:layout_marginEnd="@dimen/settingslib_expressive_space_small1"
+ android:paddingTop="@dimen/settingslib_expressive_space_extrasmall2"
+ android:paddingBottom="@dimen/settingslib_expressive_space_extrasmall2">
+ <androidx.preference.internal.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ settings:maxWidth="@dimen/secondary_app_icon_size"
+ settings:maxHeight="@dimen/secondary_app_icon_size"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/settingslib_expressive_space_small1"
+ android:paddingBottom="@dimen/settingslib_expressive_space_small1"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+ <TextView
+ android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxLines="2"
+ android:ellipsize="end"
+ android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
+ android:textAppearance="?android:attr/textAppearanceListItem"/>
+
+ <LinearLayout
+ android:id="@+id/summary_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone">
+ <TextView
+ android:id="@android:id/summary"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textAlignment="viewStart"
+ android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
+ android:textColor="?android:attr/textColorSecondary"/>
+
+ <TextView
+ android:id="@+id/appendix"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textAlignment="viewEnd"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="1"
+ android:visibility="gone"
+ android:ellipsize="end"/>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/selector_extra_widget_container"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+ <View
+ android:layout_width=".75dp"
+ android:layout_height="32dp"
+ android:layout_marginTop="@dimen/settingslib_expressive_space_small1"
+ android:layout_marginBottom="@dimen/settingslib_expressive_space_small1"
+ android:background="?android:attr/dividerVertical"/>
+ <ImageView
+ android:id="@+id/selector_extra_widget"
+ android:layout_width="match_parent"
+ android:minWidth="@dimen/two_target_min_width"
+ android:layout_height="fill_parent"
+ android:src="@drawable/ic_settings_accent"
+ android:contentDescription="@string/settings_label"
+ android:paddingStart="@dimen/settingslib_expressive_space_small4"
+ android:paddingEnd="@dimen/settingslib_expressive_space_small4"
+ android:layout_gravity="center"
+ android:background="?android:attr/selectableItemBackground"/>
+ </LinearLayout>
+</LinearLayout>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml
index 9aa0bc3..0446873 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml
@@ -19,16 +19,12 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp"
- android:bottom="16dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceBright" />
<corners
android:radius="@dimen/settingslib_preference_corner_radius" />
- <padding
- android:bottom="16dp"/>
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml
index 554cba5..25a936d 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml
@@ -19,9 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp"
- android:bottom="16dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceBright" />
@@ -30,8 +28,6 @@
android:bottomLeftRadius="@dimen/settingslib_preference_corner_radius"
android:topRightRadius="4dp"
android:bottomRightRadius="@dimen/settingslib_preference_corner_radius" />
- <padding
- android:bottom="16dp"/>
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml
index c0c0869..db2800e 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml
@@ -19,8 +19,7 @@
<item
android:bottom="16dp"
android:end="?android:attr/listPreferredItemPaddingEnd"
- android:start="?android:attr/listPreferredItemPaddingStart"
- android:top="2dp">
+ android:start="?android:attr/listPreferredItemPaddingStart">
<shape
android:shape="rectangle"
android:tint="?android:attr/colorAccent">
@@ -29,8 +28,7 @@
android:bottomRightRadius="@dimen/settingslib_preference_corner_radius"
android:topLeftRadius="4dp"
android:topRightRadius="4dp" />
- <padding android:bottom="16dp" />
<solid android:color="#42000000" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml
index 543b237..98f95d92 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml
@@ -19,9 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp"
- android:bottom="16dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceContainer" />
@@ -30,8 +28,6 @@
android:bottomLeftRadius="@dimen/settingslib_preference_corner_radius"
android:topRightRadius="4dp"
android:bottomRightRadius="@dimen/settingslib_preference_corner_radius" />
- <padding
- android:bottom="16dp"/>
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml
index b89a0dd..c4286fd 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml
@@ -19,8 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceBright" />
@@ -28,4 +27,4 @@
android:radius="4dp" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml
index 8099d9b..194cdb0 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml
@@ -18,8 +18,7 @@
android:color="?android:colorControlHighlight">
<item
android:end="?android:attr/listPreferredItemPaddingEnd"
- android:start="?android:attr/listPreferredItemPaddingStart"
- android:top="2dp">
+ android:start="?android:attr/listPreferredItemPaddingStart">
<shape
android:shape="rectangle"
android:tint="?android:attr/colorAccent">
@@ -27,4 +26,4 @@
<solid android:color="#42000000" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml
index 6d2cd1a..8bc2f2f 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml
@@ -19,8 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceContainer" />
@@ -28,4 +27,4 @@
android:radius="4dp" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml
index a119a4a..2341661 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml
@@ -19,14 +19,12 @@
<item
android:bottom="16dp"
android:end="?android:attr/listPreferredItemPaddingEnd"
- android:start="?android:attr/listPreferredItemPaddingStart"
- android:top="2dp">
+ android:start="?android:attr/listPreferredItemPaddingStart">
<shape
android:shape="rectangle"
android:tint="?android:attr/colorAccent">
<corners android:radius="@dimen/settingslib_preference_corner_radius" />
- <padding android:bottom="16dp" />
<solid android:color="#42000000" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml
index bcdbf1d..99704f2d 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml
@@ -19,16 +19,12 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp"
- android:bottom="16dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceContainer" />
<corners
android:radius="@dimen/settingslib_preference_corner_radius" />
- <padding
- android:bottom="16dp"/>
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml
index 7955e44..3a59386 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml
@@ -19,8 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceBright" />
@@ -31,4 +30,4 @@
android:bottomRightRadius="4dp" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml
index 052eb01..edace29 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml
@@ -19,8 +19,7 @@
<item
android:color="?android:attr/colorAccent"
android:end="?android:attr/listPreferredItemPaddingEnd"
- android:start="?android:attr/listPreferredItemPaddingStart"
- android:top="2dp">
+ android:start="?android:attr/listPreferredItemPaddingStart">
<shape
android:shape="rectangle"
android:tint="?android:attr/colorAccent">
@@ -32,4 +31,4 @@
<solid android:color="#42000000" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml
index d4b658c..b2d6d9d 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml
@@ -19,8 +19,7 @@
android:color="?android:colorControlHighlight">
<item
android:start="?android:attr/listPreferredItemPaddingStart"
- android:end="?android:attr/listPreferredItemPaddingEnd"
- android:top="2dp">
+ android:end="?android:attr/listPreferredItemPaddingEnd">
<shape android:shape="rectangle">
<solid
android:color="@color/settingslib_materialColorSurfaceContainer" />
@@ -31,4 +30,4 @@
android:bottomRightRadius="4dp" />
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
index 3ccbbc0..2d6b6cf 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/themes.xml
@@ -28,6 +28,7 @@
<item name="switchStyle">@style/SwitchCompat.SettingsLib</item>
<item name="android:progressBarStyleHorizontal">@style/HorizontalProgressBar.SettingsLib</item>
<item name="android:listDivider">@drawable/settingslib_list_divider</item>
+ <item name="android:colorBackground">@color/settingslib_materialColorSurfaceContainerLowest</item>
</style>
<style name="Theme.SettingsBase" parent="Theme.SettingsBase_v31" />
diff --git a/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsBasePreferenceFragment.kt b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsBasePreferenceFragment.kt
index 8d12f01..22cd873 100644
--- a/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsBasePreferenceFragment.kt
+++ b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsBasePreferenceFragment.kt
@@ -16,6 +16,7 @@
package com.android.settingslib.widget
+import android.graphics.Rect
import android.os.Bundle
import android.view.LayoutInflater;
import android.view.View
@@ -24,6 +25,7 @@
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen
import androidx.recyclerview.widget.RecyclerView
+import com.android.settingslib.widget.theme.R
/** Base class for Settings to use PreferenceFragmentCompat */
abstract class SettingsBasePreferenceFragment : PreferenceFragmentCompat() {
@@ -43,6 +45,7 @@
if (SettingsThemeHelper.isExpressiveTheme(requireContext())) {
// Don't allow any divider in between the preferences in expressive design.
setDivider(null)
+ this.listView.addItemDecoration(MarginItemDecoration())
}
}
@@ -51,4 +54,18 @@
return SettingsPreferenceGroupAdapter(preferenceScreen)
return super.onCreateAdapter(preferenceScreen)
}
+
+ internal class MarginItemDecoration() : RecyclerView.ItemDecoration() {
+ override fun getItemOffsets(
+ outRect: Rect,
+ view: View,
+ parent: RecyclerView,
+ state: RecyclerView.State,
+ ) {
+ with(outRect) {
+ bottom =
+ view.resources.getDimensionPixelSize(R.dimen.settingslib_expressive_radius_extrasmall1)
+ }
+ }
+ }
}
diff --git a/packages/SettingsLib/Spa/OWNERS b/packages/SettingsLib/Spa/OWNERS
index 67386d1..d2941de 100644
--- a/packages/SettingsLib/Spa/OWNERS
+++ b/packages/SettingsLib/Spa/OWNERS
@@ -1,9 +1,6 @@
include platform/frameworks/base:/packages/SettingsLib/OWNERS
+zhibinliu@google.com
chaohuiw@google.com
-hanxu@google.com
-kellyz@google.com
pierreqian@google.com
-lijun@google.com
-songchenxi@google.com
-cyl@google.com
+lijun@google.com
\ No newline at end of file
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_actionButtons.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_actionButtons.png
index b2f3cf1..65418b9 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_actionButtons.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_actionButtons.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_mainSwitchPreference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_mainSwitchPreference.png
index 75c8e6e..c9091fb 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_mainSwitchPreference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_mainSwitchPreference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_spinner.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_spinner.png
index 06f0059..cdc1e79 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_spinner.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_landscape_spinner.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_actionButtons.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_actionButtons.png
index fa06927..614fbe9 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_actionButtons.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_actionButtons.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_imageIllustration.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_imageIllustration.png
index a5f3fa5..ce1257f 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_imageIllustration.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_imageIllustration.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_mainSwitchPreference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_mainSwitchPreference.png
index b72c8db..6b1233c 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_mainSwitchPreference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_mainSwitchPreference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_slider.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_slider.png
index 928e926..782957d 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_slider.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_slider.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_spinner.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_spinner.png
index 06f0059..cdc1e79 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_spinner.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/phone/light_portrait_spinner.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_actionButtons.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_actionButtons.png
index 63983ee..427f202 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_actionButtons.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_actionButtons.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_barChart.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_barChart.png
index 8fcc350..e372f7b 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_barChart.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_barChart.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_footer.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_footer.png
index c2f6165..1ed1efc 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_footer.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_footer.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_imageIllustration.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_imageIllustration.png
index f32d7421..6283dd1 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_imageIllustration.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_imageIllustration.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_lineChart.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_lineChart.png
index 6659d7c..a4eb19e 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_lineChart.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_lineChart.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_mainSwitchPreference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_mainSwitchPreference.png
index 15c86dc..bd1bb28 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_mainSwitchPreference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_mainSwitchPreference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_pieChart.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_pieChart.png
index 7b6e702..d0d5ac1 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_pieChart.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_pieChart.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_preference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_preference.png
index cd44fb8..5cf7381 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_preference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_preference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_progressBar.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_progressBar.png
index d31f2c4..96f614c 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_progressBar.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_progressBar.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_slider.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_slider.png
index 8a2b800..3cbe715 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_slider.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_slider.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_spinner.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_spinner.png
index 5be3a21..f151798 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_spinner.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_spinner.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_switchPreference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_switchPreference.png
index 9aee004..218e8e3 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_switchPreference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_switchPreference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_twoTargetSwitchPreference.png b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_twoTargetSwitchPreference.png
index cc74aac..44b32e2 100644
--- a/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_twoTargetSwitchPreference.png
+++ b/packages/SettingsLib/Spa/screenshot/robotests/assets/tablet/dark_portrait_twoTargetSwitchPreference.png
Binary files differ
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt
index b23f4e0..ef2745c 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt
@@ -14,14 +14,11 @@
* limitations under the License.
*/
-@file:OptIn(ExperimentalTime::class)
-
package com.android.settingslib.spa.framework.compose
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
-import kotlin.time.ExperimentalTime
import kotlin.time.TimeSource
const val ENABLE_MEASURE_TIME = false
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BaseLayout.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BaseLayout.kt
index b1bb79d..068ff06 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BaseLayout.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BaseLayout.kt
@@ -87,15 +87,28 @@
@Composable
internal fun BaseIcon(icon: @Composable (() -> Unit)?, modifier: Modifier, paddingStart: Dp) {
- if (icon != null) {
- Box(
- modifier = modifier.size(SettingsDimension.itemIconContainerSize),
- contentAlignment = Alignment.Center,
- ) {
- icon()
+ if (isSpaExpressiveEnabled) {
+ Spacer(modifier = Modifier.width(width = paddingStart))
+ if (icon != null) {
+ Box(
+ modifier = modifier.size(SettingsDimension.itemIconContainerSizeSmall),
+ contentAlignment = Alignment.Center,
+ ) {
+ icon()
+ }
+ Spacer(modifier = Modifier.width(width = SettingsDimension.paddingExtraSmall6))
}
} else {
- Spacer(modifier = Modifier.width(width = paddingStart))
+ if (icon != null) {
+ Box(
+ modifier = modifier.size(SettingsDimension.itemIconContainerSize),
+ contentAlignment = Alignment.Center,
+ ) {
+ icon()
+ }
+ } else {
+ Spacer(modifier = Modifier.width(width = paddingStart))
+ }
}
}
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index e2487d7..5fbab96 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -386,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"عرض تسارع الأجهزة"</string>
<string name="media_category" msgid="8122076702526144053">"الوسائط"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"المراقبة"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"إدارة النوافذ"</string>
<string name="strict_mode" msgid="889864762140862437">"تفعيل الوضع المتشدد"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"وميض الشاشة عند إجراء التطبيقات عمليات طويلة في سلسلة المحادثات الرئيسية"</string>
<string name="pointer_location" msgid="7516929526199520173">"موقع المؤشر"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 986c40f..ef14483 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -81,7 +81,7 @@
<string name="speed_label_fast" msgid="2677719134596044051">"Hurtig"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Meget hurtig"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Udløbet"</string>
- <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="bluetooth_disconnected" msgid="7739366554710388701">"Afbrudt"</string>
<string name="bluetooth_disconnecting" msgid="7638892134401574338">"Afbryder ..."</string>
<string name="bluetooth_connecting" msgid="5871702668260192755">"Opretter forbindelse..."</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index d4c0773..c39521f 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -386,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"עיבוד מואץ של חומרה"</string>
<string name="media_category" msgid="8122076702526144053">"מדיה"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"מעקב"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ניהול החלונות"</string>
<string name="strict_mode" msgid="889864762140862437">"מצב קפדני מופעל"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"המסך יהבהב כשאפליקציות יבצעו פעולות ארוכות ב-thread הראשי"</string>
<string name="pointer_location" msgid="7516929526199520173">"מיקום מצביע"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 79be6b3..aed9b06 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -113,17 +113,17 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nie udało się zaktualizować otoczenia"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktywne (tylko multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktywne (tylko multimedia), lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
- <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Urządzenie gościa. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
- <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Urządzenie gościa. Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
- <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Urządzenie gościa (tylko multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
- <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Urządzenie gościa (tylko multimedia). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Urządzenie gościa. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterii."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Urządzenie gościa. Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterii."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Urządzenie gościa (tylko multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterii."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Urządzenie gościa (tylko multimedia). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterii."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Połączone (obsługa udostępniania dźwięku), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Połączone (obsługa udostępniania dźwięku), lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Połączone (obsługa udostępniania dźwięku). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Połączone (obsługa udostępniania dźwięku). Prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Połączone (obsługa udostępniania dźwięku)"</string>
- <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Urządzenie gościa (obsługuje udostępnianie dźwięku). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
- <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Urządzenie gościa (obsługuje udostępnianie dźwięku). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Urządzenie gościa (obsługuje udostępnianie dźwięku). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterii."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Urządzenie gościa (obsługuje udostępnianie dźwięku). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterii."</string>
<string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Urządzenie gościa (obsługuje udostępnianie dźwięku)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktywne (tylko multimedia)"</string>
<string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Urządzenie gościa"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
index ebd5a1d..3625c00 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
@@ -29,6 +29,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
+import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -37,6 +38,8 @@
import androidx.annotation.VisibleForTesting;
import com.android.settingslib.R;
+import com.android.settingslib.flags.Flags;
+import com.android.settingslib.utils.ThreadUtils;
import java.util.Collection;
import java.util.HashMap;
@@ -65,6 +68,7 @@
private final android.os.Handler mReceiverHandler;
private final UserHandle mUserHandle;
private final Context mContext;
+ private boolean mIsWorkProfile = false;
interface Handler {
void onReceive(Context context, Intent intent, BluetoothDevice device);
@@ -140,6 +144,9 @@
addHandler(BluetoothAdapter.ACTION_AUTO_ON_STATE_CHANGED, new AutoOnStateChangedHandler());
registerAdapterIntentReceiver();
+
+ UserManager userManager = context.getSystemService(UserManager.class);
+ mIsWorkProfile = userManager != null && userManager.isManagedProfile();
}
/** Register to start receiving callbacks for Bluetooth events. */
@@ -220,20 +227,32 @@
callback.onProfileConnectionStateChanged(device, state, bluetoothProfile);
}
+ if (mIsWorkProfile) {
+ Log.d(TAG, "Skip profileConnectionStateChanged for audio sharing, work profile");
+ return;
+ }
+
+ LocalBluetoothLeBroadcast broadcast = mBtManager == null ? null
+ : mBtManager.getProfileManager().getLeAudioBroadcastProfile();
+ LocalBluetoothLeBroadcastAssistant assistant = mBtManager == null ? null
+ : mBtManager.getProfileManager().getLeAudioBroadcastAssistantProfile();
// Trigger updateFallbackActiveDeviceIfNeeded when ASSISTANT profile disconnected when
// audio sharing is enabled.
if (bluetoothProfile == BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT
&& state == BluetoothAdapter.STATE_DISCONNECTED
- && BluetoothUtils.isAudioSharingUIAvailable(mContext)) {
- LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager();
- if (profileManager != null
- && profileManager.getLeAudioBroadcastProfile() != null
- && profileManager.getLeAudioBroadcastProfile().isProfileReady()
- && profileManager.getLeAudioBroadcastAssistantProfile() != null
- && profileManager.getLeAudioBroadcastAssistantProfile().isProfileReady()) {
- Log.d(TAG, "updateFallbackActiveDeviceIfNeeded, ASSISTANT profile disconnected");
- profileManager.getLeAudioBroadcastProfile().updateFallbackActiveDeviceIfNeeded();
- }
+ && BluetoothUtils.isAudioSharingUIAvailable(mContext)
+ && broadcast != null && assistant != null && broadcast.isProfileReady()
+ && assistant.isProfileReady()) {
+ Log.d(TAG, "updateFallbackActiveDeviceIfNeeded, ASSISTANT profile disconnected");
+ broadcast.updateFallbackActiveDeviceIfNeeded();
+ }
+ // Dispatch handleOnProfileStateChanged to local broadcast profile
+ if (Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice()
+ && broadcast != null
+ && state == BluetoothAdapter.STATE_CONNECTED) {
+ Log.d(TAG, "dispatchProfileConnectionStateChanged to local broadcast profile");
+ var unused = ThreadUtils.postOnBackgroundThread(
+ () -> broadcast.handleProfileConnected(device, bluetoothProfile, mBtManager));
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index 31948e4..e78a692 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -719,6 +719,30 @@
}
}
+ /** Check if the {@link CachedBluetoothDevice} is a media device */
+ @WorkerThread
+ public static boolean isMediaDevice(@Nullable CachedBluetoothDevice cachedDevice) {
+ if (cachedDevice == null) return false;
+ return cachedDevice.getProfiles().stream()
+ .anyMatch(
+ profile ->
+ profile instanceof A2dpProfile
+ || profile instanceof HearingAidProfile
+ || profile instanceof LeAudioProfile
+ || profile instanceof HeadsetProfile);
+ }
+
+ /** Check if the {@link CachedBluetoothDevice} supports LE Audio profile */
+ @WorkerThread
+ public static boolean isLeAudioSupported(@Nullable CachedBluetoothDevice cachedDevice) {
+ if (cachedDevice == null) return false;
+ return cachedDevice.getProfiles().stream()
+ .anyMatch(
+ profile ->
+ profile instanceof LeAudioProfile
+ && profile.isEnabled(cachedDevice.getDevice()));
+ }
+
/** Returns if the broadcast is on-going. */
@WorkerThread
public static boolean isBroadcasting(@Nullable LocalBluetoothManager manager) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
index f18a2da..08f7806 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
@@ -54,6 +54,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
+import androidx.annotation.WorkerThread;
import com.android.settingslib.R;
import com.android.settingslib.flags.Flags;
@@ -64,6 +65,7 @@
import java.lang.annotation.RetentionPolicy;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -107,6 +109,7 @@
private static final String SETTINGS_PKG = "com.android.settings";
private static final String SYSUI_PKG = "com.android.systemui";
private static final String TAG = "LocalBluetoothLeBroadcast";
+ private static final String AUTO_REJOIN_BROADCAST_TAG = "REJOIN_LE_BROADCAST_ID";
private static final boolean DEBUG = BluetoothUtils.D;
private static final String VALID_PASSWORD_CHARACTERS =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:,"
@@ -120,6 +123,7 @@
// Order of this profile in device profiles list
private static final int ORDINAL = 1;
static final int UNKNOWN_VALUE_PLACEHOLDER = -1;
+ private static final int JUST_BOND_MILLIS_THRESHOLD = 30000; // 30s
private static final Uri[] SETTINGS_URIS =
new Uri[] {
Settings.Secure.getUriFor(Settings.Secure.BLUETOOTH_LE_BROADCAST_NAME),
@@ -1283,4 +1287,87 @@
UserManager userManager = context.getSystemService(UserManager.class);
return userManager != null && userManager.isManagedProfile();
}
+
+ /** Handle profile connected for {@link CachedBluetoothDevice}. */
+ @WorkerThread
+ public void handleProfileConnected(@NonNull CachedBluetoothDevice cachedDevice,
+ int bluetoothProfile, @Nullable LocalBluetoothManager btManager) {
+ if (!Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice()) {
+ Log.d(TAG, "Skip handleProfileConnected, flag off");
+ return;
+ }
+ if (!SYSUI_PKG.equals(mContext.getPackageName())) {
+ Log.d(TAG, "Skip handleProfileConnected, not a valid caller");
+ return;
+ }
+ if (!BluetoothUtils.isMediaDevice(cachedDevice)) {
+ Log.d(TAG, "Skip handleProfileConnected, not a media device");
+ return;
+ }
+ Timestamp bondTimestamp = cachedDevice.getBondTimestamp();
+ if (bondTimestamp != null) {
+ long diff = System.currentTimeMillis() - bondTimestamp.getTime();
+ if (diff <= JUST_BOND_MILLIS_THRESHOLD) {
+ Log.d(TAG, "Skip handleProfileConnected, just bond within " + diff);
+ return;
+ }
+ }
+ if (!isEnabled(null)) {
+ Log.d(TAG, "Skip handleProfileConnected, not broadcasting");
+ return;
+ }
+ BluetoothDevice device = cachedDevice.getDevice();
+ if (device == null) {
+ Log.d(TAG, "Skip handleProfileConnected, null device");
+ return;
+ }
+ // TODO: sync source in a reasonable place
+ if (BluetoothUtils.hasConnectedBroadcastSourceForBtDevice(device, btManager)) {
+ Log.d(TAG, "Skip handleProfileConnected, already has source");
+ return;
+ }
+ if (isAutoRejoinDevice(device)) {
+ Log.d(TAG, "Skip handleProfileConnected, auto rejoin device");
+ return;
+ }
+ boolean isLeAudioSupported = BluetoothUtils.isLeAudioSupported(cachedDevice);
+ // For eligible (LE audio) remote device, we only check assistant profile connected.
+ if (isLeAudioSupported
+ && bluetoothProfile != BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT) {
+ Log.d(TAG, "Skip handleProfileConnected, lea sink, not the assistant profile");
+ return;
+ }
+ boolean isFirstConnectedProfile = isFirstConnectedProfile(cachedDevice, bluetoothProfile);
+ // For ineligible (classic) remote device, we only check its first connected profile.
+ if (!isLeAudioSupported && !isFirstConnectedProfile) {
+ Log.d(TAG, "Skip handleProfileConnected, classic sink, not the first profile");
+ return;
+ }
+
+ Intent intent = new Intent(
+ LocalBluetoothLeBroadcast.ACTION_LE_AUDIO_SHARING_DEVICE_CONNECTED);
+ intent.putExtra(LocalBluetoothLeBroadcast.EXTRA_BLUETOOTH_DEVICE, device);
+ intent.setPackage(SETTINGS_PKG);
+ Log.d(TAG, "notify device connected, device = " + device.getAnonymizedAddress());
+
+ mContext.sendBroadcast(intent);
+ }
+
+ private boolean isAutoRejoinDevice(@Nullable BluetoothDevice bluetoothDevice) {
+ String metadataValue = BluetoothUtils.getFastPairCustomizedField(bluetoothDevice,
+ AUTO_REJOIN_BROADCAST_TAG);
+ return getLatestBroadcastId() != UNKNOWN_VALUE_PLACEHOLDER && Objects.equals(metadataValue,
+ String.valueOf(getLatestBroadcastId()));
+ }
+
+ private boolean isFirstConnectedProfile(@Nullable CachedBluetoothDevice cachedDevice,
+ int bluetoothProfile) {
+ if (cachedDevice == null) return false;
+ return cachedDevice.getProfiles().stream()
+ .noneMatch(
+ profile ->
+ profile.getProfileId() != bluetoothProfile
+ && profile.getConnectionStatus(cachedDevice.getDevice())
+ == BluetoothProfile.STATE_CONNECTED);
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java
index ae17acb..8bb41cc 100644
--- a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java
+++ b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java
@@ -16,8 +16,8 @@
package com.android.settingslib.qrcode;
+import android.annotation.NonNull;
import android.content.Context;
-import android.content.res.Configuration;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
@@ -75,12 +75,29 @@
@VisibleForTesting
Camera mCamera;
+ Camera.CameraInfo mCameraInfo;
+
+ /**
+ * The size of the preview image as requested to camera, e.g. 1920x1080.
+ */
private Size mPreviewSize;
+
+ /**
+ * Whether the preview image would be displayed in "portrait" (width less
+ * than height) orientation in current display orientation.
+ *
+ * Note that we don't distinguish between a rotation of 90 degrees or 270
+ * degrees here, since we center crop all the preview.
+ *
+ * TODO: Handle external camera / multiple display, this likely requires
+ * migrating to newer Camera2 API.
+ */
+ private boolean mPreviewInPortrait;
+
private WeakReference<Context> mContext;
private ScannerCallback mScannerCallback;
private MultiFormatReader mReader;
private DecodingTask mDecodeTask;
- private int mCameraOrientation;
@VisibleForTesting
Camera.Parameters mParameters;
@@ -152,8 +169,14 @@
* @param previewSize Is the preview size set by camera
* @param cameraOrientation Is the orientation of current Camera
* @return The rectangle would like to crop from the camera preview shot.
+ * @deprecated This is no longer used, and the frame position is
+ * automatically calculated from the preview size and the
+ * background View size.
*/
- Rect getFramePosition(Size previewSize, int cameraOrientation);
+ @Deprecated
+ default @NonNull Rect getFramePosition(@NonNull Size previewSize, int cameraOrientation) {
+ throw new AssertionError("getFramePosition shouldn't be used");
+ }
/**
* Sets the transform to associate with preview area.
@@ -172,6 +195,41 @@
boolean isValid(String qrCode);
}
+ private boolean setPreviewDisplayOrientation() {
+ if (mContext.get() == null) {
+ return false;
+ }
+
+ final WindowManager winManager =
+ (WindowManager) mContext.get().getSystemService(Context.WINDOW_SERVICE);
+ final int rotation = winManager.getDefaultDisplay().getRotation();
+ int degrees = 0;
+ switch (rotation) {
+ case Surface.ROTATION_0:
+ degrees = 0;
+ break;
+ case Surface.ROTATION_90:
+ degrees = 90;
+ break;
+ case Surface.ROTATION_180:
+ degrees = 180;
+ break;
+ case Surface.ROTATION_270:
+ degrees = 270;
+ break;
+ }
+ int rotateDegrees = 0;
+ if (mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+ rotateDegrees = (mCameraInfo.orientation + degrees) % 360;
+ rotateDegrees = (360 - rotateDegrees) % 360; // compensate the mirror
+ } else {
+ rotateDegrees = (mCameraInfo.orientation - degrees + 360) % 360;
+ }
+ mCamera.setDisplayOrientation(rotateDegrees);
+ mPreviewInPortrait = (rotateDegrees == 90 || rotateDegrees == 270);
+ return true;
+ }
+
@VisibleForTesting
void setCameraParameter() {
mParameters = mCamera.getParameters();
@@ -195,37 +253,39 @@
mCamera.setParameters(mParameters);
}
- private boolean startPreview() {
- if (mContext.get() == null) {
- return false;
- }
+ /**
+ * Set transform matrix to crop and center the preview picture.
+ */
+ private void setTransformationMatrix() {
+ final Size previewDisplaySize = rotateIfPortrait(mPreviewSize);
+ final Size viewSize = mScannerCallback.getViewSize();
+ final Rect cropRegion = calculateCenteredCrop(previewDisplaySize, viewSize);
- final WindowManager winManager =
- (WindowManager) mContext.get().getSystemService(Context.WINDOW_SERVICE);
- final int rotation = winManager.getDefaultDisplay().getRotation();
- int degrees = 0;
- switch (rotation) {
- case Surface.ROTATION_0:
- degrees = 0;
- break;
- case Surface.ROTATION_90:
- degrees = 90;
- break;
- case Surface.ROTATION_180:
- degrees = 180;
- break;
- case Surface.ROTATION_270:
- degrees = 270;
- break;
- }
- final int rotateDegrees = (mCameraOrientation - degrees + 360) % 360;
- mCamera.setDisplayOrientation(rotateDegrees);
+ // Note that strictly speaking, since the preview is mirrored in front
+ // camera case, we should also mirror the crop region here. But since
+ // we're cropping at the center, mirroring would result in the same
+ // crop region other than small off-by-one error from floating point
+ // calculation and wouldn't be noticeable.
+
+ // Calculate transformation matrix.
+ float scaleX = previewDisplaySize.getWidth() / (float) cropRegion.width();
+ float scaleY = previewDisplaySize.getHeight() / (float) cropRegion.height();
+ float translateX = -cropRegion.left / (float) cropRegion.width() * viewSize.getWidth();
+ float translateY = -cropRegion.top / (float) cropRegion.height() * viewSize.getHeight();
+
+ // Set the transform matrix.
+ final Matrix matrix = new Matrix();
+ matrix.setScale(scaleX, scaleY);
+ matrix.postTranslate(translateX, translateY);
+ mScannerCallback.setTransform(matrix);
+ }
+
+ private void startPreview() {
mCamera.startPreview();
if (Camera.Parameters.FOCUS_MODE_AUTO.equals(mParameters.getFocusMode())) {
mCamera.autoFocus(/* Camera.AutoFocusCallback */ null);
sendMessageDelayed(obtainMessage(MSG_AUTO_FOCUS), AUTOFOCUS_INTERVAL_MS);
}
- return true;
}
private class DecodingTask extends AsyncTask<Void, Void, String> {
@@ -300,7 +360,7 @@
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
releaseCamera();
mCamera = Camera.open(i);
- mCameraOrientation = cameraInfo.orientation;
+ mCameraInfo = cameraInfo;
break;
}
}
@@ -309,7 +369,7 @@
Camera.getCameraInfo(0, cameraInfo);
releaseCamera();
mCamera = Camera.open(0);
- mCameraOrientation = cameraInfo.orientation;
+ mCameraInfo = cameraInfo;
}
} catch (RuntimeException e) {
Log.e(TAG, "Fail to open camera: " + e);
@@ -323,11 +383,12 @@
throw new IOException("Cannot find available camera");
}
mCamera.setPreviewTexture(surface);
+ if (!setPreviewDisplayOrientation()) {
+ throw new IOException("Lost context");
+ }
setCameraParameter();
setTransformationMatrix();
- if (!startPreview()) {
- throw new IOException("Lost contex");
- }
+ startPreview();
} catch (IOException ioe) {
Log.e(TAG, "Fail to startPreview camera: " + ioe);
mCamera = null;
@@ -345,32 +406,30 @@
}
}
- /** Set transform matrix to crop and center the preview picture */
- private void setTransformationMatrix() {
- final boolean isPortrait = mContext.get().getResources().getConfiguration().orientation
- == Configuration.ORIENTATION_PORTRAIT;
-
- final int previewWidth = isPortrait ? mPreviewSize.getWidth() : mPreviewSize.getHeight();
- final int previewHeight = isPortrait ? mPreviewSize.getHeight() : mPreviewSize.getWidth();
- final float ratioPreview = (float) getRatio(previewWidth, previewHeight);
-
- // Calculate transformation matrix.
- float scaleX = 1.0f;
- float scaleY = 1.0f;
- if (previewWidth > previewHeight) {
- scaleY = scaleX / ratioPreview;
+ /**
+ * Calculates the crop region in `previewSize` to have the same aspect
+ * ratio as `viewSize` and center aligned.
+ */
+ private Rect calculateCenteredCrop(Size previewSize, Size viewSize) {
+ final double previewRatio = getRatio(previewSize);
+ final double viewRatio = getRatio(viewSize);
+ int width;
+ int height;
+ if (previewRatio > viewRatio) {
+ width = previewSize.getWidth();
+ height = (int) Math.round(width * viewRatio);
} else {
- scaleX = scaleY / ratioPreview;
+ height = previewSize.getHeight();
+ width = (int) Math.round(height / viewRatio);
}
-
- // Set the transform matrix.
- final Matrix matrix = new Matrix();
- matrix.setScale(scaleX, scaleY);
- mScannerCallback.setTransform(matrix);
+ final int left = (previewSize.getWidth() - width) / 2;
+ final int top = (previewSize.getHeight() - height) / 2;
+ return new Rect(left, top, left + width, top + height);
}
private QrYuvLuminanceSource getFrameImage(byte[] imageData) {
- final Rect frame = mScannerCallback.getFramePosition(mPreviewSize, mCameraOrientation);
+ final Size viewSize = mScannerCallback.getViewSize();
+ final Rect frame = calculateCenteredCrop(mPreviewSize, rotateIfPortrait(viewSize));
final QrYuvLuminanceSource image = new QrYuvLuminanceSource(imageData,
mPreviewSize.getWidth(), mPreviewSize.getHeight());
return (QrYuvLuminanceSource)
@@ -398,17 +457,18 @@
*/
private Size getBestPreviewSize(Camera.Parameters parameters) {
final double minRatioDiffPercent = 0.1;
- final Size windowSize = mScannerCallback.getViewSize();
- final double winRatio = getRatio(windowSize.getWidth(), windowSize.getHeight());
+ final Size viewSize = rotateIfPortrait(mScannerCallback.getViewSize());
+ final double viewRatio = getRatio(viewSize);
double bestChoiceRatio = 0;
Size bestChoice = new Size(0, 0);
for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
- double ratio = getRatio(size.width, size.height);
+ final Size newSize = toAndroidSize(size);
+ final double ratio = getRatio(newSize);
if (size.height * size.width > bestChoice.getWidth() * bestChoice.getHeight()
- && (Math.abs(bestChoiceRatio - winRatio) / winRatio > minRatioDiffPercent
- || Math.abs(ratio - winRatio) / winRatio <= minRatioDiffPercent)) {
- bestChoice = new Size(size.width, size.height);
- bestChoiceRatio = getRatio(size.width, size.height);
+ && (Math.abs(bestChoiceRatio - viewRatio) / viewRatio > minRatioDiffPercent
+ || Math.abs(ratio - viewRatio) / viewRatio <= minRatioDiffPercent)) {
+ bestChoice = newSize;
+ bestChoiceRatio = ratio;
}
}
return bestChoice;
@@ -419,25 +479,26 @@
* picture size and aspect ratio to choose the best one.
*/
private Size getBestPictureSize(Camera.Parameters parameters) {
- final Camera.Size previewSize = parameters.getPreviewSize();
- final double previewRatio = getRatio(previewSize.width, previewSize.height);
+ final Size previewSize = mPreviewSize;
+ final double previewRatio = getRatio(previewSize);
List<Size> bestChoices = new ArrayList<>();
final List<Size> similarChoices = new ArrayList<>();
// Filter by ratio
- for (Camera.Size size : parameters.getSupportedPictureSizes()) {
- double ratio = getRatio(size.width, size.height);
+ for (Camera.Size picSize : parameters.getSupportedPictureSizes()) {
+ final Size size = toAndroidSize(picSize);
+ final double ratio = getRatio(size);
if (ratio == previewRatio) {
- bestChoices.add(new Size(size.width, size.height));
+ bestChoices.add(size);
} else if (Math.abs(ratio - previewRatio) < MAX_RATIO_DIFF) {
- similarChoices.add(new Size(size.width, size.height));
+ similarChoices.add(size);
}
}
if (bestChoices.size() == 0 && similarChoices.size() == 0) {
Log.d(TAG, "No proper picture size, return default picture size");
Camera.Size defaultPictureSize = parameters.getPictureSize();
- return new Size(defaultPictureSize.width, defaultPictureSize.height);
+ return toAndroidSize(defaultPictureSize);
}
if (bestChoices.size() == 0) {
@@ -447,7 +508,7 @@
// Get the best by area
int bestAreaDifference = Integer.MAX_VALUE;
Size bestChoice = null;
- final int previewArea = previewSize.width * previewSize.height;
+ final int previewArea = previewSize.getWidth() * previewSize.getHeight();
for (Size size : bestChoices) {
int areaDifference = Math.abs(size.getWidth() * size.getHeight() - previewArea);
if (areaDifference < bestAreaDifference) {
@@ -458,8 +519,20 @@
return bestChoice;
}
- private double getRatio(double x, double y) {
- return (x < y) ? x / y : y / x;
+ private Size rotateIfPortrait(Size size) {
+ if (mPreviewInPortrait) {
+ return new Size(size.getHeight(), size.getWidth());
+ } else {
+ return size;
+ }
+ }
+
+ private double getRatio(Size size) {
+ return size.getHeight() / (double) size.getWidth();
+ }
+
+ private Size toAndroidSize(Camera.Size size) {
+ return new Size(size.width, size.height);
}
@VisibleForTesting
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS b/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS
index b9449ac..50bfe8c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS
@@ -1,6 +1,5 @@
# Default reviewers for this and subdirectories.
andychou@google.com
-arcwang@google.com
asapperstein@google.com
changbetty@google.com
qal@google.com
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java
index b86f4b3..eac69234 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java
@@ -23,7 +23,6 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -38,12 +37,14 @@
import android.content.IntentFilter;
import android.os.UserHandle;
import android.os.UserManager;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.TelephonyManager;
import com.android.settingslib.R;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settingslib.utils.ThreadUtils;
import org.junit.Before;
import org.junit.Rule;
@@ -54,6 +55,8 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
import org.robolectric.shadow.api.Shadow;
import java.util.ArrayList;
@@ -61,7 +64,7 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothAdapter.class})
+@Config(shadows = {ShadowBluetoothAdapter.class, BluetoothEventManagerTest.ShadowThreadUtils.class})
public class BluetoothEventManagerTest {
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@@ -100,6 +103,8 @@
private BluetoothUtils.ErrorListener mErrorListener;
@Mock
private LocalBluetoothLeBroadcast mBroadcast;
+ @Mock
+ private UserManager mUserManager;
private Context mContext;
private Intent mIntent;
@@ -130,6 +135,7 @@
mCachedDevice1 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice1);
mCachedDevice2 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice2);
mCachedDevice3 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice3);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
BluetoothUtils.setErrorListener(mErrorListener);
}
@@ -196,6 +202,7 @@
* callback.
*/
@Test
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
public void dispatchProfileConnectionStateChanged_registerCallback_shouldDispatchCallback() {
mBluetoothEventManager.registerCallback(mBluetoothCallback);
@@ -208,10 +215,12 @@
/**
* dispatchProfileConnectionStateChanged should not call {@link
- * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded when audio sharing flag is off.
+ * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded and
+ * {@link LocalBluetoothLeBroadcast}#handleProfileConnected when audio sharing flag is off.
*/
@Test
- public void dispatchProfileConnectionStateChanged_flagOff_noUpdateFallbackDevice() {
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
+ public void dispatchProfileConnectionStateChanged_flagOff_noCallToBroadcastProfile() {
setUpAudioSharing(/* enableFlag= */ false, /* enableFeature= */ true, /* enableProfile= */
true, /* workProfile= */ false);
mBluetoothEventManager.dispatchProfileConnectionStateChanged(
@@ -219,16 +228,19 @@
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
- verify(mBroadcast, times(0)).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).handleProfileConnected(any(), anyInt(), any());
}
/**
* dispatchProfileConnectionStateChanged should not call {@link
- * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded when the device does not
- * support audio sharing.
+ * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded and
+ * {@link LocalBluetoothLeBroadcast}#handleProfileConnected when the device does not support
+ * audio sharing.
*/
@Test
- public void dispatchProfileConnectionStateChanged_notSupport_noUpdateFallbackDevice() {
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
+ public void dispatchProfileConnectionStateChanged_notSupport_noCallToBroadcastProfile() {
setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ false, /* enableProfile= */
true, /* workProfile= */ false);
mBluetoothEventManager.dispatchProfileConnectionStateChanged(
@@ -236,7 +248,8 @@
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
- verify(mBroadcast, times(0)).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).handleProfileConnected(any(), anyInt(), any());
}
/**
@@ -245,6 +258,7 @@
* not ready.
*/
@Test
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
public void dispatchProfileConnectionStateChanged_profileNotReady_noUpdateFallbackDevice() {
setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ true, /* enableProfile= */
false, /* workProfile= */ false);
@@ -253,7 +267,7 @@
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
- verify(mBroadcast, times(0)).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
}
/**
@@ -262,6 +276,7 @@
* other than LE_AUDIO_BROADCAST_ASSISTANT or state other than STATE_DISCONNECTED.
*/
@Test
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
public void dispatchProfileConnectionStateChanged_notAssistantProfile_noUpdateFallbackDevice() {
setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ true, /* enableProfile= */
true, /* workProfile= */ false);
@@ -270,16 +285,17 @@
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.LE_AUDIO);
- verify(mBroadcast, times(0)).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
}
/**
* dispatchProfileConnectionStateChanged should not call {@link
- * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded when triggered for
- * work profile.
+ * LocalBluetoothLeBroadcast}#updateFallbackActiveDeviceIfNeeded and
+ * {@link LocalBluetoothLeBroadcast}#handleProfileConnected when triggered for work profile.
*/
@Test
- public void dispatchProfileConnectionStateChanged_workProfile_noUpdateFallbackDevice() {
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
+ public void dispatchProfileConnectionStateChanged_workProfile_noCallToBroadcastProfile() {
setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ true, /* enableProfile= */
true, /* workProfile= */ true);
mBluetoothEventManager.dispatchProfileConnectionStateChanged(
@@ -287,7 +303,8 @@
BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
- verify(mBroadcast).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).handleProfileConnected(any(), anyInt(), any());
}
/**
@@ -296,7 +313,8 @@
* disconnected and audio sharing is enabled.
*/
@Test
- public void dispatchProfileConnectionStateChanged_audioSharing_updateFallbackDevice() {
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
+ public void dispatchProfileConnectionStateChanged_assistDisconnected_updateFallbackDevice() {
setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ true, /* enableProfile= */
true, /* workProfile= */ false);
mBluetoothEventManager.dispatchProfileConnectionStateChanged(
@@ -305,6 +323,27 @@
BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
verify(mBroadcast).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast, never()).handleProfileConnected(any(), anyInt(), any());
+ }
+
+ /**
+ * dispatchProfileConnectionStateChanged should call {@link
+ * LocalBluetoothLeBroadcast}#handleProfileConnected when assistant profile is connected and
+ * audio sharing is enabled.
+ */
+ @Test
+ @EnableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE)
+ public void dispatchProfileConnectionStateChanged_assistConnected_handleStateChanged() {
+ setUpAudioSharing(/* enableFlag= */ true, /* enableFeature= */ true, /* enableProfile= */
+ true, /* workProfile= */ false);
+ mBluetoothEventManager.dispatchProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT);
+
+ verify(mBroadcast, never()).updateFallbackActiveDeviceIfNeeded();
+ verify(mBroadcast).handleProfileConnected(mCachedBluetoothDevice,
+ BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT, mBtManager);
}
private void setUpAudioSharing(boolean enableFlag, boolean enableFeature,
@@ -325,13 +364,19 @@
LocalBluetoothLeBroadcastAssistant assistant =
mock(LocalBluetoothLeBroadcastAssistant.class);
when(assistant.isProfileReady()).thenReturn(enableProfile);
- LocalBluetoothProfileManager profileManager = mock(LocalBluetoothProfileManager.class);
- when(profileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast);
- when(profileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(assistant);
- when(mBtManager.getProfileManager()).thenReturn(profileManager);
- UserManager userManager = mock(UserManager.class);
- when(mContext.getSystemService(UserManager.class)).thenReturn(userManager);
- when(userManager.isManagedProfile()).thenReturn(workProfile);
+ when(mLocalProfileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast);
+ when(mLocalProfileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(assistant);
+ when(mUserManager.isManagedProfile()).thenReturn(workProfile);
+ if (workProfile) {
+ mBluetoothEventManager =
+ new BluetoothEventManager(
+ mLocalAdapter,
+ mBtManager,
+ mCachedDeviceManager,
+ mContext,
+ /* handler= */ null,
+ /* userHandle= */ null);
+ }
}
@Test
@@ -665,4 +710,12 @@
verify(mBluetoothCallback).onAutoOnStateChanged(anyInt());
}
+
+ @Implements(value = ThreadUtils.class)
+ public static class ShadowThreadUtils {
+ @Implementation
+ protected static void postOnBackgroundThread(Runnable runnable) {
+ runnable.run();
+ }
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
index 0325c0e..b781412 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
@@ -1349,6 +1349,36 @@
}
@Test
+ public void isMediaDevice_returnsFalse() {
+ when(mCachedBluetoothDevice.getProfiles()).thenReturn(ImmutableList.of(mAssistant));
+ assertThat(BluetoothUtils.isMediaDevice(mCachedBluetoothDevice)).isFalse();
+ }
+
+ @Test
+ public void isMediaDevice_returnsTrue() {
+ when(mCachedBluetoothDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile));
+ assertThat(BluetoothUtils.isMediaDevice(mCachedBluetoothDevice)).isTrue();
+ }
+
+ @Test
+ public void isLeAudioSupported_returnsFalse() {
+ when(mCachedBluetoothDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile));
+ when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
+ when(mLeAudioProfile.isEnabled(mBluetoothDevice)).thenReturn(false);
+
+ assertThat(BluetoothUtils.isLeAudioSupported(mCachedBluetoothDevice)).isFalse();
+ }
+
+ @Test
+ public void isLeAudioSupported_returnsTrue() {
+ when(mCachedBluetoothDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile));
+ when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
+ when(mLeAudioProfile.isEnabled(mBluetoothDevice)).thenReturn(true);
+
+ assertThat(BluetoothUtils.isLeAudioSupported(mCachedBluetoothDevice)).isTrue();
+ }
+
+ @Test
public void isTemporaryBondDevice_hasMetadata_returnsTrue() {
when(mBluetoothDevice.getMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS))
.thenReturn(TEMP_BOND_METADATA.getBytes());
diff --git a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowColorDisplayManager.java b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowColorDisplayManager.java
index a9fd380..76b6aa8 100644
--- a/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowColorDisplayManager.java
+++ b/packages/SettingsLib/tests/robotests/testutils/com/android/settingslib/testutils/shadow/ShadowColorDisplayManager.java
@@ -28,6 +28,7 @@
public class ShadowColorDisplayManager extends org.robolectric.shadows.ShadowColorDisplayManager {
private boolean mIsReduceBrightColorsActivated;
+ private int mColorMode;
@Implementation
@SystemApi
@@ -43,4 +44,13 @@
return mIsReduceBrightColorsActivated;
}
+ @Implementation
+ public int getColorMode() {
+ return mColorMode;
+ }
+
+ @Implementation
+ public void setColorMode(int colorMode) {
+ mColorMode = colorMode;
+ }
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index c98a741..99c4e21c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -456,11 +456,16 @@
@GuardedBy("mLock")
private void loadAconfigDefaultValuesLocked(List<String> filePaths) {
for (String fileName : filePaths) {
- try (FileInputStream inputStream = new FileInputStream(fileName)) {
- loadAconfigDefaultValues(
- inputStream.readAllBytes(), mNamespaceDefaults, mAconfigDefaultFlags);
- } catch (IOException e) {
- Slog.e(LOG_TAG, "failed to read protobuf", e);
+ File f = new File(fileName);
+ if (f.isFile() && f.canRead()) {
+ try (FileInputStream inputStream = new FileInputStream(fileName)) {
+ loadAconfigDefaultValues(
+ inputStream.readAllBytes(), mNamespaceDefaults, mAconfigDefaultFlags);
+ } catch (IOException e) {
+ Slog.e(LOG_TAG, "failed to read protobuf", e);
+ }
+ } else {
+ Slog.d(LOG_TAG, "No protobuf file at " + fileName);
}
}
}
diff --git a/packages/Shell/OWNERS b/packages/Shell/OWNERS
index 576afdc..2fa707e 100644
--- a/packages/Shell/OWNERS
+++ b/packages/Shell/OWNERS
@@ -7,9 +7,7 @@
svetoslavganov@google.com
hackbod@google.com
yamasani@google.com
-toddke@google.com
patb@google.com
-cbrubaker@google.com
omakoto@google.com
michaelwr@google.com
ronish@google.com
diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml
index d887777..8a636e1 100644
--- a/packages/Shell/res/values-sv/strings.xml
+++ b/packages/Shell/res/values-sv/strings.xml
@@ -18,8 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Skal"</string>
<string name="bugreport_notification_channel" msgid="2574150205913861141">"Felrapporter"</string>
- <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Felrapporten <xliff:g id="ID">#%d</xliff:g> genereras"</string>
- <string name="bugreport_finished_title" msgid="4429132808670114081">"Felrapporten <xliff:g id="ID">#%d</xliff:g> har skapats"</string>
+ <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Felrapport <xliff:g id="ID">#%d</xliff:g> genereras"</string>
+ <string name="bugreport_finished_title" msgid="4429132808670114081">"Felrapport <xliff:g id="ID">#%d</xliff:g> har skapats"</string>
<string name="bugreport_updating_title" msgid="4423539949559634214">"Lägger till information i felrapporten"</string>
<string name="bugreport_updating_wait" msgid="3322151947853929470">"Vänta …"</string>
<string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Felrapporten visas på mobilen inom kort"</string>
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index f2c76ba..7e8d549 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -203,6 +203,16 @@
}
flag {
+ name: "notifications_hun_shared_animation_values"
+ namespace: "systemui"
+ description: "Adds a shared class for fetching HUN animation values."
+ bug: "393369891"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "notification_undo_guts_on_config_changed"
namespace: "systemui"
description: "Fixes a bug where a theme or font change while notification guts were open"
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ComposableControllerFactory.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ComposableControllerFactory.kt
new file mode 100644
index 0000000..c842159
--- /dev/null
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ComposableControllerFactory.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2025 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.systemui.animation
+
+import android.content.ComponentName
+import android.util.Log
+import com.android.systemui.animation.ActivityTransitionAnimator.Controller
+import com.android.systemui.animation.ActivityTransitionAnimator.ControllerFactory
+import kotlinx.coroutines.flow.MutableStateFlow
+
+private const val TAG = "ComposableControllerFactory"
+
+/**
+ * [ControllerFactory] extension for Compose. Since composables are not guaranteed to be part of the
+ * composition when [ControllerFactory.createController] is called, this class provides a way for
+ * the composable to register itself at the time of composition, and deregister itself when
+ * disposed.
+ */
+abstract class ComposableControllerFactory(
+ cookie: ActivityTransitionAnimator.TransitionCookie,
+ component: ComponentName?,
+ launchCujType: Int? = null,
+ returnCujType: Int? = null,
+) : ControllerFactory(cookie, component, launchCujType, returnCujType) {
+ /**
+ * The object to be used to create [Controller]s, when its associate composable is in the
+ * composition.
+ */
+ protected val expandable = MutableStateFlow<Expandable?>(null)
+
+ /** To be called when the composable to be animated enters composition. */
+ fun onCompose(expandable: Expandable) {
+ if (TransitionAnimator.DEBUG) {
+ Log.d(TAG, "Composable entered composition (expandable=$expandable")
+ }
+ this.expandable.value = expandable
+ }
+
+ /** To be called when the composable to be animated exits composition. */
+ fun onDispose() {
+ if (TransitionAnimator.DEBUG) {
+ Log.d(TAG, "Composable left composition (expandable=${this.expandable.value}")
+ }
+ this.expandable.value = null
+ }
+}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/Expandable.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/Expandable.kt
index 1e3c4c9..a352b1e 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/Expandable.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/Expandable.kt
@@ -84,6 +84,7 @@
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
import com.android.compose.modifiers.thenIf
import com.android.compose.ui.graphics.FullScreenComposeViewInOverlay
+import com.android.systemui.animation.ComposableControllerFactory
import com.android.systemui.animation.Expandable
import com.android.systemui.animation.TransitionAnimator
import kotlin.math.max
@@ -119,6 +120,10 @@
* }
* ```
*
+ * [transitionControllerFactory] must be defined when this [Expandable] is registered for a
+ * long-term launch or return animation, to ensure that animation controllers can be created
+ * correctly.
+ *
* @sample com.android.systemui.compose.gallery.ActivityLaunchScreen
* @sample com.android.systemui.compose.gallery.DialogLaunchScreen
*/
@@ -134,10 +139,17 @@
// TODO(b/285250939): Default this to true then remove once the Compose QS expandables have
// proven that the new implementation is robust.
useModifierBasedImplementation: Boolean = false,
+ transitionControllerFactory: ComposableControllerFactory? = null,
content: @Composable (Expandable) -> Unit,
) {
Expandable(
- rememberExpandableController(color, shape, contentColor, borderStroke),
+ rememberExpandableController(
+ color,
+ shape,
+ contentColor,
+ borderStroke,
+ transitionControllerFactory,
+ ),
modifier,
onClick,
interactionSource,
@@ -183,6 +195,17 @@
) {
val controller = controller as ExpandableControllerImpl
+ if (controller.transitionControllerFactory != null) {
+ DisposableEffect(controller.transitionControllerFactory) {
+ // Notify the transition controller factory that the expandable is now available, so it
+ // can move forward with any pending requests.
+ controller.transitionControllerFactory.onCompose(controller.expandable)
+ // Once this composable is gone, the transition controller factory must be notified so
+ // it doesn't accepts requests providing stale content.
+ onDispose { controller.transitionControllerFactory.onDispose() }
+ }
+ }
+
if (useModifierBasedImplementation) {
Box(modifier.expandable(controller, onClick, interactionSource)) {
WrappedContent(controller.expandable, controller.contentColor, content)
@@ -308,34 +331,28 @@
interactionSource: MutableInteractionSource? = null,
): Modifier {
val controller = controller as ExpandableControllerImpl
+ val graphicsLayer = rememberGraphicsLayer()
val isAnimating = controller.isAnimating
- val drawInOverlayModifier =
- if (isAnimating) {
- val graphicsLayer = rememberGraphicsLayer()
-
- FullScreenComposeViewInOverlay(controller.overlay) { view ->
- Modifier.then(DrawExpandableInOverlayElement(view, controller, graphicsLayer))
- }
-
- Modifier.drawWithContent { graphicsLayer.record { this@drawWithContent.drawContent() } }
- } else {
- null
+ if (isAnimating) {
+ FullScreenComposeViewInOverlay(controller.overlay) { view ->
+ Modifier.then(DrawExpandableInOverlayElement(view, controller, graphicsLayer))
}
+ }
+ val drawContent = !isAnimating && !controller.isDialogShowing
return this.thenIf(onClick != null) { Modifier.minimumInteractiveComponentSize() }
- .thenIf(!isAnimating) {
+ .thenIf(drawContent) {
Modifier.border(controller)
.then(clickModifier(controller, onClick, interactionSource))
.background(controller.color, controller.shape)
}
- .thenIf(drawInOverlayModifier != null) { drawInOverlayModifier!! }
.onPlaced { controller.boundsInComposeViewRoot = it.boundsInRoot() }
- .thenIf(!isAnimating && controller.isDialogShowing) {
- Modifier.layout { measurable, constraints ->
- measurable.measure(constraints).run {
- layout(width, height) { /* Do not place/draw. */ }
- }
+ .drawWithContent {
+ graphicsLayer.record { this@drawWithContent.drawContent() }
+
+ if (drawContent) {
+ drawLayer(graphicsLayer)
}
}
}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/animation/ExpandableController.kt b/packages/SystemUI/compose/core/src/com/android/compose/animation/ExpandableController.kt
index a03c896..72da175e 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/animation/ExpandableController.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/animation/ExpandableController.kt
@@ -47,6 +47,7 @@
import androidx.compose.ui.unit.LayoutDirection
import com.android.internal.jank.InteractionJankMonitor
import com.android.systemui.animation.ActivityTransitionAnimator
+import com.android.systemui.animation.ComposableControllerFactory
import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
@@ -77,6 +78,7 @@
shape: Shape,
contentColor: Color = contentColorFor(color),
borderStroke: BorderStroke? = null,
+ transitionControllerFactory: ComposableControllerFactory? = null,
): ExpandableController {
val composeViewRoot = LocalView.current
val density = LocalDensity.current
@@ -95,6 +97,7 @@
composeViewRoot,
density,
layoutDirection,
+ transitionControllerFactory,
) {
ExpandableControllerImpl(
color,
@@ -103,6 +106,7 @@
borderStroke,
composeViewRoot,
density,
+ transitionControllerFactory,
layoutDirection,
{ isComposed },
)
@@ -127,6 +131,7 @@
internal val borderStroke: BorderStroke?,
internal val composeViewRoot: View,
internal val density: Density,
+ internal val transitionControllerFactory: ComposableControllerFactory?,
private val layoutDirection: LayoutDirection,
private val isComposed: () -> Boolean,
) : ExpandableController {
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/AndroidColorScheme.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/AndroidColorScheme.kt
index ed144bd..375dade 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/AndroidColorScheme.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/AndroidColorScheme.kt
@@ -78,6 +78,10 @@
val underSurface: Color,
val weatherTemp: Color,
val widgetBackground: Color,
+ val surfaceEffect0: Color,
+ val surfaceEffect1: Color,
+ val surfaceEffect2: Color,
+ val surfaceEffect3: Color,
) {
companion object {
internal fun color(context: Context, @ColorRes id: Int): Color {
@@ -123,6 +127,10 @@
underSurface = color(context, R.color.customColorUnderSurface),
weatherTemp = color(context, R.color.customColorWeatherTemp),
widgetBackground = color(context, R.color.customColorWidgetBackground),
+ surfaceEffect0 = color(context, R.color.surface_effect_0),
+ surfaceEffect1 = color(context, R.color.surface_effect_1),
+ surfaceEffect2 = color(context, R.color.surface_effect_2),
+ surfaceEffect3 = color(context, R.color.surface_effect_3),
)
}
}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
index 71ec63c..84370ed 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/PlatformTheme.kt
@@ -31,6 +31,7 @@
import com.android.compose.theme.typography.TypefaceNames
import com.android.compose.theme.typography.TypefaceTokens
import com.android.compose.theme.typography.TypographyTokens
+import com.android.compose.theme.typography.VariableFontTypeScaleEmphasizedTokens
import com.android.compose.theme.typography.platformTypography
import com.android.compose.windowsizeclass.LocalWindowSizeClass
import com.android.compose.windowsizeclass.calculateWindowSizeClass
@@ -44,9 +45,15 @@
val colorScheme = remember(context, isDarkTheme) { platformColorScheme(isDarkTheme, context) }
val androidColorScheme = remember(context) { AndroidColorScheme(context) }
val typefaceNames = remember(context) { TypefaceNames.get(context) }
+ val typefaceTokens = remember(typefaceNames) { TypefaceTokens(typefaceNames) }
val typography =
- remember(typefaceNames) {
- platformTypography(TypographyTokens(TypeScaleTokens(TypefaceTokens(typefaceNames))))
+ remember(typefaceTokens) {
+ platformTypography(
+ TypographyTokens(
+ TypeScaleTokens(typefaceTokens),
+ VariableFontTypeScaleEmphasizedTokens(typefaceTokens),
+ )
+ )
}
val windowSizeClass = calculateWindowSizeClass()
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/PlatformTypography.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/PlatformTypography.kt
index 1ce1ae3..652f946 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/PlatformTypography.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/PlatformTypography.kt
@@ -16,6 +16,7 @@
package com.android.compose.theme.typography
+import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Typography
@@ -25,6 +26,7 @@
* Do not use directly and call [MaterialTheme.typography] instead to access the different text
* styles.
*/
+@OptIn(ExperimentalMaterial3ExpressiveApi::class)
internal fun platformTypography(typographyTokens: TypographyTokens): Typography {
return Typography(
displayLarge = typographyTokens.displayLarge,
@@ -42,5 +44,21 @@
labelLarge = typographyTokens.labelLarge,
labelMedium = typographyTokens.labelMedium,
labelSmall = typographyTokens.labelSmall,
+ // GSF emphasized tokens
+ displayLargeEmphasized = typographyTokens.displayLargeEmphasized,
+ displayMediumEmphasized = typographyTokens.displayMediumEmphasized,
+ displaySmallEmphasized = typographyTokens.displaySmallEmphasized,
+ headlineLargeEmphasized = typographyTokens.headlineLargeEmphasized,
+ headlineMediumEmphasized = typographyTokens.headlineMediumEmphasized,
+ headlineSmallEmphasized = typographyTokens.headlineSmallEmphasized,
+ titleLargeEmphasized = typographyTokens.titleLargeEmphasized,
+ titleMediumEmphasized = typographyTokens.titleMediumEmphasized,
+ titleSmallEmphasized = typographyTokens.titleSmallEmphasized,
+ bodyLargeEmphasized = typographyTokens.bodyLargeEmphasized,
+ bodyMediumEmphasized = typographyTokens.bodyMediumEmphasized,
+ bodySmallEmphasized = typographyTokens.bodySmallEmphasized,
+ labelLargeEmphasized = typographyTokens.labelLargeEmphasized,
+ labelMediumEmphasized = typographyTokens.labelMediumEmphasized,
+ labelSmallEmphasized = typographyTokens.labelSmallEmphasized,
)
}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypefaceTokens.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypefaceTokens.kt
index 13acfd6..280b8d9 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypefaceTokens.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypefaceTokens.kt
@@ -34,6 +34,29 @@
private val brandFont = DeviceFontFamilyName(typefaceNames.brand)
private val plainFont = DeviceFontFamilyName(typefaceNames.plain)
+ // Google Sans Flex emphasized styles
+ private val displayLargeEmphasizedFont =
+ DeviceFontFamilyName("variable-display-large-emphasized")
+ private val displayMediumEmphasizedFont =
+ DeviceFontFamilyName("variable-display-medium-emphasized")
+ private val displaySmallEmphasizedFont =
+ DeviceFontFamilyName("variable-display-small-emphasized")
+ private val headlineLargeEmphasizedFont =
+ DeviceFontFamilyName("variable-headline-large-emphasized")
+ private val headlineMediumEmphasizedFont =
+ DeviceFontFamilyName("variable-headline-medium-emphasized")
+ private val headlineSmallEmphasizedFont =
+ DeviceFontFamilyName("variable-headline-small-emphasized")
+ private val titleLargeEmphasizedFont = DeviceFontFamilyName("variable-title-large-emphasized")
+ private val titleMediumEmphasizedFont = DeviceFontFamilyName("variable-title-medium-emphasized")
+ private val titleSmallEmphasizedFont = DeviceFontFamilyName("variable-title-small-emphasized")
+ private val bodyLargeEmphasizedFont = DeviceFontFamilyName("variable-body-large-emphasized")
+ private val bodyMediumEmphasizedFont = DeviceFontFamilyName("variable-body-medium-emphasized")
+ private val bodySmallEmphasizedFont = DeviceFontFamilyName("variable-body-small-emphasized")
+ private val labelLargeEmphasizedFont = DeviceFontFamilyName("variable-label-large-emphasized")
+ private val labelMediumEmphasizedFont = DeviceFontFamilyName("variable-label-medium-emphasized")
+ private val labelSmallEmphasizedFont = DeviceFontFamilyName("variable-label-small-emphasized")
+
val brand =
FontFamily(
Font(brandFont, weight = WeightMedium),
@@ -44,6 +67,22 @@
Font(plainFont, weight = WeightMedium),
Font(plainFont, weight = WeightRegular),
)
+
+ val displayLargeEmphasized = FontFamily(Font(displayLargeEmphasizedFont))
+ val displayMediumEmphasized = FontFamily(Font(displayMediumEmphasizedFont))
+ val displaySmallEmphasized = FontFamily(Font(displaySmallEmphasizedFont))
+ val headlineLargeEmphasized = FontFamily(Font(headlineLargeEmphasizedFont))
+ val headlineMediumEmphasized = FontFamily(Font(headlineMediumEmphasizedFont))
+ val headlineSmallEmphasized = FontFamily(Font(headlineSmallEmphasizedFont))
+ val titleLargeEmphasized = FontFamily(Font(titleLargeEmphasizedFont))
+ val titleMediumEmphasized = FontFamily(Font(titleMediumEmphasizedFont))
+ val titleSmallEmphasized = FontFamily(Font(titleSmallEmphasizedFont))
+ val bodyLargeEmphasized = FontFamily(Font(bodyLargeEmphasizedFont))
+ val bodyMediumEmphasized = FontFamily(Font(bodyMediumEmphasizedFont))
+ val bodySmallEmphasized = FontFamily(Font(bodySmallEmphasizedFont))
+ val labelLargeEmphasized = FontFamily(Font(labelLargeEmphasizedFont))
+ val labelMediumEmphasized = FontFamily(Font(labelMediumEmphasizedFont))
+ val labelSmallEmphasized = FontFamily(Font(labelSmallEmphasizedFont))
}
internal data class TypefaceNames
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypographyTokens.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypographyTokens.kt
index 38aadb8..4115647 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypographyTokens.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/TypographyTokens.kt
@@ -18,7 +18,10 @@
import androidx.compose.ui.text.TextStyle
-internal class TypographyTokens(typeScaleTokens: TypeScaleTokens) {
+internal class TypographyTokens(
+ typeScaleTokens: TypeScaleTokens,
+ variableTypeScaleTokens: VariableFontTypeScaleEmphasizedTokens,
+) {
val bodyLarge =
TextStyle(
fontFamily = typeScaleTokens.bodyLargeFont,
@@ -139,4 +142,112 @@
lineHeight = typeScaleTokens.titleSmallLineHeight,
letterSpacing = typeScaleTokens.titleSmallTracking,
)
+ // GSF emphasized styles
+ // note: we don't need to define fontWeight or axes values because they are pre-defined
+ // as part of the font family in fonts_customization.xml (for performance optimization)
+ val displayLargeEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.displayLargeFont,
+ fontSize = variableTypeScaleTokens.displayLargeSize,
+ lineHeight = variableTypeScaleTokens.displayLargeLineHeight,
+ letterSpacing = variableTypeScaleTokens.displayLargeTracking,
+ )
+ val displayMediumEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.displayMediumFont,
+ fontSize = variableTypeScaleTokens.displayMediumSize,
+ lineHeight = variableTypeScaleTokens.displayMediumLineHeight,
+ letterSpacing = variableTypeScaleTokens.displayMediumTracking,
+ )
+ val displaySmallEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.displaySmallFont,
+ fontSize = variableTypeScaleTokens.displaySmallSize,
+ lineHeight = variableTypeScaleTokens.displaySmallLineHeight,
+ letterSpacing = variableTypeScaleTokens.displaySmallTracking,
+ )
+ val headlineLargeEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.headlineLargeFont,
+ fontSize = variableTypeScaleTokens.headlineLargeSize,
+ lineHeight = variableTypeScaleTokens.headlineLargeLineHeight,
+ letterSpacing = variableTypeScaleTokens.headlineLargeTracking,
+ )
+ val headlineMediumEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.headlineMediumFont,
+ fontSize = variableTypeScaleTokens.headlineMediumSize,
+ lineHeight = variableTypeScaleTokens.headlineMediumLineHeight,
+ letterSpacing = variableTypeScaleTokens.headlineMediumTracking,
+ )
+ val headlineSmallEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.headlineSmallFont,
+ fontSize = variableTypeScaleTokens.headlineSmallSize,
+ lineHeight = variableTypeScaleTokens.headlineSmallLineHeight,
+ letterSpacing = variableTypeScaleTokens.headlineSmallTracking,
+ )
+ val titleLargeEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.titleLargeFont,
+ fontSize = variableTypeScaleTokens.titleLargeSize,
+ lineHeight = variableTypeScaleTokens.titleLargeLineHeight,
+ letterSpacing = variableTypeScaleTokens.titleLargeTracking,
+ )
+ val titleMediumEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.titleMediumFont,
+ fontSize = variableTypeScaleTokens.titleMediumSize,
+ lineHeight = variableTypeScaleTokens.titleMediumLineHeight,
+ letterSpacing = variableTypeScaleTokens.titleMediumTracking,
+ )
+ val titleSmallEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.titleSmallFont,
+ fontSize = variableTypeScaleTokens.titleSmallSize,
+ lineHeight = variableTypeScaleTokens.titleSmallLineHeight,
+ letterSpacing = variableTypeScaleTokens.titleSmallTracking,
+ )
+ val bodyLargeEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.bodyLargeFont,
+ fontSize = variableTypeScaleTokens.bodyLargeSize,
+ lineHeight = variableTypeScaleTokens.bodyLargeLineHeight,
+ letterSpacing = variableTypeScaleTokens.bodyLargeTracking,
+ )
+ val bodyMediumEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.bodyMediumFont,
+ fontSize = variableTypeScaleTokens.bodyMediumSize,
+ lineHeight = variableTypeScaleTokens.bodyMediumLineHeight,
+ letterSpacing = variableTypeScaleTokens.bodyMediumTracking,
+ )
+ val bodySmallEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.bodySmallFont,
+ fontSize = variableTypeScaleTokens.bodySmallSize,
+ lineHeight = variableTypeScaleTokens.bodySmallLineHeight,
+ letterSpacing = variableTypeScaleTokens.bodySmallTracking,
+ )
+ val labelLargeEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.labelLargeFont,
+ fontSize = variableTypeScaleTokens.labelLargeSize,
+ lineHeight = variableTypeScaleTokens.labelLargeLineHeight,
+ letterSpacing = variableTypeScaleTokens.labelLargeTracking,
+ )
+ val labelMediumEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.labelMediumFont,
+ fontSize = variableTypeScaleTokens.labelMediumSize,
+ lineHeight = variableTypeScaleTokens.labelMediumLineHeight,
+ letterSpacing = variableTypeScaleTokens.labelMediumTracking,
+ )
+ val labelSmallEmphasized =
+ TextStyle(
+ fontFamily = variableTypeScaleTokens.labelSmallFont,
+ fontSize = variableTypeScaleTokens.labelSmallSize,
+ lineHeight = variableTypeScaleTokens.labelSmallLineHeight,
+ letterSpacing = variableTypeScaleTokens.labelSmallTracking,
+ )
}
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/VariableFontTypeScaleEmphasizedTokens.kt b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/VariableFontTypeScaleEmphasizedTokens.kt
new file mode 100644
index 0000000..52b9390
--- /dev/null
+++ b/packages/SystemUI/compose/core/src/com/android/compose/theme/typography/VariableFontTypeScaleEmphasizedTokens.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2025 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.compose.theme.typography
+
+import androidx.compose.ui.unit.sp
+
+internal class VariableFontTypeScaleEmphasizedTokens(typefaceTokens: TypefaceTokens) {
+ val bodyLargeFont = typefaceTokens.bodyLargeEmphasized
+ val bodyLargeLineHeight = 24.0.sp
+ val bodyLargeSize = 16.sp
+ val bodyLargeTracking = 0.0.sp
+ val bodyMediumFont = typefaceTokens.bodyMediumEmphasized
+ val bodyMediumLineHeight = 20.0.sp
+ val bodyMediumSize = 14.sp
+ val bodyMediumTracking = 0.0.sp
+ val bodySmallFont = typefaceTokens.bodySmallEmphasized
+ val bodySmallLineHeight = 16.0.sp
+ val bodySmallSize = 12.sp
+ val bodySmallTracking = 0.0.sp
+ val displayLargeFont = typefaceTokens.displayLargeEmphasized
+ val displayLargeLineHeight = 64.0.sp
+ val displayLargeSize = 57.sp
+ val displayLargeTracking = 0.0.sp
+ val displayMediumFont = typefaceTokens.displayMediumEmphasized
+ val displayMediumLineHeight = 52.0.sp
+ val displayMediumSize = 45.sp
+ val displayMediumTracking = 0.0.sp
+ val displaySmallFont = typefaceTokens.displaySmallEmphasized
+ val displaySmallLineHeight = 44.0.sp
+ val displaySmallSize = 36.sp
+ val displaySmallTracking = 0.0.sp
+ val headlineLargeFont = typefaceTokens.headlineLargeEmphasized
+ val headlineLargeLineHeight = 40.0.sp
+ val headlineLargeSize = 32.sp
+ val headlineLargeTracking = 0.0.sp
+ val headlineMediumFont = typefaceTokens.headlineMediumEmphasized
+ val headlineMediumLineHeight = 36.0.sp
+ val headlineMediumSize = 28.sp
+ val headlineMediumTracking = 0.0.sp
+ val headlineSmallFont = typefaceTokens.headlineSmallEmphasized
+ val headlineSmallLineHeight = 32.0.sp
+ val headlineSmallSize = 24.sp
+ val headlineSmallTracking = 0.0.sp
+ val labelLargeFont = typefaceTokens.labelLargeEmphasized
+ val labelLargeLineHeight = 20.0.sp
+ val labelLargeSize = 14.sp
+ val labelLargeTracking = 0.0.sp
+ val labelMediumFont = typefaceTokens.labelMediumEmphasized
+ val labelMediumLineHeight = 16.0.sp
+ val labelMediumSize = 12.sp
+ val labelMediumTracking = 0.0.sp
+ val labelSmallFont = typefaceTokens.labelSmallEmphasized
+ val labelSmallLineHeight = 16.0.sp
+ val labelSmallSize = 11.sp
+ val labelSmallTracking = 0.0.sp
+ val titleLargeFont = typefaceTokens.titleLargeEmphasized
+ val titleLargeLineHeight = 28.0.sp
+ val titleLargeSize = 22.sp
+ val titleLargeTracking = 0.0.sp
+ val titleMediumFont = typefaceTokens.titleMediumEmphasized
+ val titleMediumLineHeight = 24.0.sp
+ val titleMediumSize = 16.sp
+ val titleMediumTracking = 0.0.sp
+ val titleSmallFont = typefaceTokens.titleSmallEmphasized
+ val titleSmallLineHeight = 20.0.sp
+ val titleSmallSize = 14.sp
+ val titleSmallTracking = 0.0.sp
+}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt
index 48dee24..f1b273a 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt
@@ -24,6 +24,7 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
import com.android.compose.animation.scene.ContentScope
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.UserAction
@@ -102,6 +103,8 @@
viewModel,
dialogFactory,
Modifier.element(Bouncer.Elements.Content)
+ // TODO(b/393516240): Use the same sysuiResTag() as views instead.
+ .testTag(Bouncer.Elements.Content.testTag)
.overscroll(verticalOverscrollEffect)
.sysuiResTag(Bouncer.TestTags.Root)
.fillMaxSize(),
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt
index 5e61af6..aa07370 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt
@@ -19,6 +19,7 @@
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
import com.android.compose.animation.scene.ContentScope
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
@@ -55,7 +56,11 @@
@Composable
override fun ContentScope.Content(modifier: Modifier) {
- LockscreenScene(lockscreenContent = lockscreenContent, modifier = modifier)
+ LockscreenScene(
+ lockscreenContent = lockscreenContent,
+ // TODO(b/393516240): Use the same sysuiResTag() as views instead.
+ modifier = modifier.testTag(key.rootElementKey.testTag),
+ )
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/SmartSpaceSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/SmartSpaceSection.kt
index c7b797d..505044a 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/SmartSpaceSection.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/SmartSpaceSection.kt
@@ -159,7 +159,7 @@
factory = { context ->
FrameLayout(context).apply {
addView(
- lockscreenSmartspaceController.buildAndConnectWeatherView(this).apply {
+ lockscreenSmartspaceController.buildAndConnectWeatherView(this, false).apply {
layoutParams =
FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
@@ -184,7 +184,7 @@
factory = { context ->
FrameLayout(context).apply {
addView(
- lockscreenSmartspaceController.buildAndConnectDateView(this).apply {
+ lockscreenSmartspaceController.buildAndConnectDateView(this, false).apply {
layoutParams =
FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/volume/ui/composable/VolumeSlider.kt b/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/volume/ui/composable/VolumeSlider.kt
index b11c83c..4b3ebc2 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/volume/ui/composable/VolumeSlider.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/volume/panel/component/volume/ui/composable/VolumeSlider.kt
@@ -35,9 +35,9 @@
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon as MaterialIcon
import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Slider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -73,11 +73,15 @@
import com.android.systemui.res.R
import com.android.systemui.volume.haptics.ui.VolumeHapticsConfigsProvider
import com.android.systemui.volume.panel.component.volume.slider.ui.viewmodel.SliderState
+import com.android.systemui.volume.ui.slider.AccessibilityParams
+import com.android.systemui.volume.ui.slider.Haptics
+import com.android.systemui.volume.ui.slider.Slider
import kotlin.math.round
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun VolumeSlider(
state: SliderState,
@@ -102,17 +106,6 @@
return
}
- val value by valueState(state)
- val interactionSource = remember { MutableInteractionSource() }
- val hapticsViewModel: SliderHapticsViewModel? =
- setUpHapticsViewModel(
- value,
- state.valueRange,
- state.hapticFilter,
- interactionSource,
- hapticsViewModelFactory,
- )
-
Column(modifier = modifier.animateContentSize(), verticalArrangement = Arrangement.Top) {
Row(
horizontalArrangement = Arrangement.spacedBy(12.dp),
@@ -134,60 +127,30 @@
)
button?.invoke()
}
+
Slider(
- value = value,
+ value = state.value,
valueRange = state.valueRange,
- onValueChange = { newValue ->
- hapticsViewModel?.addVelocityDataPoint(newValue)
- onValueChange(newValue)
- },
- onValueChangeFinished = {
- hapticsViewModel?.onValueChangeEnded()
- onValueChangeFinished?.invoke()
- },
- enabled = state.isEnabled,
+ onValueChanged = onValueChange,
+ onValueChangeFinished = { onValueChangeFinished?.invoke() },
+ isEnabled = state.isEnabled,
+ stepDistance = state.a11yStep,
+ accessibilityParams =
+ AccessibilityParams(
+ label = state.label,
+ disabledMessage = state.disabledMessage,
+ currentStateDescription = state.a11yStateDescription,
+ ),
+ haptics =
+ hapticsViewModelFactory?.let {
+ Haptics.Enabled(
+ hapticsViewModelFactory = it,
+ hapticFilter = state.hapticFilter,
+ orientation = Orientation.Horizontal,
+ )
+ } ?: Haptics.Disabled,
modifier =
- Modifier.height(40.dp)
- .padding(top = 4.dp, bottom = 12.dp)
- .sysuiResTag(state.label)
- .clearAndSetSemantics {
- if (state.isEnabled) {
- contentDescription = state.label
- state.a11yClickDescription?.let {
- customActions =
- listOf(
- CustomAccessibilityAction(it) {
- onIconTapped()
- true
- }
- )
- }
-
- state.a11yStateDescription?.let { stateDescription = it }
- progressBarRangeInfo =
- ProgressBarRangeInfo(state.value, state.valueRange)
- } else {
- disabled()
- contentDescription =
- state.disabledMessage?.let { "${state.label}, $it" } ?: state.label
- }
- setProgress { targetValue ->
- val targetDirection =
- when {
- targetValue > value -> 1
- targetValue < value -> -1
- else -> 0
- }
-
- val newValue =
- (value + targetDirection * state.a11yStep).coerceIn(
- state.valueRange.start,
- state.valueRange.endInclusive,
- )
- onValueChange(newValue)
- true
- }
- },
+ Modifier.height(40.dp).padding(top = 4.dp, bottom = 12.dp).sysuiResTag(state.label),
)
state.disabledMessage?.let { disabledMessage ->
AnimatedVisibility(visible = !state.isEnabled) {
@@ -348,7 +311,7 @@
}
@Composable
-fun setUpHapticsViewModel(
+private fun setUpHapticsViewModel(
value: Float,
valueRange: ClosedFloatingPointRange<Float>,
hapticFilter: SliderHapticFeedbackFilter,
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
index 907b5bc..05958a2 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
@@ -169,7 +169,7 @@
Modifier.maybeElevateInContent(layoutImpl, content, key, currentTransitionStates)
}
.then(ElementModifier(layoutImpl, currentTransitionStates, content, key))
- .testTag(key.testTag)
+ .thenIf(layoutImpl.implicitTestTags) { Modifier.testTag(key.testTag) }
}
/**
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
index 53d0ee1..404f1b2 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
@@ -66,6 +66,8 @@
swipeSourceDetector: SwipeSourceDetector = DefaultEdgeDetector,
swipeDetector: SwipeDetector = DefaultSwipeDetector,
@FloatRange(from = 0.0, to = 0.5) transitionInterceptionThreshold: Float = 0.05f,
+ // TODO(b/240432457) Remove this once test utils can access the internal STLForTesting().
+ implicitTestTags: Boolean = false,
builder: SceneTransitionLayoutScope<ContentScope>.() -> Unit,
) {
SceneTransitionLayoutForTesting(
@@ -74,6 +76,7 @@
swipeSourceDetector,
swipeDetector,
transitionInterceptionThreshold,
+ implicitTestTags = implicitTestTags,
onLayoutImpl = null,
builder = builder,
)
@@ -727,10 +730,8 @@
}
/**
- * An internal version of [SceneTransitionLayout] to be used for tests.
- *
- * Important: You should use this only in tests and if you need to access the underlying
- * [SceneTransitionLayoutImpl]. In other cases, you should use [SceneTransitionLayout].
+ * An internal version of [SceneTransitionLayout] to be used for tests, that provides access to the
+ * internal [SceneTransitionLayoutImpl] and implicitly tags all scenes and elements.
*/
@Composable
internal fun SceneTransitionLayoutForTesting(
@@ -743,6 +744,7 @@
sharedElementMap: MutableMap<ElementKey, Element> = remember { mutableMapOf() },
ancestors: List<Ancestor> = remember { emptyList() },
lookaheadScope: LookaheadScope? = null,
+ implicitTestTags: Boolean = true,
builder: SceneTransitionLayoutScope<InternalContentScope>.() -> Unit,
) {
val density = LocalDensity.current
@@ -767,6 +769,7 @@
directionChangeSlop = directionChangeSlop,
defaultEffectFactory = defaultEffectFactory,
decayAnimationSpec = decayAnimationSpec,
+ implicitTestTags = implicitTestTags,
)
.also { onLayoutImpl?.invoke(it) }
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
index 53996d2..e3c4eb0 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
@@ -122,6 +122,9 @@
* This is used to enable transformations and shared elements across NestedSTLs.
*/
internal val ancestors: List<Ancestor> = emptyList(),
+
+ /** Whether elements and scene should be tagged using `Modifier.testTag`. */
+ internal val implicitTestTags: Boolean = false,
lookaheadScope: LookaheadScope? = null,
defaultEffectFactory: OverscrollFactory,
) {
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/content/Content.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/content/Content.kt
index 9ca45fe..149a9e7 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/content/Content.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/content/Content.kt
@@ -173,7 +173,7 @@
.thenIf(layoutImpl.state.isElevationPossible(content = key, element = null)) {
Modifier.container(containerState)
}
- .testTag(key.testTag)
+ .thenIf(layoutImpl.implicitTestTags) { Modifier.testTag(key.testTag) }
) {
CompositionLocalProvider(LocalOverscrollFactory provides lastFactory) {
scope.content()
@@ -301,6 +301,7 @@
sharedElementMap = layoutImpl.elements,
ancestors = ancestors,
lookaheadScope = layoutImpl.lookaheadScope,
+ implicitTestTags = layoutImpl.implicitTestTags,
)
}
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
index 338fb9b..86cbfe4 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
@@ -227,7 +227,7 @@
to = SceneB,
transitionLayout = { state ->
coroutineScope = rememberCoroutineScope()
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneA) {
Box(Modifier.size(layoutSize)) {
// Transformed element
@@ -633,7 +633,7 @@
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneA) { Box(Modifier.element(TestElements.Foo).size(20.dp)) }
scene(SceneB) {}
}
@@ -674,7 +674,7 @@
CompositionLocalProvider(
LocalOverscrollFactory provides rememberOffsetOverscrollEffectFactory()
) {
- SceneTransitionLayout(state, Modifier.size(layoutWidth, layoutHeight)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutWidth, layoutHeight)) {
scene(key = SceneA, userActions = mapOf(Swipe.Down to SceneB)) {
Spacer(Modifier.fillMaxSize())
}
@@ -734,7 +734,7 @@
CompositionLocalProvider(
LocalOverscrollFactory provides rememberOffsetOverscrollEffectFactory()
) {
- SceneTransitionLayout(state, Modifier.size(layoutWidth, layoutHeight)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutWidth, layoutHeight)) {
scene(key = SceneA, userActions = mapOf(Swipe.Down to SceneB)) {
Spacer(
Modifier.overscroll(verticalOverscrollEffect)
@@ -834,7 +834,7 @@
CompositionLocalProvider(
LocalOverscrollFactory provides rememberOffsetOverscrollEffectFactory()
) {
- SceneTransitionLayout(state, Modifier.size(layoutWidth, layoutHeight)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutWidth, layoutHeight)) {
scene(key = SceneA, userActions = mapOf(Swipe.Down to SceneB)) {
Spacer(Modifier.fillMaxSize())
}
@@ -893,7 +893,7 @@
CompositionLocalProvider(
LocalOverscrollFactory provides rememberOffsetOverscrollEffectFactory()
) {
- SceneTransitionLayout(
+ SceneTransitionLayoutForTesting(
state = state,
modifier = Modifier.size(layoutWidth, layoutHeight),
) {
@@ -970,7 +970,7 @@
rule.setContent {
touchSlop = LocalViewConfiguration.current.touchSlop
- SceneTransitionLayout(
+ SceneTransitionLayoutForTesting(
state = state,
modifier = Modifier.size(layoutWidth, layoutHeight),
) {
@@ -1057,7 +1057,7 @@
rule.setContent {
coroutineScope = rememberCoroutineScope()
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneA) {
Box(Modifier.size(layoutSize)) {
Box(
@@ -1374,7 +1374,7 @@
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state, Modifier.size(layoutSize)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutSize)) {
scene(SceneA) {
Box(Modifier.fillMaxSize()) { Foo(Modifier.align(Alignment.TopStart)) }
}
@@ -1742,7 +1742,7 @@
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Foo(offset = 0.dp) }
scene(SceneB) { Foo(offset = 20.dp) }
scene(SceneC) { Foo(offset = 40.dp) }
@@ -1828,7 +1828,7 @@
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneB) { Foo(Modifier.offset(40.dp, 60.dp)) }
// Define A after B so that Foo is placed in A during A <=> B.
@@ -1887,7 +1887,7 @@
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneA) { Foo() }
scene(SceneB) { Foo(Modifier.offset(40.dp, 60.dp)) }
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/OverlayTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/OverlayTest.kt
index 04c762f..98ecb64 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/OverlayTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/OverlayTest.kt
@@ -90,7 +90,7 @@
lateinit var coroutineScope: CoroutineScope
rule.setContent {
coroutineScope = rememberCoroutineScope()
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Box(Modifier.fillMaxSize()) { Foo() } }
overlay(OverlayA) { Foo() }
}
@@ -132,7 +132,7 @@
lateinit var coroutineScope: CoroutineScope
rule.setContent {
coroutineScope = rememberCoroutineScope()
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Box(Modifier.fillMaxSize()) { Foo() } }
overlay(OverlayA) { Foo() }
overlay(OverlayB) { Foo() }
@@ -230,7 +230,7 @@
lateinit var coroutineScope: CoroutineScope
rule.setContent {
coroutineScope = rememberCoroutineScope()
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Box(Modifier.fillMaxSize()) { MovableBar() } }
overlay(OverlayA) { MovableBar() }
overlay(OverlayB) { MovableBar() }
@@ -302,7 +302,7 @@
}
var alignment by mutableStateOf(Alignment.Center)
rule.setContent {
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Box(Modifier.fillMaxSize()) { Foo() } }
overlay(OverlayA, alignment = alignment) { Foo() }
}
@@ -761,7 +761,7 @@
val movableElementChildTag = "movableElementChildTag"
val scope =
rule.setContentAndCreateMainScope {
- SceneTransitionLayout(state) {
+ SceneTransitionLayoutForTesting(state) {
scene(SceneA) {
MovableElement(key, Modifier) {
content { Box(Modifier.testTag(movableElementChildTag).size(100.dp)) }
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/PredictiveBackHandlerTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/PredictiveBackHandlerTest.kt
index 2bf2358..366b11d 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/PredictiveBackHandlerTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/PredictiveBackHandlerTest.kt
@@ -250,7 +250,7 @@
}
rule.setContent {
- SceneTransitionLayout(state, Modifier.size(200.dp)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(200.dp)) {
scene(SceneA) { Box(Modifier.fillMaxSize()) }
overlay(OverlayA) { Box(Modifier.fillMaxSize()) }
overlay(OverlayB) { Box(Modifier.fillMaxSize()) }
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
index d7f7a51..fa7661b6 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
@@ -97,7 +97,7 @@
MutableSceneTransitionLayoutStateForTests(SceneA, EmptyTestTransitions)
}
- SceneTransitionLayout(state = layoutState, modifier = Modifier.size(LayoutSize)) {
+ SceneTransitionLayoutForTesting(state = layoutState, modifier = Modifier.size(LayoutSize)) {
scene(SceneA, userActions = mapOf(Back to SceneB)) {
Box(Modifier.fillMaxSize()) {
SharedFoo(size = 50.dp, childOffset = 0.dp, Modifier.align(Alignment.TopEnd))
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
index 751b314..11abbbe 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SwipeToSceneTest.kt
@@ -763,7 +763,7 @@
var touchSlop = 0f
rule.setContent {
touchSlop = LocalViewConfiguration.current.touchSlop
- SceneTransitionLayout(state, Modifier.size(layoutSize)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutSize)) {
scene(SceneA, userActions = mapOf(Swipe.Start to SceneB, Swipe.End to SceneC)) {
Box(Modifier.fillMaxSize())
}
@@ -837,7 +837,7 @@
rule.setContent {
touchSlop = LocalViewConfiguration.current.touchSlop
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
- SceneTransitionLayout(state, Modifier.size(layoutSize)) {
+ SceneTransitionLayoutForTesting(state, Modifier.size(layoutSize)) {
scene(SceneA, userActions = mapOf(Swipe.Start to SceneB, Swipe.End to SceneC)) {
Box(Modifier.fillMaxSize())
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/transformation/NestedElementTransformationTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/transformation/NestedElementTransformationTest.kt
index bb511bc..8b56892 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/transformation/NestedElementTransformationTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/transformation/NestedElementTransformationTest.kt
@@ -40,7 +40,7 @@
import com.android.compose.animation.scene.MutableSceneTransitionLayoutStateForTests
import com.android.compose.animation.scene.Scale
import com.android.compose.animation.scene.SceneKey
-import com.android.compose.animation.scene.SceneTransitionLayout
+import com.android.compose.animation.scene.SceneTransitionLayoutForTesting
import com.android.compose.animation.scene.SceneTransitions
import com.android.compose.animation.scene.TestScenes
import com.android.compose.animation.scene.testNestedTransition
@@ -114,7 +114,7 @@
@Composable
(states: List<MutableSceneTransitionLayoutState>) -> Unit =
{ states ->
- SceneTransitionLayout(states[0]) {
+ SceneTransitionLayoutForTesting(states[0]) {
scene(TestScenes.SceneA, content = { TestElement(elementVariant0A) })
scene(
TestScenes.SceneB,
diff --git a/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestContentScope.kt b/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestContentScope.kt
index 6d47bab..e56d1be 100644
--- a/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestContentScope.kt
+++ b/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestContentScope.kt
@@ -30,5 +30,7 @@
content: @Composable ContentScope.() -> Unit,
) {
val state = rememberMutableSceneTransitionLayoutState(currentScene)
- SceneTransitionLayout(state, modifier) { scene(currentScene, content = content) }
+ SceneTransitionLayout(state, modifier, implicitTestTags = true) {
+ scene(currentScene, content = content)
+ }
}
diff --git a/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestTransition.kt b/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestTransition.kt
index f94a7ed..a362a37 100644
--- a/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestTransition.kt
+++ b/packages/SystemUI/compose/scene/tests/utils/src/com/android/compose/animation/scene/TestTransition.kt
@@ -137,7 +137,7 @@
},
changeState = changeState,
transitionLayout = { state ->
- SceneTransitionLayout(state, layoutModifier) {
+ SceneTransitionLayout(state, layoutModifier, implicitTestTags = true) {
scene(fromScene, content = fromSceneContent)
scene(toScene, content = toSceneContent)
}
@@ -163,7 +163,7 @@
)
},
transitionLayout = { state ->
- SceneTransitionLayout(state) {
+ SceneTransitionLayout(state, implicitTestTags = true) {
scene(fromScene) { fromSceneContent() }
overlay(overlay) { overlayContent() }
}
@@ -191,7 +191,7 @@
)
},
transitionLayout = { state ->
- SceneTransitionLayout(state) {
+ SceneTransitionLayout(state, implicitTestTags = true) {
scene(toScene) { toSceneContent() }
overlay(overlay) { overlayContent() }
}
@@ -223,7 +223,7 @@
)
},
transitionLayout = { state ->
- SceneTransitionLayout(state) {
+ SceneTransitionLayout(state, implicitTestTags = true) {
scene(currentScene) { currentSceneContent() }
overlay(from, alignment = fromAlignment) { fromContent() }
overlay(to, alignment = toAlignment) { toContent() }
@@ -273,7 +273,7 @@
}
}
- SceneTransitionLayout(state, layoutModifier) {
+ SceneTransitionLayout(state, layoutModifier, implicitTestTags = true) {
scene(fromScene, content = fromSceneContent)
scene(toScene, content = toSceneContent)
}
diff --git a/packages/SystemUI/customization/res/values/dimens.xml b/packages/SystemUI/customization/res/values/dimens.xml
index 2bb5541..723f9bff 100644
--- a/packages/SystemUI/customization/res/values/dimens.xml
+++ b/packages/SystemUI/customization/res/values/dimens.xml
@@ -34,6 +34,7 @@
<dimen name="small_clock_padding_top">28dp</dimen>
<dimen name="clock_padding_start">28dp</dimen>
<dimen name="weather_date_icon_padding">28dp</dimen>
+ <dimen name="clock_vertical_digit_buffer">8dp</dimen>
<!-- When large clock is showing, offset the smartspace by this amount -->
<dimen name="keyguard_smartspace_top_offset">12dp</dimen>
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/CanvasUtil.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/CanvasUtil.kt
new file mode 100644
index 0000000..dd1599e
--- /dev/null
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/CanvasUtil.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2025 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.systemui.shared.clocks
+
+import android.graphics.Canvas
+
+object CanvasUtil {
+ fun Canvas.translate(pt: VPointF) = this.translate(pt.x, pt.y)
+
+ fun Canvas.translate(pt: VPoint) = this.translate(pt.x.toFloat(), pt.y.toFloat())
+
+ fun <T> Canvas.use(func: (Canvas) -> T): T {
+ val saveNum = save()
+ val result = func(this)
+ restoreToCount(saveNum)
+ return result
+ }
+}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt
index f905527..b9200c1 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt
@@ -55,7 +55,6 @@
val layerCfg =
LayerConfig(
style = FontTextStyle(lineHeight = 147.25f),
- timespec = DigitalTimespec.DIGIT_PAIR,
alignment = DigitalAlignment(HorizontalAlignment.CENTER, VerticalAlignment.CENTER),
aodStyle =
FontTextStyle(
@@ -63,12 +62,23 @@
transitionDuration = 750,
),
- // Placeholder
+ // Placeholders
+ timespec = DigitalTimespec.TIME_FULL_FORMAT,
dateTimeFormat = "hh:mm",
)
- createController(layerCfg.copy(dateTimeFormat = "hh"))
- createController(layerCfg.copy(dateTimeFormat = "mm"))
+ createController(
+ layerCfg.copy(timespec = DigitalTimespec.FIRST_DIGIT, dateTimeFormat = "hh")
+ )
+ createController(
+ layerCfg.copy(timespec = DigitalTimespec.SECOND_DIGIT, dateTimeFormat = "hh")
+ )
+ createController(
+ layerCfg.copy(timespec = DigitalTimespec.FIRST_DIGIT, dateTimeFormat = "mm")
+ )
+ createController(
+ layerCfg.copy(timespec = DigitalTimespec.SECOND_DIGIT, dateTimeFormat = "mm")
+ )
}
private fun refreshTime() {
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt
index aad1276..654478a 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt
@@ -28,6 +28,7 @@
import com.android.systemui.plugins.clocks.ClockPickerConfig
import com.android.systemui.plugins.clocks.ClockProvider
import com.android.systemui.plugins.clocks.ClockSettings
+import com.android.systemui.shared.clocks.FlexClockController.Companion.AXIS_PRESETS
import com.android.systemui.shared.clocks.FlexClockController.Companion.getDefaultAxes
private val TAG = DefaultClockProvider::class.simpleName
@@ -98,16 +99,16 @@
throw IllegalArgumentException("${settings.clockId} is unsupported by $TAG")
}
- val fontAxes =
- if (!isClockReactiveVariantsEnabled) listOf()
- else getDefaultAxes(settings).merge(settings.axes)
return ClockPickerConfig(
settings.clockId ?: DEFAULT_CLOCK_ID,
resources.getString(R.string.clock_default_name),
resources.getString(R.string.clock_default_description),
resources.getDrawable(R.drawable.clock_default_thumbnail, null),
isReactiveToTone = true,
- axes = fontAxes,
+ axes =
+ if (!isClockReactiveVariantsEnabled) emptyList()
+ else getDefaultAxes(settings).merge(settings.axes),
+ axisPresets = if (!isClockReactiveVariantsEnabled) emptyList() else AXIS_PRESETS,
)
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DigitTranslateAnimator.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DigitTranslateAnimator.kt
index 3869706..f5ccc52 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DigitTranslateAnimator.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DigitTranslateAnimator.kt
@@ -20,57 +20,42 @@
import android.animation.AnimatorListenerAdapter
import android.animation.TimeInterpolator
import android.animation.ValueAnimator
-import android.graphics.Point
+import com.android.systemui.shared.clocks.VPointF.Companion.times
-class DigitTranslateAnimator(val updateCallback: () -> Unit) {
- val DEFAULT_ANIMATION_DURATION = 500L
- val updatedTranslate = Point(0, 0)
+class DigitTranslateAnimator(private val updateCallback: (VPointF) -> Unit) {
+ var currentTranslation = VPointF.ZERO
+ var baseTranslation = VPointF.ZERO
+ var targetTranslation = VPointF.ZERO
- val baseTranslation = Point(0, 0)
- var targetTranslation: Point? = null
- val bounceAnimator: ValueAnimator =
+ private val bounceAnimator: ValueAnimator =
ValueAnimator.ofFloat(1f).apply {
- duration = DEFAULT_ANIMATION_DURATION
- addUpdateListener {
- updateTranslation(it.animatedFraction, updatedTranslate)
- updateCallback()
- }
+ addUpdateListener { updateCallback(getInterpolatedTranslation(it.animatedFraction)) }
addListener(
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
- rebase()
+ baseTranslation = currentTranslation
}
override fun onAnimationCancel(animation: Animator) {
- rebase()
+ baseTranslation = currentTranslation
}
}
)
}
- fun rebase() {
- baseTranslation.x = updatedTranslate.x
- baseTranslation.y = updatedTranslate.y
- }
-
fun animatePosition(
animate: Boolean = true,
delay: Long = 0,
- duration: Long = -1L,
+ duration: Long,
interpolator: TimeInterpolator? = null,
- targetTranslation: Point? = null,
+ targetTranslation: VPointF,
onAnimationEnd: Runnable? = null,
) {
- this.targetTranslation = targetTranslation ?: Point(0, 0)
+ this.targetTranslation = targetTranslation
if (animate) {
bounceAnimator.cancel()
bounceAnimator.startDelay = delay
- bounceAnimator.duration =
- if (duration == -1L) {
- DEFAULT_ANIMATION_DURATION
- } else {
- duration
- }
+ bounceAnimator.duration = duration
interpolator?.let { bounceAnimator.interpolator = it }
if (onAnimationEnd != null) {
val listener =
@@ -89,16 +74,13 @@
bounceAnimator.start()
} else {
// No animation is requested, thus set base and target state to the same state.
- updateTranslation(1F, updatedTranslate)
- rebase()
- updateCallback()
+ currentTranslation = targetTranslation
+ baseTranslation = targetTranslation
+ updateCallback(targetTranslation)
}
}
- fun updateTranslation(progress: Float, outPoint: Point) {
- outPoint.x =
- (baseTranslation.x + progress * (targetTranslation!!.x - baseTranslation.x)).toInt()
- outPoint.y =
- (baseTranslation.y + progress * (targetTranslation!!.y - baseTranslation.y)).toInt()
+ fun getInterpolatedTranslation(progress: Float): VPointF {
+ return baseTranslation + progress * (targetTranslation - baseTranslation)
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
index ac1c5a8..1a1033b 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
@@ -132,7 +132,7 @@
listOf(
GSFAxes.WEIGHT.toClockAxis(
type = AxisType.Float,
- currentValue = 400f,
+ currentValue = 475f,
name = "Weight",
description = "Glyph Weight",
),
@@ -161,5 +161,59 @@
GSFAxes.ROUND.toClockAxisSetting(100f),
GSFAxes.SLANT.toClockAxisSetting(0f),
)
+
+ val AXIS_PRESETS =
+ listOf(
+ FONT_AXES.map { it.toSetting() },
+ LEGACY_FLEX_SETTINGS,
+ listOf( // Porcelain
+ GSFAxes.WEIGHT.toClockAxisSetting(500f),
+ GSFAxes.WIDTH.toClockAxisSetting(100f),
+ GSFAxes.ROUND.toClockAxisSetting(0f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
+ ),
+ listOf( // Midnight
+ GSFAxes.WEIGHT.toClockAxisSetting(300f),
+ GSFAxes.WIDTH.toClockAxisSetting(100f),
+ GSFAxes.ROUND.toClockAxisSetting(100f),
+ GSFAxes.SLANT.toClockAxisSetting(-10f),
+ ),
+ listOf( // Sterling
+ GSFAxes.WEIGHT.toClockAxisSetting(1000f),
+ GSFAxes.WIDTH.toClockAxisSetting(100f),
+ GSFAxes.ROUND.toClockAxisSetting(0f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
+ ),
+ listOf( // Smoky Green
+ GSFAxes.WEIGHT.toClockAxisSetting(150f),
+ GSFAxes.WIDTH.toClockAxisSetting(50f),
+ GSFAxes.ROUND.toClockAxisSetting(0f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
+ ),
+ listOf( // Iris
+ GSFAxes.WEIGHT.toClockAxisSetting(500f),
+ GSFAxes.WIDTH.toClockAxisSetting(100f),
+ GSFAxes.ROUND.toClockAxisSetting(100f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
+ ),
+ listOf( // Margarita
+ GSFAxes.WEIGHT.toClockAxisSetting(300f),
+ GSFAxes.WIDTH.toClockAxisSetting(30f),
+ GSFAxes.ROUND.toClockAxisSetting(100f),
+ GSFAxes.SLANT.toClockAxisSetting(-10f),
+ ),
+ listOf( // Raspberry
+ GSFAxes.WEIGHT.toClockAxisSetting(700f),
+ GSFAxes.WIDTH.toClockAxisSetting(140f),
+ GSFAxes.ROUND.toClockAxisSetting(100f),
+ GSFAxes.SLANT.toClockAxisSetting(-7f),
+ ),
+ listOf( // Ultra Blue
+ GSFAxes.WEIGHT.toClockAxisSetting(850f),
+ GSFAxes.WIDTH.toClockAxisSetting(130f),
+ GSFAxes.ROUND.toClockAxisSetting(0f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
+ ),
+ )
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
index b4c2f5d..2282863 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
@@ -35,12 +35,14 @@
import com.android.systemui.plugins.clocks.ThemeConfig
import com.android.systemui.plugins.clocks.WeatherData
import com.android.systemui.plugins.clocks.ZenData
+import com.android.systemui.shared.clocks.ViewUtils.computeLayoutDiff
import com.android.systemui.shared.clocks.view.FlexClockView
import com.android.systemui.shared.clocks.view.HorizontalAlignment
import com.android.systemui.shared.clocks.view.VerticalAlignment
import java.util.Locale
import java.util.TimeZone
import kotlin.math.max
+import kotlin.math.roundToInt
// TODO(b/364680879): Merge w/ ComposedDigitalLayerController
class FlexClockFaceController(clockCtx: ClockContext, private val isLargeClock: Boolean) :
@@ -168,17 +170,17 @@
else targetRegion.height() / maxHeight
FrameLayout.LayoutParams(
- (maxWidth * scale).toInt(),
- (maxHeight * scale).toInt(),
+ (maxWidth * scale).roundToInt(),
+ (maxHeight * scale).roundToInt(),
)
}
lp.gravity = Gravity.CENTER
view.layoutParams = lp
targetRegion?.let {
- val (xDiff, yDiff) = computeLayoutDiff(view, it, isLargeClock)
- view.translationX = xDiff
- view.translationY = yDiff
+ val diff = view.computeLayoutDiff(it, isLargeClock)
+ view.translationX = diff.x
+ view.translationY = diff.y
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/LayoutUtils.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/LayoutUtils.kt
deleted file mode 100644
index ef8bee0..0000000
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/LayoutUtils.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2024 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.systemui.shared.clocks
-
-import android.graphics.Rect
-import android.view.View
-
-fun computeLayoutDiff(
- view: View,
- targetRegion: Rect,
- isLargeClock: Boolean,
-): Pair<Float, Float> {
- val parent = view.parent
- if (parent is View && parent.isLaidOut() && isLargeClock) {
- return Pair(
- targetRegion.centerX() - parent.width / 2f,
- targetRegion.centerY() - parent.height / 2f
- )
- }
- return Pair(0f, 0f)
-}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/VPoint.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/VPoint.kt
new file mode 100644
index 0000000..3dae530
--- /dev/null
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/VPoint.kt
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2025 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.systemui.shared.clocks
+
+import android.graphics.Point
+import android.graphics.PointF
+import android.graphics.Rect
+import android.graphics.RectF
+import kotlin.math.abs
+import kotlin.math.max
+import kotlin.math.min
+import kotlin.math.sqrt
+
+private val X_MASK: ULong = 0xFFFFFFFF00000000U
+private val Y_MASK: ULong = 0x00000000FFFFFFFFU
+
+private fun unpackX(data: ULong): Int = ((data and X_MASK) shr 32).toInt()
+
+private fun unpackY(data: ULong): Int = (data and Y_MASK).toInt()
+
+private fun pack(x: Int, y: Int): ULong {
+ return ((x.toULong() shl 32) and X_MASK) or (y.toULong() and Y_MASK)
+}
+
+@JvmInline
+value class VPointF(private val data: ULong) {
+ val x: Float
+ get() = Float.fromBits(unpackX(data))
+
+ val y: Float
+ get() = Float.fromBits(unpackY(data))
+
+ constructor() : this(0f, 0f)
+
+ constructor(pt: PointF) : this(pt.x, pt.y)
+
+ constructor(x: Int, y: Int) : this(x.toFloat(), y.toFloat())
+
+ constructor(x: Int, y: Float) : this(x.toFloat(), y)
+
+ constructor(x: Float, y: Int) : this(x, y.toFloat())
+
+ constructor(x: Float, y: Float) : this(pack(x.toBits(), y.toBits()))
+
+ fun toPointF() = PointF(x, y)
+
+ fun lengthSq(): Float = x * x + y * y
+
+ fun length(): Float = sqrt(lengthSq())
+
+ fun abs() = VPointF(abs(x), abs(y))
+
+ fun dot(pt: VPointF): Float = x * pt.x + y * pt.y
+
+ fun normalize(): VPointF {
+ val length = this.length()
+ return VPointF(x / length, y / length)
+ }
+
+ operator fun component1(): Float = x
+
+ operator fun component2(): Float = y
+
+ override fun toString() = "($x, $y)"
+
+ operator fun plus(pt: VPoint) = VPointF(x + pt.x, y + pt.y)
+
+ operator fun plus(pt: VPointF) = VPointF(x + pt.x, y + pt.y)
+
+ operator fun plus(value: Int) = VPointF(x + value, y + value)
+
+ operator fun plus(value: Float) = VPointF(x + value, y + value)
+
+ operator fun minus(pt: VPoint) = VPointF(x - pt.x, y - pt.y)
+
+ operator fun minus(pt: VPointF) = VPointF(x - pt.x, y - pt.y)
+
+ operator fun minus(value: Int) = VPointF(x - value, y - value)
+
+ operator fun minus(value: Float) = VPointF(x - value, y - value)
+
+ operator fun times(pt: VPoint) = VPointF(x * pt.x, y * pt.y)
+
+ operator fun times(pt: VPointF) = VPointF(x * pt.x, y * pt.y)
+
+ operator fun times(value: Int) = VPointF(x * value, y * value)
+
+ operator fun times(value: Float) = VPointF(x * value, y * value)
+
+ operator fun div(pt: VPoint) = VPointF(x / pt.x, y / pt.y)
+
+ operator fun div(pt: VPointF) = VPointF(x / pt.x, y / pt.y)
+
+ operator fun div(value: Int) = VPointF(x / value, y / value)
+
+ operator fun div(value: Float) = VPointF(x / value, y / value)
+
+ companion object {
+ val ZERO = VPointF(0, 0)
+
+ fun max(lhs: VPointF, rhs: VPointF) = VPointF(max(lhs.x, rhs.x), max(lhs.y, rhs.y))
+
+ fun min(lhs: VPointF, rhs: VPointF) = VPointF(min(lhs.x, rhs.x), min(lhs.y, rhs.y))
+
+ operator fun Float.plus(value: VPointF) = VPointF(this + value.x, this + value.y)
+
+ operator fun Int.minus(value: VPointF) = VPointF(this - value.x, this - value.y)
+
+ operator fun Float.minus(value: VPointF) = VPointF(this - value.x, this - value.y)
+
+ operator fun Int.times(value: VPointF) = VPointF(this * value.x, this * value.y)
+
+ operator fun Float.times(value: VPointF) = VPointF(this * value.x, this * value.y)
+
+ operator fun Int.div(value: VPointF) = VPointF(this / value.x, this / value.y)
+
+ operator fun Float.div(value: VPointF) = VPointF(this / value.x, this / value.y)
+
+ val RectF.center: VPointF
+ get() = VPointF(centerX(), centerY())
+
+ val RectF.size: VPointF
+ get() = VPointF(width(), height())
+ }
+}
+
+@JvmInline
+value class VPoint(private val data: ULong) {
+ val x: Int
+ get() = unpackX(data)
+
+ val y: Int
+ get() = unpackY(data)
+
+ constructor() : this(0, 0)
+
+ constructor(x: Int, y: Int) : this(pack(x, y))
+
+ fun toPoint() = Point(x, y)
+
+ fun abs() = VPoint(abs(x), abs(y))
+
+ operator fun component1(): Int = x
+
+ operator fun component2(): Int = y
+
+ override fun toString() = "($x, $y)"
+
+ operator fun plus(pt: VPoint) = VPoint(x + pt.x, y + pt.y)
+
+ operator fun plus(pt: VPointF) = VPointF(x + pt.x, y + pt.y)
+
+ operator fun plus(value: Int) = VPoint(x + value, y + value)
+
+ operator fun plus(value: Float) = VPointF(x + value, y + value)
+
+ operator fun minus(pt: VPoint) = VPoint(x - pt.x, y - pt.y)
+
+ operator fun minus(pt: VPointF) = VPointF(x - pt.x, y - pt.y)
+
+ operator fun minus(value: Int) = VPoint(x - value, y - value)
+
+ operator fun minus(value: Float) = VPointF(x - value, y - value)
+
+ operator fun times(pt: VPoint) = VPoint(x * pt.x, y * pt.y)
+
+ operator fun times(pt: VPointF) = VPointF(x * pt.x, y * pt.y)
+
+ operator fun times(value: Int) = VPoint(x * value, y * value)
+
+ operator fun times(value: Float) = VPointF(x * value, y * value)
+
+ operator fun div(pt: VPoint) = VPoint(x / pt.x, y / pt.y)
+
+ operator fun div(pt: VPointF) = VPointF(x / pt.x, y / pt.y)
+
+ operator fun div(value: Int) = VPoint(x / value, y / value)
+
+ operator fun div(value: Float) = VPointF(x / value, y / value)
+
+ companion object {
+ val ZERO = VPoint(0, 0)
+
+ fun max(lhs: VPoint, rhs: VPoint) = VPoint(max(lhs.x, rhs.x), max(lhs.y, rhs.y))
+
+ fun min(lhs: VPoint, rhs: VPoint) = VPoint(min(lhs.x, rhs.x), min(lhs.y, rhs.y))
+
+ operator fun Int.plus(value: VPoint) = VPoint(this + value.x, this + value.y)
+
+ operator fun Float.plus(value: VPoint) = VPointF(this + value.x, this + value.y)
+
+ operator fun Int.minus(value: VPoint) = VPoint(this - value.x, this - value.y)
+
+ operator fun Float.minus(value: VPoint) = VPointF(this - value.x, this - value.y)
+
+ operator fun Int.times(value: VPoint) = VPoint(this * value.x, this * value.y)
+
+ operator fun Float.times(value: VPoint) = VPointF(this * value.x, this * value.y)
+
+ operator fun Int.div(value: VPoint) = VPoint(this / value.x, this / value.y)
+
+ operator fun Float.div(value: VPoint) = VPointF(this / value.x, this / value.y)
+
+ val Rect.center: VPoint
+ get() = VPoint(centerX(), centerY())
+
+ val Rect.size: VPoint
+ get() = VPoint(width(), height())
+ }
+}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ViewUtils.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ViewUtils.kt
new file mode 100644
index 0000000..1e90a23
--- /dev/null
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ViewUtils.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2024 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.systemui.shared.clocks
+
+import android.graphics.Rect
+import android.view.View
+import com.android.systemui.shared.clocks.VPoint.Companion.center
+import com.android.systemui.shared.clocks.VPointF.Companion.center
+
+object ViewUtils {
+ fun View.computeLayoutDiff(targetRegion: Rect, isLargeClock: Boolean): VPointF {
+ val parent = this.parent
+ if (parent is View && parent.isLaidOut() && isLargeClock) {
+ return targetRegion.center - parent.size / 2f
+ }
+ return VPointF.ZERO
+ }
+
+ val View.size: VPointF
+ get() = VPointF(width, height)
+
+ val View.measuredSize: VPointF
+ get() = VPointF(measuredWidth, measuredHeight)
+}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt
index a9f91e0..2d0ca53 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt
@@ -17,28 +17,37 @@
package com.android.systemui.shared.clocks.view
import android.graphics.Canvas
-import android.graphics.Point
+import android.graphics.RectF
import android.icu.text.NumberFormat
import android.util.MathUtils.constrainedMap
import android.view.View
import android.view.ViewGroup
-import android.widget.FrameLayout
import android.widget.RelativeLayout
import androidx.annotation.VisibleForTesting
+import androidx.core.view.children
import com.android.app.animation.Interpolators
import com.android.systemui.customization.R
import com.android.systemui.plugins.clocks.ClockFontAxisSetting
import com.android.systemui.plugins.clocks.ClockLogger
+import com.android.systemui.shared.clocks.CanvasUtil.translate
+import com.android.systemui.shared.clocks.CanvasUtil.use
import com.android.systemui.shared.clocks.ClockContext
import com.android.systemui.shared.clocks.DigitTranslateAnimator
+import com.android.systemui.shared.clocks.VPointF
+import com.android.systemui.shared.clocks.VPointF.Companion.max
+import com.android.systemui.shared.clocks.VPointF.Companion.times
+import com.android.systemui.shared.clocks.ViewUtils.measuredSize
import java.util.Locale
+import kotlin.collections.filterNotNull
+import kotlin.collections.map
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
+import kotlin.math.roundToInt
fun clamp(value: Float, minVal: Float, maxVal: Float): Float = max(min(value, maxVal), minVal)
-class FlexClockView(clockCtx: ClockContext) : FrameLayout(clockCtx.context) {
+class FlexClockView(clockCtx: ClockContext) : ViewGroup(clockCtx.context) {
protected val logger = ClockLogger(this, clockCtx.messageBuffer, this::class.simpleName!!)
get() = field ?: ClockLogger.INIT_LOGGER
@@ -46,13 +55,13 @@
var isAnimationEnabled = true
set(value) {
field = value
- digitalClockTextViewMap.forEach { _, view -> view.isAnimationEnabled = value }
+ childViews.forEach { view -> view.isAnimationEnabled = value }
}
var dozeFraction: Float = 0F
set(value) {
field = value
- digitalClockTextViewMap.forEach { _, view -> view.dozeFraction = field }
+ childViews.forEach { view -> view.dozeFraction = field }
}
var isReactiveTouchInteractionEnabled = false
@@ -60,12 +69,20 @@
field = value
}
- var digitalClockTextViewMap = mutableMapOf<Int, SimpleDigitalClockTextView>()
- private val digitLeftTopMap = mutableMapOf<Int, Point>()
+ var _childViews: List<SimpleDigitalClockTextView>? = null
+ val childViews: List<SimpleDigitalClockTextView>
+ get() {
+ return _childViews
+ ?: this.children
+ .map { child -> child as? SimpleDigitalClockTextView }
+ .filterNotNull()
+ .toList()
+ .also { _childViews = it }
+ }
- private var maxSingleDigitSize = Point(-1, -1)
- private val lockscreenTranslate = Point(0, 0)
- private var aodTranslate = Point(0, 0)
+ private var maxChildSize = VPointF(-1, -1)
+ private val lockscreenTranslate = VPointF.ZERO
+ private var aodTranslate = VPointF.ZERO
private var onAnimateDoze: (() -> Unit)? = null
private var isDozeReadyToAnimate = false
@@ -85,63 +102,53 @@
private val digitOffsets = mutableMapOf<Int, Float>()
- protected fun calculateSize(widthMeasureSpec: Int, heightMeasureSpec: Int): Point? {
- maxSingleDigitSize = Point(-1, -1)
- val viewHeight: (textView: SimpleDigitalClockTextView) -> Int = { textView ->
- if (isMonoVerticalNumericLineSpacing) {
- maxSingleDigitSize.y
- } else {
- (textView.paint.fontMetrics.descent - textView.paint.fontMetrics.ascent).toInt()
- }
- }
+ protected fun calculateSize(
+ widthMeasureSpec: Int,
+ heightMeasureSpec: Int,
+ shouldMeasureChildren: Boolean,
+ ): VPointF {
+ maxChildSize = VPointF(-1, -1)
+ fun SimpleDigitalClockTextView.getSize() = VPointF(measuredWidth, measuredHeight)
- digitalClockTextViewMap.forEach { (_, textView) ->
- textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
- maxSingleDigitSize.x = max(maxSingleDigitSize.x, textView.measuredWidth)
- maxSingleDigitSize.y = max(viewHeight(textView), textView.measuredHeight)
+ childViews.forEach { textView ->
+ if (shouldMeasureChildren) {
+ textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
+ }
+ maxChildSize = max(maxChildSize, textView.getSize())
}
- aodTranslate = Point(0, 0)
+ aodTranslate = VPointF.ZERO
// TODO(b/364680879): Cleanup
/*
- aodTranslate = Point(
- (maxSingleDigitSize.x * AOD_HORIZONTAL_TRANSLATE_RATIO).toInt(),
- (maxSingleDigitSize.y * AOD_VERTICAL_TRANSLATE_RATIO).toInt())
- */
- return Point(
- ((maxSingleDigitSize.x + abs(aodTranslate.x)) * 2),
- ((maxSingleDigitSize.y + abs(aodTranslate.y)) * 2),
+ aodTranslate = VPointF(
+ maxChildSize.x * AOD_HORIZONTAL_TRANSLATE_RATIO,
+ maxChildSize.y * AOD_VERTICAL_TRANSLATE_RATIO
)
+ */
+
+ val xScale = if (childViews.size < 4) 1f else 2f
+ val yBuffer = context.resources.getDimensionPixelSize(R.dimen.clock_vertical_digit_buffer)
+ return (maxChildSize + aodTranslate.abs()) * VPointF(xScale, 2f) + VPointF(0f, yBuffer)
}
- protected fun calculateLeftTopPosition() {
- digitLeftTopMap[R.id.HOUR_FIRST_DIGIT] = Point(0, 0)
- digitLeftTopMap[R.id.HOUR_SECOND_DIGIT] = Point(maxSingleDigitSize.x, 0)
- digitLeftTopMap[R.id.MINUTE_FIRST_DIGIT] = Point(0, maxSingleDigitSize.y)
- digitLeftTopMap[R.id.MINUTE_SECOND_DIGIT] = Point(maxSingleDigitSize)
- digitLeftTopMap[R.id.HOUR_DIGIT_PAIR] = Point(maxSingleDigitSize.x / 2, 0)
- // Add a small vertical buffer for the second digit pair
- digitLeftTopMap[R.id.MINUTE_DIGIT_PAIR] =
- Point(maxSingleDigitSize.x / 2, (maxSingleDigitSize.y * 1.05f).toInt())
- digitLeftTopMap.forEach { (_, point) ->
- point.x += abs(aodTranslate.x)
- point.y += abs(aodTranslate.y)
- }
- }
-
- override fun addView(child: View?) {
+ override fun onViewAdded(child: View?) {
if (child == null) return
- logger.addView(child)
- super.addView(child)
+ logger.onViewAdded(child)
+ super.onViewAdded(child)
(child as? SimpleDigitalClockTextView)?.let {
- it.digitTranslateAnimator = DigitTranslateAnimator(::invalidate)
- digitalClockTextViewMap[child.id] = child
+ it.digitTranslateAnimator = DigitTranslateAnimator { invalidate() }
}
child.setWillNotDraw(true)
+ _childViews = null
+ }
+
+ override fun onViewRemoved(child: View?) {
+ super.onViewRemoved(child)
+ _childViews = null
}
fun refreshTime() {
logger.refreshTime()
- digitalClockTextViewMap.forEach { (_, textView) -> textView.refreshText() }
+ childViews.forEach { textView -> textView.refreshText() }
}
override fun setVisibility(visibility: Int) {
@@ -164,38 +171,97 @@
super.requestLayout()
}
+ fun updateMeasuredSize() =
+ updateMeasuredSize(
+ measuredWidthAndState,
+ measuredHeightAndState,
+ shouldMeasureChildren = false,
+ )
+
+ private fun updateMeasuredSize(
+ widthMeasureSpec: Int = measuredWidthAndState,
+ heightMeasureSpec: Int = measuredHeightAndState,
+ shouldMeasureChildren: Boolean,
+ ) {
+ val size = calculateSize(widthMeasureSpec, heightMeasureSpec, shouldMeasureChildren)
+ setMeasuredDimension(size.x.roundToInt(), size.y.roundToInt())
+ }
+
+ fun updateLocation() {
+ val layoutBounds = this.layoutBounds ?: return
+ setFrame(
+ (layoutBounds.centerX() - measuredWidth / 2f).roundToInt(),
+ (layoutBounds.centerY() - measuredHeight / 2f).roundToInt(),
+ (layoutBounds.centerX() + measuredWidth / 2f).roundToInt(),
+ (layoutBounds.centerY() + measuredHeight / 2f).roundToInt(),
+ )
+ updateChildFrames(isLayout = false)
+ }
+
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- logger.onMeasure()
- calculateSize(widthMeasureSpec, heightMeasureSpec)?.let { size ->
- setMeasuredDimension(size.x, size.y)
- } ?: run { super.onMeasure(widthMeasureSpec, heightMeasureSpec) }
- calculateLeftTopPosition()
+ logger.onMeasure(widthMeasureSpec, heightMeasureSpec)
+ updateMeasuredSize(widthMeasureSpec, heightMeasureSpec, shouldMeasureChildren = true)
isDozeReadyToAnimate = true
onAnimateDoze?.invoke()
onAnimateDoze = null
}
+ private val layoutBounds = RectF()
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
- logger.onLayout()
- super.onLayout(changed, left, top, right, bottom)
+ logger.onLayout(changed, left, top, right, bottom)
+
+ layoutBounds.left = left.toFloat()
+ layoutBounds.top = top.toFloat()
+ layoutBounds.right = right.toFloat()
+ layoutBounds.bottom = bottom.toFloat()
+
+ updateChildFrames(isLayout = true)
+ }
+
+ private fun updateChildFrames(isLayout: Boolean) {
+ val yBuffer = context.resources.getDimensionPixelSize(R.dimen.clock_vertical_digit_buffer)
+ childViews.forEach { child ->
+ var offset =
+ maxChildSize.run {
+ when (child.id) {
+ R.id.HOUR_FIRST_DIGIT -> VPointF.ZERO
+ R.id.HOUR_SECOND_DIGIT -> VPointF(x, 0f)
+ R.id.HOUR_DIGIT_PAIR -> VPointF.ZERO
+ // Add a small vertical buffer for second line views
+ R.id.MINUTE_DIGIT_PAIR -> VPointF(0f, y + yBuffer)
+ R.id.MINUTE_FIRST_DIGIT -> VPointF(0f, y + yBuffer)
+ R.id.MINUTE_SECOND_DIGIT -> VPointF(x, y + yBuffer)
+ else -> VPointF.ZERO
+ }
+ }
+
+ val childSize = child.measuredSize
+ offset += aodTranslate.abs()
+
+ // Horizontal offset to center each view in the available space
+ val midX = if (childViews.size < 4) measuredWidth / 2f else measuredWidth / 4f
+ offset += VPointF(midX - childSize.x / 2f, 0f)
+
+ val setPos = if (isLayout) child::layout else child::setLeftTopRightBottom
+ setPos(
+ offset.x.roundToInt(),
+ offset.y.roundToInt(),
+ (offset.x + childSize.x).roundToInt(),
+ (offset.y + childSize.y).roundToInt(),
+ )
+ }
}
override fun onDraw(canvas: Canvas) {
logger.onDraw()
- super.onDraw(canvas)
-
- digitalClockTextViewMap.forEach { (id, textView) ->
- // save canvas location in anticipation of restoration later
- canvas.save()
- val xTranslateAmount =
- digitOffsets.getOrDefault(id, 0f) + (digitLeftTopMap[id]?.x?.toFloat() ?: 0f)
- // move canvas to location that the textView would like
- canvas.translate(xTranslateAmount, digitLeftTopMap[id]?.y?.toFloat() ?: 0f)
- // draw the textView at the location of the canvas above
- textView.draw(canvas)
- // reset the canvas location back to 0 without drawing
- canvas.restore()
+ childViews.forEach { child ->
+ canvas.use { canvas ->
+ canvas.translate(digitOffsets.getOrDefault(child.id, 0f), 0f)
+ canvas.translate(child.left.toFloat(), child.top.toFloat())
+ child.draw(canvas)
+ }
}
}
@@ -205,26 +271,26 @@
}
fun updateColor(color: Int) {
- digitalClockTextViewMap.forEach { _, view -> view.updateColor(color) }
+ childViews.forEach { view -> view.updateColor(color) }
invalidate()
}
fun updateAxes(axes: List<ClockFontAxisSetting>) {
- digitalClockTextViewMap.forEach { _, view -> view.updateAxes(axes) }
+ childViews.forEach { view -> view.updateAxes(axes) }
requestLayout()
}
fun onFontSettingChanged(fontSizePx: Float) {
- digitalClockTextViewMap.forEach { _, view -> view.applyTextSize(fontSizePx) }
+ childViews.forEach { view -> view.applyTextSize(fontSizePx) }
}
fun animateDoze(isDozing: Boolean, isAnimated: Boolean) {
fun executeDozeAnimation() {
- digitalClockTextViewMap.forEach { _, view -> view.animateDoze(isDozing, isAnimated) }
- if (maxSingleDigitSize.x < 0 || maxSingleDigitSize.y < 0) {
+ childViews.forEach { view -> view.animateDoze(isDozing, isAnimated) }
+ if (maxChildSize.x < 0 || maxChildSize.y < 0) {
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
}
- digitalClockTextViewMap.forEach { (id, textView) ->
+ childViews.forEach { textView ->
textView.digitTranslateAnimator?.let {
if (!isDozing) {
it.animatePosition(
@@ -252,8 +318,8 @@
}
fun animateCharge() {
- digitalClockTextViewMap.forEach { _, view -> view.animateCharge() }
- digitalClockTextViewMap.forEach { (id, textView) ->
+ childViews.forEach { view -> view.animateCharge() }
+ childViews.forEach { textView ->
textView.digitTranslateAnimator?.let {
it.animatePosition(
animate = isAnimationEnabled,
@@ -266,14 +332,14 @@
duration = CHARGING_TRANSITION_DURATION,
targetTranslation =
updateDirectionalTargetTranslate(
- id,
+ textView.id,
if (dozeFraction == 1F) aodTranslate else lockscreenTranslate,
),
)
},
targetTranslation =
updateDirectionalTargetTranslate(
- id,
+ textView.id,
if (dozeFraction == 1F) lockscreenTranslate else aodTranslate,
),
)
@@ -282,7 +348,7 @@
}
fun animateFidget(x: Float, y: Float) {
- digitalClockTextViewMap.forEach { _, view -> view.animateFidget(x, y) }
+ childViews.forEach { view -> view.animateFidget(x, y) }
}
private fun updateLocale(locale: Locale) {
@@ -321,7 +387,7 @@
// so we no longer need to multiply direct sign to moveAmountDeltaForDigit
val currentMoveAmount = left - clockStartLeft
var index = 0
- digitalClockTextViewMap.forEach { id, _ ->
+ childViews.forEach { child ->
val digitFraction =
getDigitFraction(
digit = index++,
@@ -332,7 +398,7 @@
val moveAmountForDigit = currentMoveAmount * digitFraction
var moveAmountDeltaForDigit = moveAmountForDigit - currentMoveAmount
if (isMovingToCenter && moveAmountForDigit < 0) moveAmountDeltaForDigit *= -1
- digitOffsets[id] = moveAmountDeltaForDigit
+ digitOffsets[child.id] = moveAmountDeltaForDigit
invalidate()
}
}
@@ -353,8 +419,7 @@
/* rangeMin= */ 0.0f,
/* rangeMax= */ 1.0f,
/* valueMin= */ digitInitialDelay,
- /* valueMax= */ digitInitialDelay +
- availableAnimationTime(digitalClockTextViewMap.size),
+ /* valueMax= */ digitInitialDelay + availableAnimationTime(childViews.size),
/* value= */ fraction,
)
)
@@ -401,35 +466,17 @@
)
// Use the sign of targetTranslation to control the direction of digit translation
- fun updateDirectionalTargetTranslate(id: Int, targetTranslation: Point): Point {
- val outPoint = Point(targetTranslation)
- when (id) {
- R.id.HOUR_FIRST_DIGIT -> {
- outPoint.x *= -1
- outPoint.y *= -1
+ fun updateDirectionalTargetTranslate(id: Int, targetTranslation: VPointF): VPointF {
+ return targetTranslation *
+ when (id) {
+ R.id.HOUR_FIRST_DIGIT -> VPointF(-1, -1)
+ R.id.HOUR_SECOND_DIGIT -> VPointF(1, -1)
+ R.id.MINUTE_FIRST_DIGIT -> VPointF(-1, 1)
+ R.id.MINUTE_SECOND_DIGIT -> VPointF(1, 1)
+ R.id.HOUR_DIGIT_PAIR -> VPointF(-1, -1)
+ R.id.MINUTE_DIGIT_PAIR -> VPointF(-1, 1)
+ else -> VPointF(1, 1)
}
- R.id.HOUR_SECOND_DIGIT -> {
- outPoint.x *= 1
- outPoint.y *= -1
- }
- R.id.MINUTE_FIRST_DIGIT -> {
- outPoint.x *= -1
- outPoint.y *= 1
- }
- R.id.MINUTE_SECOND_DIGIT -> {
- outPoint.x *= 1
- outPoint.y *= 1
- }
- R.id.HOUR_DIGIT_PAIR -> {
- outPoint.x *= -1
- outPoint.y *= -1
- }
- R.id.MINUTE_DIGIT_PAIR -> {
- outPoint.x *= -1
- outPoint.y *= 1
- }
- }
- return outPoint
}
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
index b7ce20e..015a827 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
@@ -20,16 +20,16 @@
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
-import android.graphics.Point
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.graphics.Rect
+import android.graphics.RectF
import android.os.VibrationEffect
import android.text.Layout
import android.text.TextPaint
import android.util.AttributeSet
import android.util.Log
-import android.util.MathUtils
+import android.util.MathUtils.lerp
import android.util.TypedValue
import android.view.View.MeasureSpec.EXACTLY
import android.view.animation.Interpolator
@@ -44,18 +44,33 @@
import com.android.systemui.plugins.clocks.ClockFontAxisSetting.Companion.replace
import com.android.systemui.plugins.clocks.ClockFontAxisSetting.Companion.toFVar
import com.android.systemui.plugins.clocks.ClockLogger
+import com.android.systemui.shared.clocks.CanvasUtil.translate
+import com.android.systemui.shared.clocks.CanvasUtil.use
import com.android.systemui.shared.clocks.ClockContext
import com.android.systemui.shared.clocks.DigitTranslateAnimator
import com.android.systemui.shared.clocks.DimensionParser
import com.android.systemui.shared.clocks.FLEX_CLOCK_ID
import com.android.systemui.shared.clocks.FontTextStyle
+import com.android.systemui.shared.clocks.VPoint
+import com.android.systemui.shared.clocks.VPointF
+import com.android.systemui.shared.clocks.VPointF.Companion.size
+import com.android.systemui.shared.clocks.ViewUtils.measuredSize
+import com.android.systemui.shared.clocks.ViewUtils.size
import com.android.systemui.shared.clocks.toClockAxisSetting
import java.lang.Thread
import kotlin.math.max
import kotlin.math.min
+import kotlin.math.roundToInt
private val TAG = SimpleDigitalClockTextView::class.simpleName!!
+private fun Paint.getTextBounds(text: CharSequence, result: RectF = RectF()): RectF {
+ val rect = Rect()
+ this.getTextBounds(text, 0, text.length, rect)
+ result.set(rect)
+ return result
+}
+
enum class VerticalAlignment {
TOP,
BOTTOM,
@@ -103,27 +118,27 @@
}
private val parser = DimensionParser(clockCtx.context)
- var maxSingleDigitHeight = -1
- var maxSingleDigitWidth = -1
+ var maxSingleDigitHeight = -1f
+ var maxSingleDigitWidth = -1f
var digitTranslateAnimator: DigitTranslateAnimator? = null
- var aodFontSizePx: Float = -1F
+ var aodFontSizePx = -1f
// Store the font size when there's no height constraint as a reference when adjusting font size
- private var lastUnconstrainedTextSize: Float = Float.MAX_VALUE
+ private var lastUnconstrainedTextSize = Float.MAX_VALUE
// Calculated by height of styled text view / text size
// Used as a factor to calculate a smaller font size when text height is constrained
- @VisibleForTesting var fontSizeAdjustFactor = 1F
+ @VisibleForTesting var fontSizeAdjustFactor = 1f
private val initThread = Thread.currentThread()
// textBounds is the size of text in LS, which only measures current text in lockscreen style
- var textBounds = Rect()
+ var textBounds = RectF()
// prevTextBounds and targetTextBounds are to deal with dozing animation between LS and AOD
// especially for the textView which has different bounds during the animation
// prevTextBounds holds the state we are transitioning from
- private val prevTextBounds = Rect()
+ private val prevTextBounds = RectF()
// targetTextBounds holds the state we are interpolating to
- private val targetTextBounds = Rect()
+ private val targetTextBounds = RectF()
protected val logger = ClockLogger(this, clockCtx.messageBuffer, this::class.simpleName!!)
get() = field ?: ClockLogger.INIT_LOGGER
@@ -141,14 +156,14 @@
var verticalAlignment: VerticalAlignment = VerticalAlignment.BASELINE
var horizontalAlignment: HorizontalAlignment = HorizontalAlignment.LEFT
var isAnimationEnabled = true
- var dozeFraction: Float = 0F
+ var dozeFraction: Float = 0f
set(value) {
field = value
invalidate()
}
- var textBorderWidth = 0F
- var baselineFromMeasure = 0
+ var textBorderWidth = 0f
+ var measuredBaseline = 0
var lockscreenColor = Color.WHITE
fun updateColor(color: Int) {
@@ -169,7 +184,7 @@
lockScreenPaint.typeface = typefaceCache.getTypefaceForVariant(lsFontVariation)
typeface = lockScreenPaint.typeface
- lockScreenPaint.getTextBounds(text, 0, text.length, textBounds)
+ lockScreenPaint.getTextBounds(text, textBounds)
targetTextBounds.set(textBounds)
textAnimator.setTextStyle(TextAnimator.Style(fVar = lsFontVariation))
@@ -195,7 +210,7 @@
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- logger.onMeasure()
+ logger.onMeasure(widthMeasureSpec, heightMeasureSpec)
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val layout = this.layout
@@ -206,7 +221,7 @@
} else {
textAnimator.updateLayout(layout)
}
- baselineFromMeasure = layout.getLineBaseline(0)
+ measuredBaseline = layout.getLineBaseline(0)
} else {
val currentThread = Thread.currentThread()
Log.wtf(
@@ -216,24 +231,33 @@
)
}
- setInterpolatedViewBounds(getInterpolatedTextBounds(), widthMeasureSpec, heightMeasureSpec)
+ val bounds = getInterpolatedTextBounds()
+ val size = computeMeasuredSize(bounds, widthMeasureSpec, heightMeasureSpec)
+ setInterpolatedSize(size, widthMeasureSpec, heightMeasureSpec)
}
+ private var drawnProgress: Float? = null
+
override fun onDraw(canvas: Canvas) {
logger.onDraw(textAnimator.textInterpolator.shapedText)
- val translation = getLocalTranslation()
- canvas.translate(translation.x.toFloat(), translation.y.toFloat())
- digitTranslateAnimator?.let {
- canvas.translate(it.updatedTranslate.x.toFloat(), it.updatedTranslate.y.toFloat())
+ val interpProgress = getInterpolatedProgress()
+ val interpBounds = getInterpolatedTextBounds(interpProgress)
+ if (interpProgress != drawnProgress) {
+ drawnProgress = interpProgress
+ val measureSize = computeMeasuredSize(interpBounds)
+ setInterpolatedSize(measureSize)
+ (parent as? FlexClockView)?.run {
+ updateMeasuredSize()
+ updateLocation()
+ } ?: setInterpolatedLocation(measureSize)
}
- textAnimator.draw(canvas)
-
- digitTranslateAnimator?.let {
- canvas.translate(-it.updatedTranslate.x.toFloat(), -it.updatedTranslate.y.toFloat())
+ canvas.use {
+ digitTranslateAnimator?.apply { canvas.translate(currentTranslation) }
+ canvas.translate(getDrawTranslation(interpBounds))
+ textAnimator.draw(canvas)
}
- canvas.translate(-translation.x.toFloat(), -translation.y.toFloat())
}
override fun setVisibility(visibility: Int) {
@@ -246,6 +270,18 @@
super.setAlpha(alpha)
}
+ private val layoutBounds = RectF()
+
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+ super.onLayout(changed, left, top, right, bottom)
+ logger.onLayout(changed, left, top, right, bottom)
+
+ layoutBounds.left = left.toFloat()
+ layoutBounds.top = top.toFloat()
+ layoutBounds.right = right.toFloat()
+ layoutBounds.bottom = bottom.toFloat()
+ }
+
override fun invalidate() {
logger.invalidate()
super.invalidate()
@@ -338,14 +374,9 @@
}
fun refreshText() {
- lockScreenPaint.getTextBounds(text, 0, text.length, textBounds)
+ lockScreenPaint.getTextBounds(text, textBounds)
if (this::textAnimator.isInitialized) {
- textAnimator.textInterpolator.targetPaint.getTextBounds(
- text,
- 0,
- text.length,
- targetTextBounds,
- )
+ textAnimator.textInterpolator.targetPaint.getTextBounds(text, targetTextBounds)
}
if (layout == null) {
@@ -362,113 +393,135 @@
id == R.id.MINUTE_SECOND_DIGIT
}
- private fun getInterpolatedTextBounds(): Rect {
- val progress = textAnimator.animator?.let { it.animatedValue as Float } ?: 1f
- if (!textAnimator.isRunning || progress >= 1f) {
- return Rect(targetTextBounds)
- }
-
- val interpolatedTextBounds = Rect()
- interpolatedTextBounds.left =
- MathUtils.lerp(prevTextBounds.left, targetTextBounds.left, progress).toInt()
- interpolatedTextBounds.right =
- MathUtils.lerp(prevTextBounds.right, targetTextBounds.right, progress).toInt()
- interpolatedTextBounds.top =
- MathUtils.lerp(prevTextBounds.top, targetTextBounds.top, progress).toInt()
- interpolatedTextBounds.bottom =
- MathUtils.lerp(prevTextBounds.bottom, targetTextBounds.bottom, progress).toInt()
- return interpolatedTextBounds
+ private fun getInterpolatedProgress(): Float {
+ return textAnimator.animator?.let { it.animatedValue as Float } ?: 1f
}
- private fun setInterpolatedViewBounds(
- interpBounds: Rect,
+ /** Returns the interpolated text bounding rect based on interpolation progress */
+ private fun getInterpolatedTextBounds(progress: Float = getInterpolatedProgress()): RectF {
+ if (!textAnimator.isRunning || progress >= 1f) {
+ return RectF(targetTextBounds)
+ }
+
+ return RectF().apply {
+ left = lerp(prevTextBounds.left, targetTextBounds.left, progress)
+ right = lerp(prevTextBounds.right, targetTextBounds.right, progress)
+ top = lerp(prevTextBounds.top, targetTextBounds.top, progress)
+ bottom = lerp(prevTextBounds.bottom, targetTextBounds.bottom, progress)
+ }
+ }
+
+ private fun computeMeasuredSize(
+ interpBounds: RectF,
+ widthMeasureSpec: Int = measuredWidthAndState,
+ heightMeasureSpec: Int = measuredHeightAndState,
+ ): VPointF {
+ val mode =
+ VPoint(
+ x = MeasureSpec.getMode(widthMeasureSpec),
+ y = MeasureSpec.getMode(heightMeasureSpec),
+ )
+
+ return VPointF(
+ when {
+ mode.x == EXACTLY -> MeasureSpec.getSize(widthMeasureSpec).toFloat()
+ else -> interpBounds.width() + 2 * lockScreenPaint.strokeWidth
+ },
+ when {
+ mode.y == EXACTLY -> MeasureSpec.getSize(heightMeasureSpec).toFloat()
+ else -> interpBounds.height() + 2 * lockScreenPaint.strokeWidth
+ },
+ )
+ }
+
+ /** Set the measured size of the view to match the interpolated text bounds */
+ private fun setInterpolatedSize(
+ measureBounds: VPointF,
widthMeasureSpec: Int = measuredWidthAndState,
heightMeasureSpec: Int = measuredHeightAndState,
) {
- val heightMode = MeasureSpec.getMode(heightMeasureSpec)
- val widthMode = MeasureSpec.getMode(widthMeasureSpec)
+ val mode =
+ VPoint(
+ x = MeasureSpec.getMode(widthMeasureSpec),
+ y = MeasureSpec.getMode(heightMeasureSpec),
+ )
- val heightSpec =
- if (heightMode == EXACTLY) {
- heightMeasureSpec
- } else {
- MeasureSpec.makeMeasureSpec(
- if (isSingleDigit()) maxSingleDigitHeight
- else interpBounds.height() + 2 * lockScreenPaint.strokeWidth.toInt(),
- heightMode,
- )
- }
-
- val widthSpec =
- if (widthMode == EXACTLY) {
- widthMeasureSpec
- } else {
- MeasureSpec.makeMeasureSpec(
- if (isSingleDigit()) maxSingleDigitWidth
- else interpBounds.width() + 2 * lockScreenPaint.strokeWidth.toInt(),
- widthMode,
- )
- }
-
- setMeasuredDimension(widthSpec, heightSpec)
+ setMeasuredDimension(
+ MeasureSpec.makeMeasureSpec(measureBounds.x.roundToInt(), mode.x),
+ MeasureSpec.makeMeasureSpec(measureBounds.y.roundToInt(), mode.y),
+ )
}
- private fun updateXTranslation(inPoint: Point, interpolatedTextBounds: Rect): Point {
- when (horizontalAlignment) {
- HorizontalAlignment.LEFT -> {
- inPoint.x = lockScreenPaint.strokeWidth.toInt() - interpolatedTextBounds.left
+ /** Set the location of the view to match the interpolated text bounds */
+ private fun setInterpolatedLocation(measureSize: VPointF): RectF {
+ val targetRect = RectF()
+ targetRect.apply {
+ when (horizontalAlignment) {
+ HorizontalAlignment.LEFT -> {
+ left = layoutBounds.left
+ right = layoutBounds.left + measureSize.x
+ }
+ HorizontalAlignment.CENTER -> {
+ left = layoutBounds.centerX() - measureSize.x / 2f
+ right = layoutBounds.centerX() + measureSize.x / 2f
+ }
+ HorizontalAlignment.RIGHT -> {
+ left = layoutBounds.right - measureSize.x
+ right = layoutBounds.right
+ }
}
- HorizontalAlignment.RIGHT -> {
- inPoint.x =
- measuredWidth -
- interpolatedTextBounds.right -
- lockScreenPaint.strokeWidth.toInt()
- }
- HorizontalAlignment.CENTER -> {
- inPoint.x =
- (measuredWidth - interpolatedTextBounds.width()) / 2 -
- interpolatedTextBounds.left
- }
- }
- return inPoint
- }
- // translation of reference point of text
- // used for translation when calling textInterpolator
- private fun getLocalTranslation(): Point {
- val interpolatedTextBounds = getInterpolatedTextBounds()
- setInterpolatedViewBounds(interpolatedTextBounds)
-
- val localTranslation = Point(0, 0)
- val correctedBaseline = if (baseline != -1) baseline else baselineFromMeasure
- // get the change from current baseline to expected baseline
- when (verticalAlignment) {
- VerticalAlignment.CENTER -> {
- localTranslation.y =
- ((measuredHeight - interpolatedTextBounds.height()) / 2 -
- interpolatedTextBounds.top -
- correctedBaseline)
- }
- VerticalAlignment.TOP -> {
- localTranslation.y =
- (-interpolatedTextBounds.top + lockScreenPaint.strokeWidth - correctedBaseline)
- .toInt()
- }
- VerticalAlignment.BOTTOM -> {
- localTranslation.y =
- measuredHeight -
- interpolatedTextBounds.bottom -
- lockScreenPaint.strokeWidth.toInt() -
- correctedBaseline
- }
- VerticalAlignment.BASELINE -> {
- // account for max bottom distance of font, so clock doesn't collide with elements
- localTranslation.y =
- -lockScreenPaint.strokeWidth.toInt() - paint.fontMetrics.descent.toInt()
+ when (verticalAlignment) {
+ VerticalAlignment.TOP -> {
+ top = layoutBounds.top
+ bottom = layoutBounds.top + measureSize.y
+ }
+ VerticalAlignment.CENTER -> {
+ top = layoutBounds.centerY() - measureSize.y / 2f
+ bottom = layoutBounds.centerY() + measureSize.y / 2f
+ }
+ VerticalAlignment.BOTTOM -> {
+ top = layoutBounds.bottom - measureSize.y
+ bottom = layoutBounds.bottom
+ }
+ VerticalAlignment.BASELINE -> {
+ top = layoutBounds.centerY() - measureSize.y / 2f
+ bottom = layoutBounds.centerY() + measureSize.y / 2f
+ }
}
}
- return updateXTranslation(localTranslation, interpolatedTextBounds)
+ setFrame(
+ targetRect.left.roundToInt(),
+ targetRect.top.roundToInt(),
+ targetRect.right.roundToInt(),
+ targetRect.bottom.roundToInt(),
+ )
+ return targetRect
+ }
+
+ private fun getDrawTranslation(interpBounds: RectF): VPointF {
+ val sizeDiff = this.measuredSize - interpBounds.size
+ val alignment =
+ VPointF(
+ when (horizontalAlignment) {
+ HorizontalAlignment.LEFT -> 0f
+ HorizontalAlignment.CENTER -> 0.5f
+ HorizontalAlignment.RIGHT -> 1f
+ },
+ when (verticalAlignment) {
+ VerticalAlignment.TOP -> 0f
+ VerticalAlignment.CENTER -> 0.5f
+ VerticalAlignment.BASELINE -> 0.5f
+ VerticalAlignment.BOTTOM -> 1f
+ },
+ )
+ val renderCorrection =
+ VPointF(
+ x = -interpBounds.left,
+ y = -interpBounds.top - (if (baseline != -1) baseline else measuredBaseline),
+ )
+ return sizeDiff * alignment + renderCorrection
}
fun applyStyles(textStyle: FontTextStyle, aodStyle: FontTextStyle?) {
@@ -476,7 +529,7 @@
lockScreenPaint.strokeJoin = Paint.Join.ROUND
lockScreenPaint.typeface = typefaceCache.getTypefaceForVariant(lsFontVariation)
typeface = lockScreenPaint.typeface
- textStyle.lineHeight?.let { lineHeight = it.toInt() }
+ textStyle.lineHeight?.let { lineHeight = it.roundToInt() }
this.aodStyle = aodStyle ?: textStyle.copy()
aodDozingInterpolator = this.aodStyle.transitionInterpolator ?: Interpolators.LINEAR
@@ -487,7 +540,7 @@
invalidate()
}
- // When constrainedByHeight is on, targetFontSizePx is the constrained height of textView
+ /** When constrainedByHeight is on, targetFontSizePx is the constrained height of textView */
fun applyTextSize(targetFontSizePx: Float?, constrainedByHeight: Boolean = false) {
val adjustedFontSizePx = adjustFontSize(targetFontSizePx, constrainedByHeight)
val fontSizePx = adjustedFontSizePx * (textStyle.fontSizeScale ?: 1f)
@@ -496,7 +549,7 @@
if (fontSizePx > 0) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSizePx)
lockScreenPaint.textSize = textSize
- lockScreenPaint.getTextBounds(text, 0, text.length, textBounds)
+ lockScreenPaint.getTextBounds(text, textBounds)
targetTextBounds.set(textBounds)
}
if (!constrainedByHeight) {
@@ -513,20 +566,19 @@
}
private fun recomputeMaxSingleDigitSizes() {
- val rectForCalculate = Rect()
- maxSingleDigitHeight = 0
- maxSingleDigitWidth = 0
+ maxSingleDigitHeight = 0f
+ maxSingleDigitWidth = 0f
for (i in 0..9) {
- lockScreenPaint.getTextBounds("$i", 0, 1, rectForCalculate)
+ val rectForCalculate = lockScreenPaint.getTextBounds("$i")
maxSingleDigitHeight = max(maxSingleDigitHeight, rectForCalculate.height())
maxSingleDigitWidth = max(maxSingleDigitWidth, rectForCalculate.width())
}
- maxSingleDigitWidth += 2 * lockScreenPaint.strokeWidth.toInt()
- maxSingleDigitHeight += 2 * lockScreenPaint.strokeWidth.toInt()
+ maxSingleDigitWidth += 2 * lockScreenPaint.strokeWidth
+ maxSingleDigitHeight += 2 * lockScreenPaint.strokeWidth
}
- // called without animation, can be used to set the initial state of animator
+ /** Called without animation, can be used to set the initial state of animator */
private fun setInterpolatorPaint() {
if (this::textAnimator.isInitialized) {
// set initial style
@@ -542,25 +594,19 @@
}
}
- /* Called after textAnimator.setTextStyle
- * textAnimator.setTextStyle will update targetPaint,
- * and rebase if previous animator is canceled
- * so basePaint will store the state we transition from
+ /**
+ * Called after textAnimator.setTextStyle textAnimator.setTextStyle will update targetPaint, and
+ * rebase if previous animator is canceled so basePaint will store the state we transition from
* and targetPaint will store the state we transition to
*/
private fun updateTextBoundsForTextAnimator() {
- textAnimator.textInterpolator.basePaint.getTextBounds(text, 0, text.length, prevTextBounds)
- textAnimator.textInterpolator.targetPaint.getTextBounds(
- text,
- 0,
- text.length,
- targetTextBounds,
- )
+ textAnimator.textInterpolator.basePaint.getTextBounds(text, prevTextBounds)
+ textAnimator.textInterpolator.targetPaint.getTextBounds(text, targetTextBounds)
}
- /*
- * Adjust text size to adapt to large display / font size
- * where the text view will be constrained by height
+ /**
+ * Adjust text size to adapt to large display / font size where the text view will be
+ * constrained by height
*/
private fun adjustFontSize(targetFontSizePx: Float?, constrainedByHeight: Boolean): Float {
return if (constrainedByHeight) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
index 88c9e74..0cfb36d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -36,6 +36,7 @@
import android.view.View
import android.view.WindowInsets
import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
import android.widget.ScrollView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -114,6 +115,7 @@
@Mock lateinit var selectedUserInteractor: SelectedUserInteractor
@Mock private lateinit var packageManager: PackageManager
@Mock private lateinit var activityTaskManager: ActivityTaskManager
+ @Mock private lateinit var accessibilityManager: AccessibilityManager
@Mock private lateinit var lazyViewCapture: Lazy<ViewCapture>
private lateinit var displayRepository: FakeDisplayRepository
@@ -678,6 +680,7 @@
udfpsUtils,
iconProvider,
activityTaskManager,
+ accessibilityManager,
),
{ credentialViewModel },
fakeExecutor,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/common/data/repository/PackageInstallerMonitorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/common/data/repository/PackageInstallerMonitorTest.kt
index 781e416..ede29d8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/common/data/repository/PackageInstallerMonitorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/common/data/repository/PackageInstallerMonitorTest.kt
@@ -26,6 +26,9 @@
import com.android.systemui.common.shared.model.PackageInstallSession
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.kosmos.backgroundScope
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.testKosmos
@@ -173,6 +176,58 @@
}
@Test
+ fun onCreateUpdatedSession_ignoreNullPackageNameSessions() =
+ kosmos.runTest {
+ val nullPackageSession =
+ SessionInfo().apply {
+ sessionId = 1
+ appPackageName = null
+ appIcon = icon1
+ }
+
+ val wellFormedSession =
+ SessionInfo().apply {
+ sessionId = 2
+ appPackageName = "pkg_name"
+ appIcon = icon2
+ }
+
+ defaultSessions = listOf(wellFormedSession)
+
+ whenever(packageInstaller.allSessions).thenReturn(defaultSessions)
+ whenever(packageInstaller.getSessionInfo(1)).thenReturn(nullPackageSession)
+ whenever(packageInstaller.getSessionInfo(2)).thenReturn(wellFormedSession)
+
+ val packageInstallerMonitor =
+ PackageInstallerMonitor(
+ handler,
+ backgroundScope,
+ logcatLogBuffer("PackageInstallerRepositoryImplTest"),
+ packageInstaller,
+ )
+
+ val sessions by collectLastValue(packageInstallerMonitor.installSessionsForPrimaryUser)
+
+ // Verify flow updated with the new session
+ assertThat(sessions)
+ .comparingElementsUsing(represents)
+ .containsExactlyElementsIn(defaultSessions)
+
+ val callback =
+ withArgCaptor<PackageInstaller.SessionCallback> {
+ verify(packageInstaller).registerSessionCallback(capture(), eq(handler))
+ }
+
+ // New session added
+ callback.onCreated(nullPackageSession.sessionId)
+
+ // Verify flow updated with the new session
+ assertThat(sessions)
+ .comparingElementsUsing(represents)
+ .containsExactlyElementsIn(defaultSessions)
+ }
+
+ @Test
fun installSessions_newSessionsAreAdded() =
testScope.runTest {
val installSessions by collectLastValue(underTest.installSessionsForPrimaryUser)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalOngoingContentStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalOngoingContentStartableTest.kt
index e53155d..ed73d89 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalOngoingContentStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalOngoingContentStartableTest.kt
@@ -21,6 +21,8 @@
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.data.repository.communalMediaRepository
+import com.android.systemui.communal.data.repository.communalSmartspaceRepository
import com.android.systemui.communal.data.repository.fakeCommunalMediaRepository
import com.android.systemui.communal.data.repository.fakeCommunalSmartspaceRepository
import com.android.systemui.communal.domain.interactor.communalInteractor
@@ -28,12 +30,12 @@
import com.android.systemui.communal.domain.interactor.setCommunalEnabled
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
-import com.android.systemui.kosmos.testScope
+import com.android.systemui.kosmos.runTest
+import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,46 +44,64 @@
@EnableFlags(FLAG_COMMUNAL_HUB)
@RunWith(AndroidJUnit4::class)
class CommunalOngoingContentStartableTest : SysuiTestCase() {
- private val kosmos = testKosmos()
- private val testScope = kosmos.testScope
+ private val kosmos = testKosmos().useUnconfinedTestDispatcher()
- private val mediaRepository = kosmos.fakeCommunalMediaRepository
- private val smartspaceRepository = kosmos.fakeCommunalSmartspaceRepository
+ private var showUmoOnHub = true
- private lateinit var underTest: CommunalOngoingContentStartable
+ private val Kosmos.underTest by
+ Kosmos.Fixture {
+ CommunalOngoingContentStartable(
+ bgScope = applicationCoroutineScope,
+ communalInteractor = communalInteractor,
+ communalMediaRepository = communalMediaRepository,
+ communalSettingsInteractor = communalSettingsInteractor,
+ communalSmartspaceRepository = communalSmartspaceRepository,
+ showUmoOnHub = showUmoOnHub,
+ )
+ }
@Before
fun setUp() {
kosmos.fakeFeatureFlagsClassic.set(Flags.COMMUNAL_SERVICE_ENABLED, true)
- underTest =
- CommunalOngoingContentStartable(
- bgScope = kosmos.applicationCoroutineScope,
- communalInteractor = kosmos.communalInteractor,
- communalMediaRepository = mediaRepository,
- communalSettingsInteractor = kosmos.communalSettingsInteractor,
- communalSmartspaceRepository = smartspaceRepository,
- )
}
@Test
- fun testListenForOngoingContentWhenCommunalIsEnabled() =
- testScope.runTest {
+ fun testListenForOngoingContent() =
+ kosmos.runTest {
underTest.start()
- runCurrent()
- assertThat(mediaRepository.isListening()).isFalse()
- assertThat(smartspaceRepository.isListening()).isFalse()
+ assertThat(fakeCommunalMediaRepository.isListening()).isFalse()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isFalse()
kosmos.setCommunalEnabled(true)
- runCurrent()
- assertThat(mediaRepository.isListening()).isTrue()
- assertThat(smartspaceRepository.isListening()).isTrue()
+ assertThat(fakeCommunalMediaRepository.isListening()).isTrue()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isTrue()
kosmos.setCommunalEnabled(false)
- runCurrent()
- assertThat(mediaRepository.isListening()).isFalse()
- assertThat(smartspaceRepository.isListening()).isFalse()
+ assertThat(fakeCommunalMediaRepository.isListening()).isFalse()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isFalse()
+ }
+
+ @Test
+ fun testListenForOngoingContent_showUmoFalse() =
+ kosmos.runTest {
+ showUmoOnHub = false
+ underTest.start()
+
+ assertThat(fakeCommunalMediaRepository.isListening()).isFalse()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isFalse()
+
+ kosmos.setCommunalEnabled(true)
+
+ // Media listening does not start when UMO is disabled.
+ assertThat(fakeCommunalMediaRepository.isListening()).isFalse()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isTrue()
+
+ kosmos.setCommunalEnabled(false)
+
+ assertThat(fakeCommunalMediaRepository.isListening()).isFalse()
+ assertThat(fakeCommunalSmartspaceRepository.isListening()).isFalse()
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt
index dfea784..197b0ee 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/display/data/repository/DisplayRepositoryTest.kt
@@ -23,15 +23,16 @@
import android.view.Display.DEFAULT_DISPLAY
import android.view.Display.TYPE_EXTERNAL
import android.view.Display.TYPE_INTERNAL
+import android.view.IWindowManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.FlowValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
+import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.util.mockito.kotlinArgumentCaptor
import com.android.systemui.util.mockito.mock
-import com.android.systemui.util.mockito.whenever
import com.android.systemui.utils.os.FakeHandler
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.TestScope
@@ -46,6 +47,7 @@
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.kotlin.eq
+import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
@@ -53,7 +55,11 @@
class DisplayRepositoryTest : SysuiTestCase() {
private val displayManager = mock<DisplayManager>()
+ private val commandQueue = mock<CommandQueue>()
+ private val windowManager = mock<IWindowManager>()
+
private val displayListener = kotlinArgumentCaptor<DisplayManager.DisplayListener>()
+ private val commandQueueCallbacks = kotlinArgumentCaptor<CommandQueue.Callbacks>()
private val connectedDisplayListener = kotlinArgumentCaptor<DisplayManager.DisplayListener>()
private val testHandler = FakeHandler(Looper.getMainLooper())
@@ -67,6 +73,8 @@
private val displayRepository: DisplayRepositoryImpl by lazy {
DisplayRepositoryImpl(
displayManager,
+ commandQueue,
+ windowManager,
testHandler,
TestScope(UnconfinedTestDispatcher()),
UnconfinedTestDispatcher(),
@@ -513,6 +521,115 @@
assertThat(displayRepository.getDisplay(2)).isNull()
}
+ @Test
+ fun displayIdsWithSystemDecorations_onStart_emitsDisplaysWithSystemDecorations() =
+ testScope.runTest {
+ setDisplays(0, 1, 2)
+ whenever(windowManager.shouldShowSystemDecors(0)).thenReturn(true)
+ whenever(windowManager.shouldShowSystemDecors(1)).thenReturn(false)
+ whenever(windowManager.shouldShowSystemDecors(2)).thenReturn(true)
+
+ val displayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ assertThat(displayIdsWithSystemDecorations).containsExactly(0, 2)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_systemDecorationAdded_emitsIncludingNewDisplayIds() =
+ testScope.runTest {
+ setDisplays(0)
+ whenever(windowManager.shouldShowSystemDecors(0)).thenReturn(true)
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ sendOnDisplayAddSystemDecorations(2)
+ sendOnDisplayAddSystemDecorations(3)
+
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(0, 2, 3)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_systemDecorationAdded_emitsToNewSubscribers() =
+ testScope.runTest {
+ setDisplays(0)
+ whenever(windowManager.shouldShowSystemDecors(0)).thenReturn(true)
+
+ val priorDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+ sendOnDisplayAddSystemDecorations(1)
+ assertThat(priorDisplayIdsWithSystemDecorations).containsExactly(0, 1)
+
+ val lastDisplayIdsWithSystemDecorations by
+ collectLastValue(displayRepository.displayIdsWithSystemDecorations)
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(0, 1)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_systemDecorationRemoved_doesNotEmitRemovedDisplayId() =
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ sendOnDisplayAddSystemDecorations(1)
+ sendOnDisplayAddSystemDecorations(2)
+ sendOnDisplayRemoveSystemDecorations(2)
+
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(1)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_systemDecorationsRemoved_nonExistentDisplay_noEffect() =
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ sendOnDisplayAddSystemDecorations(1)
+ sendOnDisplayRemoveSystemDecorations(2)
+
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(1)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_displayRemoved_doesNotEmitRemovedDisplayId() =
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ sendOnDisplayAddSystemDecorations(1)
+ sendOnDisplayAddSystemDecorations(2)
+ sendOnDisplayRemoved(2)
+
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(1)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_displayRemoved_nonExistentDisplay_noEffect() =
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ sendOnDisplayAddSystemDecorations(1)
+ sendOnDisplayRemoved(2)
+
+ assertThat(lastDisplayIdsWithSystemDecorations).containsExactly(1)
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_onFlowCollection_commandQueueCallbackRegistered() =
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ assertThat(lastDisplayIdsWithSystemDecorations).isEmpty()
+
+ verify(commandQueue, times(1)).addCallback(any())
+ }
+
+ @Test
+ fun displayIdsWithSystemDecorations_afterFlowCollection_commandQueueCallbackUnregistered() {
+ testScope.runTest {
+ val lastDisplayIdsWithSystemDecorations by latestDisplayIdsWithSystemDecorationsValue()
+
+ assertThat(lastDisplayIdsWithSystemDecorations).isEmpty()
+
+ verify(commandQueue, times(1)).addCallback(any())
+ }
+ verify(commandQueue, times(1)).removeCallback(any())
+ }
+
private fun Iterable<Display>.ids(): List<Int> = map { it.displayId }
private fun Iterable<Set<Display>>.toIdSets(): List<Set<Int>> = map { it.ids().toSet() }
@@ -550,6 +667,14 @@
return flowValue
}
+ // Wrapper to capture the displayListener and commandQueueCallbacks.
+ private fun TestScope.latestDisplayIdsWithSystemDecorationsValue(): FlowValue<Set<Int>?> {
+ val flowValue = collectLastValue(displayRepository.displayIdsWithSystemDecorations)
+ captureAddedRemovedListener()
+ captureCommandQueueCallbacks()
+ return flowValue
+ }
+
private fun captureAddedRemovedListener() {
verify(displayManager)
.registerDisplayListener(
@@ -563,6 +688,10 @@
)
}
+ private fun captureCommandQueueCallbacks() {
+ verify(commandQueue).addCallback(commandQueueCallbacks.capture())
+ }
+
private fun sendOnDisplayAdded(id: Int, displayType: Int) {
val mockDisplay = display(id = id, type = displayType)
whenever(displayManager.getDisplay(eq(id))).thenReturn(mockDisplay)
@@ -592,6 +721,14 @@
connectedDisplayListener.value.onDisplayChanged(id)
}
+ private fun sendOnDisplayRemoveSystemDecorations(id: Int) {
+ commandQueueCallbacks.value.onDisplayRemoveSystemDecorations(id)
+ }
+
+ private fun sendOnDisplayAddSystemDecorations(id: Int) {
+ commandQueueCallbacks.value.onDisplayAddSystemDecorations(id)
+ }
+
private fun setDisplays(displays: List<Display>) {
whenever(displayManager.displays).thenReturn(displays.toTypedArray())
displays.forEach { display ->
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
index 2ef86e66..1665895 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
@@ -19,6 +19,8 @@
import android.content.pm.PackageManager
import android.content.res.Resources
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
import android.view.View.GONE
import android.view.View.VISIBLE
import androidx.constraintlayout.widget.ConstraintSet
@@ -128,6 +130,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testApplyDefaultConstraints_LargeClock_SplitShade() =
kosmos.testScope.runTest {
with(kosmos) {
@@ -144,11 +147,54 @@
}
@Test
+ @EnableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
+ fun testApplyDefaultConstraints_LargeClock_SplitShade_ReactiveVariantsOn() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ shadeRepository.setShadeLayoutWide(true)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ advanceUntilIdle()
+ }
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
+ ENHANCED_SMART_SPACE_HEIGHT)
+ assertSmallClockTop(cs)
+ }
+
+ @Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testApplyDefaultConstraints_LargeClock_NonSplitShade() =
kosmos.testScope.runTest {
with(kosmos) {
val isShadeLayoutWide by collectLastValue(shadeRepository.isShadeLayoutWide)
val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeLayoutWide(false)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ @EnableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
+ fun testApplyDefaultConstraints_LargeClock_NonSplitShade_reactiveVariantsOn() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val isShadeLayoutWide by collectLastValue(shadeRepository.isShadeLayoutWide)
+ val isLargeClockVisible by
collectLastValue(keyguardClockViewModel.isLargeClockVisible)
shadeRepository.setShadeLayoutWide(false)
@@ -161,7 +207,8 @@
val cs = ConstraintSet()
underTest.applyDefaultConstraints(cs)
- assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
+ ENHANCED_SMART_SPACE_HEIGHT)
assertSmallClockTop(cs)
}
}
@@ -215,6 +262,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testApplyDefaultConstraints_SmallClock_SplitShade() =
kosmos.testScope.runTest {
with(kosmos) {
@@ -238,6 +286,32 @@
}
@Test
+ @EnableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
+ fun testApplyDefaultConstraints_SmallClock_SplitShade_ReactiveVariantsOn() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val isShadeLayoutWide by collectLastValue(shadeRepository.isShadeLayoutWide)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeLayoutWide(true)
+ keyguardClockInteractor.setClockSize(ClockSize.SMALL)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
+ ENHANCED_SMART_SPACE_HEIGHT)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testApplyDefaultConstraints_SmallClock_NonSplitShade() =
kosmos.testScope.runTest {
with(kosmos) {
@@ -260,6 +334,30 @@
}
@Test
+ @EnableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
+ fun testApplyDefaultConstraints_SmallClock_NonSplitShade_ReactiveVariantsOn() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val isShadeLayoutWide by collectLastValue(shadeRepository.isShadeLayoutWide)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeLayoutWide(false)
+ keyguardClockInteractor.setClockSize(ClockSize.SMALL)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
+ ENHANCED_SMART_SPACE_HEIGHT)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
fun testSmartspaceVisible_weatherClockDateAndIconsBarrierBottomBelowBCSmartspace() =
kosmos.testScope.runTest {
with(kosmos) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt
index 7706c50..374bcbf 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt
@@ -17,6 +17,7 @@
package com.android.systemui.keyguard.ui.view.layout.sections
+import android.platform.test.annotations.DisableFlags
import android.view.View
import android.widget.LinearLayout
import androidx.constraintlayout.widget.ConstraintLayout
@@ -31,6 +32,7 @@
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardSmartspaceInteractor
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.res.R
import com.android.systemui.shared.R as sharedR
@@ -48,6 +50,7 @@
@RunWith(AndroidJUnit4::class)
@SmallTest
+@DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
class SmartspaceSectionTest : SysuiTestCase() {
private lateinit var underTest: SmartspaceSection
@Mock private lateinit var keyguardClockViewModel: KeyguardClockViewModel
@@ -56,6 +59,7 @@
@Mock private lateinit var keyguardUnlockAnimationController: KeyguardUnlockAnimationController
@Mock private lateinit var keyguardSmartspaceInteractor: KeyguardSmartspaceInteractor
@Mock private lateinit var blueprintInteractor: Lazy<KeyguardBlueprintInteractor>
+ @Mock private lateinit var keyguardRootViewModel: KeyguardRootViewModel
private val smartspaceView = View(mContext).also { it.id = sharedR.id.bc_smartspace_view }
private val weatherView = View(mContext).also { it.id = sharedR.id.weather_smartspace_view }
@@ -80,13 +84,14 @@
lockscreenSmartspaceController,
keyguardUnlockAnimationController,
blueprintInteractor,
+ keyguardRootViewModel,
)
constraintLayout = ConstraintLayout(mContext)
whenever(lockscreenSmartspaceController.buildAndConnectView(any()))
.thenReturn(smartspaceView)
- whenever(lockscreenSmartspaceController.buildAndConnectWeatherView(any()))
+ whenever(lockscreenSmartspaceController.buildAndConnectWeatherView(any(), any()))
.thenReturn(weatherView)
- whenever(lockscreenSmartspaceController.buildAndConnectDateView(any())).thenReturn(dateView)
+ whenever(lockscreenSmartspaceController.buildAndConnectDateView(any(), any())).thenReturn(dateView)
whenever(keyguardClockViewModel.hasCustomWeatherDataDisplay)
.thenReturn(hasCustomWeatherDataDisplay)
whenever(keyguardClockViewModel.clockShouldBeCentered).thenReturn(clockShouldBeCentered)
@@ -97,6 +102,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testAddViews_notSmartspaceEnabled() {
whenever(keyguardSmartspaceViewModel.isSmartspaceEnabled).thenReturn(false)
val constraintLayout = ConstraintLayout(mContext)
@@ -107,6 +113,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testAddViews_smartspaceEnabled_dateWeatherDecoupled() {
whenever(keyguardSmartspaceViewModel.isDateWeatherDecoupled).thenReturn(true)
underTest.addViews(constraintLayout)
@@ -125,6 +132,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testConstraintsWhenShadeLayoutIsNotWide() {
underTest.addViews(constraintLayout)
underTest.applyConstraints(constraintSet)
@@ -134,6 +142,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testConstraintsWhenShadeLayoutIsWide() {
isShadeLayoutWide.value = true
@@ -145,6 +154,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testConstraintsWhenNotHasCustomWeatherDataDisplay() {
whenever(keyguardSmartspaceViewModel.isDateWeatherDecoupled).thenReturn(true)
underTest.addViews(constraintLayout)
@@ -159,6 +169,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testConstraintsWhenHasCustomWeatherDataDisplay() {
hasCustomWeatherDataDisplay.value = true
underTest.addViews(constraintLayout)
@@ -169,6 +180,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testNormalDateWeatherVisibility() {
isWeatherVisibleFlow.value = true
underTest.addViews(constraintLayout)
@@ -182,6 +194,7 @@
}
@Test
+ @DisableFlags(com.android.systemui.shared.Flags.FLAG_CLOCK_REACTIVE_SMARTSPACE_LAYOUT)
fun testCustomDateWeatherVisibility() {
hasCustomWeatherDataDisplay.value = true
underTest.addViews(constraintLayout)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/binder/SeekBarObserverTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/binder/SeekBarObserverTest.kt
index 943ada9..c71b107 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/binder/SeekBarObserverTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/binder/SeekBarObserverTest.kt
@@ -18,9 +18,6 @@
import android.animation.Animator
import android.animation.ObjectAnimator
-import android.icu.text.MeasureFormat
-import android.icu.util.Measure
-import android.icu.util.MeasureUnit
import android.testing.TestableLooper
import android.view.View
import android.widget.SeekBar
@@ -33,7 +30,6 @@
import com.android.systemui.media.controls.ui.viewmodel.SeekBarViewModel
import com.android.systemui.res.R
import com.google.common.truth.Truth.assertThat
-import java.util.Locale
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -114,32 +110,12 @@
@Test
fun seekBarProgress() {
- val elapsedTime = 3000
- val duration = (1.5 * 60 * 60 * 1000).toInt()
// WHEN part of the track has been played
- val data = SeekBarViewModel.Progress(true, true, true, false, elapsedTime, duration, true)
+ val data = SeekBarViewModel.Progress(true, true, true, false, 3000, 120000, true)
observer.onChanged(data)
// THEN seek bar shows the progress
- assertThat(seekBarView.progress).isEqualTo(elapsedTime)
- assertThat(seekBarView.max).isEqualTo(duration)
-
- val expectedProgress =
- MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
- .formatMeasures(Measure(3, MeasureUnit.SECOND))
- val expectedDuration =
- MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
- .formatMeasures(
- Measure(1, MeasureUnit.HOUR),
- Measure(30, MeasureUnit.MINUTE),
- Measure(0, MeasureUnit.SECOND),
- )
- val desc =
- context.getString(
- R.string.controls_media_seekbar_description,
- expectedProgress,
- expectedDuration,
- )
- assertThat(seekBarView.contentDescription).isEqualTo(desc)
+ assertThat(seekBarView.progress).isEqualTo(3000)
+ assertThat(seekBarView.max).isEqualTo(120000)
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
index 917f356..80ce43d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
@@ -65,8 +65,7 @@
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private val sceneInteractor = kosmos.sceneInteractor
-
+ private val sceneInteractor by lazy { kosmos.sceneInteractor }
private val underTest by lazy { kosmos.notificationsShadeOverlayContentViewModel }
@Before
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
index 1899b7d..0e5e333 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java
@@ -423,5 +423,15 @@
@Override
public void destroy() {}
+
+ @Override
+ public boolean isDestroyed() {
+ return false;
+ }
+
+ @Override
+ public int getCurrentTileUser() {
+ return 0;
+ }
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/TilesAvailabilityInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/TilesAvailabilityInteractorTest.kt
index 5a58597..67fb100 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/TilesAvailabilityInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/TilesAvailabilityInteractorTest.kt
@@ -56,166 +56,178 @@
private val createdTiles = mutableListOf<FakeQSTile>()
- private val kosmos = testKosmos().apply {
- tileAvailabilityInteractorsMap = buildMap {
- put(AIRPLANE_MODE_TILE_SPEC, QSTileAvailabilityInteractor.AlwaysAvailableInteractor)
- put(WORK_MODE_TILE_SPEC, FakeTileAvailabilityInteractor(
- mapOf(
- fakeUserRepository.getSelectedUserInfo().id to flowOf(true),
- ).withDefault { flowOf(false) }
- ))
- put(HOTSPOT_TILE_SPEC, FakeTileAvailabilityInteractor(
- emptyMap<Int, Flow<Boolean>>().withDefault { flowOf(false) }
- ))
- }
+ private val kosmos =
+ testKosmos().apply {
+ tileAvailabilityInteractorsMap = buildMap {
+ put(AIRPLANE_MODE_TILE_SPEC, QSTileAvailabilityInteractor.AlwaysAvailableInteractor)
+ put(
+ WORK_MODE_TILE_SPEC,
+ FakeTileAvailabilityInteractor(
+ mapOf(fakeUserRepository.getSelectedUserInfo().id to flowOf(true))
+ .withDefault { flowOf(false) }
+ ),
+ )
+ put(
+ HOTSPOT_TILE_SPEC,
+ FakeTileAvailabilityInteractor(
+ emptyMap<Int, Flow<Boolean>>().withDefault { flowOf(false) }
+ ),
+ )
+ }
- qsTileFactory = constantFactory(
- tilesForCreator(
+ qsTileFactory =
+ constantFactory(
+ tilesForCreator(
userRepository.getSelectedUserInfo().id,
mapOf(
- AIRPLANE_MODE_TILE_SPEC to false,
- WORK_MODE_TILE_SPEC to false,
- HOTSPOT_TILE_SPEC to true,
- INTERNET_TILE_SPEC to true,
- FLASHLIGHT_TILE_SPEC to false,
- )
+ AIRPLANE_MODE_TILE_SPEC to false,
+ WORK_MODE_TILE_SPEC to false,
+ HOTSPOT_TILE_SPEC to true,
+ INTERNET_TILE_SPEC to true,
+ FLASHLIGHT_TILE_SPEC to false,
+ ),
+ )
)
- )
- }
+ }
private val underTest by lazy { kosmos.tilesAvailabilityInteractor }
@Test
@DisableFlags(FLAG_QS_NEW_TILES)
- fun flagOff_usesAvailabilityFromFactoryTiles() = with(kosmos) {
- testScope.runTest {
- val unavailableTiles = underTest.getUnavailableTiles(
- setOf(
- AIRPLANE_MODE_TILE_SPEC,
- WORK_MODE_TILE_SPEC,
- HOTSPOT_TILE_SPEC,
- INTERNET_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).map(TileSpec::create)
- )
- assertThat(unavailableTiles).isEqualTo(setOf(
- AIRPLANE_MODE_TILE_SPEC,
- WORK_MODE_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).mapTo(mutableSetOf(), TileSpec::create))
- }
- }
-
- @Test
- fun tileCannotBeCreated_isUnavailable() = with(kosmos) {
- testScope.runTest {
- val badSpec = TileSpec.create("unknown")
- val unavailableTiles = underTest.getUnavailableTiles(
- setOf(
- badSpec
+ fun flagOff_usesAvailabilityFromFactoryTiles() =
+ with(kosmos) {
+ testScope.runTest {
+ val unavailableTiles =
+ underTest.getUnavailableTiles(
+ setOf(
+ AIRPLANE_MODE_TILE_SPEC,
+ WORK_MODE_TILE_SPEC,
+ HOTSPOT_TILE_SPEC,
+ INTERNET_TILE_SPEC,
+ FLASHLIGHT_TILE_SPEC,
+ )
+ .map(TileSpec::create)
)
- )
- assertThat(unavailableTiles).contains(badSpec)
+ assertThat(unavailableTiles)
+ .isEqualTo(
+ setOf(AIRPLANE_MODE_TILE_SPEC, WORK_MODE_TILE_SPEC, FLASHLIGHT_TILE_SPEC)
+ .mapTo(mutableSetOf(), TileSpec::create)
+ )
+ }
}
- }
+
+ @Test
+ fun tileCannotBeCreated_isUnavailable() =
+ with(kosmos) {
+ testScope.runTest {
+ val badSpec = TileSpec.create("unknown")
+ val unavailableTiles = underTest.getUnavailableTiles(setOf(badSpec))
+ assertThat(unavailableTiles).contains(badSpec)
+ }
+ }
@Test
@EnableFlags(FLAG_QS_NEW_TILES)
- fun flagOn_defaultsToInteractorTiles_usesFactoryForOthers() = with(kosmos) {
- testScope.runTest {
- val unavailableTiles = underTest.getUnavailableTiles(
+ fun flagOn_defaultsToInteractorTiles_usesFactoryForOthers() =
+ with(kosmos) {
+ testScope.runTest {
+ val unavailableTiles =
+ underTest.getUnavailableTiles(
+ setOf(
+ AIRPLANE_MODE_TILE_SPEC,
+ WORK_MODE_TILE_SPEC,
+ HOTSPOT_TILE_SPEC,
+ INTERNET_TILE_SPEC,
+ FLASHLIGHT_TILE_SPEC,
+ )
+ .map(TileSpec::create)
+ )
+ assertThat(unavailableTiles)
+ .isEqualTo(
+ setOf(HOTSPOT_TILE_SPEC, FLASHLIGHT_TILE_SPEC)
+ .mapTo(mutableSetOf(), TileSpec::create)
+ )
+ }
+ }
+
+ @Test
+ @EnableFlags(FLAG_QS_NEW_TILES)
+ fun flagOn_defaultsToInteractorTiles_usesFactoryForOthers_userChange() =
+ with(kosmos) {
+ testScope.runTest {
+ fakeUserRepository.asMainUser()
+ val unavailableTiles =
+ underTest.getUnavailableTiles(
+ setOf(
+ AIRPLANE_MODE_TILE_SPEC,
+ WORK_MODE_TILE_SPEC,
+ HOTSPOT_TILE_SPEC,
+ INTERNET_TILE_SPEC,
+ FLASHLIGHT_TILE_SPEC,
+ )
+ .map(TileSpec::create)
+ )
+ assertThat(unavailableTiles)
+ .isEqualTo(
+ setOf(WORK_MODE_TILE_SPEC, HOTSPOT_TILE_SPEC, FLASHLIGHT_TILE_SPEC)
+ .mapTo(mutableSetOf(), TileSpec::create)
+ )
+ }
+ }
+
+ @Test
+ @EnableFlags(FLAG_QS_NEW_TILES)
+ fun flagOn_onlyNeededTilesAreCreated_andThenDestroyed() =
+ with(kosmos) {
+ testScope.runTest {
+ underTest.getUnavailableTiles(
setOf(
AIRPLANE_MODE_TILE_SPEC,
WORK_MODE_TILE_SPEC,
HOTSPOT_TILE_SPEC,
INTERNET_TILE_SPEC,
FLASHLIGHT_TILE_SPEC,
- ).map(TileSpec::create)
- )
- assertThat(unavailableTiles).isEqualTo(setOf(
- HOTSPOT_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).mapTo(mutableSetOf(), TileSpec::create))
- }
- }
-
- @Test
- @EnableFlags(FLAG_QS_NEW_TILES)
- fun flagOn_defaultsToInteractorTiles_usesFactoryForOthers_userChange() = with(kosmos) {
- testScope.runTest {
- fakeUserRepository.asMainUser()
- val unavailableTiles = underTest.getUnavailableTiles(
- setOf(
- AIRPLANE_MODE_TILE_SPEC,
- WORK_MODE_TILE_SPEC,
- HOTSPOT_TILE_SPEC,
- INTERNET_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).map(TileSpec::create)
- )
- assertThat(unavailableTiles).isEqualTo(setOf(
- WORK_MODE_TILE_SPEC,
- HOTSPOT_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).mapTo(mutableSetOf(), TileSpec::create))
- }
- }
-
- @Test
- @EnableFlags(FLAG_QS_NEW_TILES)
- fun flagOn_onlyNeededTilesAreCreated_andThenDestroyed() = with(kosmos) {
- testScope.runTest {
- underTest.getUnavailableTiles(
- setOf(
- AIRPLANE_MODE_TILE_SPEC,
- WORK_MODE_TILE_SPEC,
- HOTSPOT_TILE_SPEC,
- INTERNET_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- ).map(TileSpec::create)
- )
- assertThat(createdTiles.map { it.tileSpec })
+ )
+ .map(TileSpec::create)
+ )
+ assertThat(createdTiles.map { it.tileSpec })
.containsExactly(INTERNET_TILE_SPEC, FLASHLIGHT_TILE_SPEC)
- assertThat(createdTiles.all { it.destroyed }).isTrue()
+ assertThat(createdTiles.all { it.isDestroyed }).isTrue()
+ }
}
- }
@Test
@DisableFlags(FLAG_QS_NEW_TILES)
- fun flagOn_TilesAreCreatedAndThenDestroyed() = with(kosmos) {
- testScope.runTest {
- val allTiles = setOf(
- AIRPLANE_MODE_TILE_SPEC,
- WORK_MODE_TILE_SPEC,
- HOTSPOT_TILE_SPEC,
- INTERNET_TILE_SPEC,
- FLASHLIGHT_TILE_SPEC,
- )
- underTest.getUnavailableTiles(allTiles.map(TileSpec::create))
- assertThat(createdTiles.map { it.tileSpec })
- .containsExactlyElementsIn(allTiles)
- assertThat(createdTiles.all { it.destroyed }).isTrue()
+ fun flagOn_TilesAreCreatedAndThenDestroyed() =
+ with(kosmos) {
+ testScope.runTest {
+ val allTiles =
+ setOf(
+ AIRPLANE_MODE_TILE_SPEC,
+ WORK_MODE_TILE_SPEC,
+ HOTSPOT_TILE_SPEC,
+ INTERNET_TILE_SPEC,
+ FLASHLIGHT_TILE_SPEC,
+ )
+ underTest.getUnavailableTiles(allTiles.map(TileSpec::create))
+ assertThat(createdTiles.map { it.tileSpec }).containsExactlyElementsIn(allTiles)
+ assertThat(createdTiles.all { it.isDestroyed }).isTrue()
+ }
}
- }
-
private fun constantFactory(creatorTiles: Set<FakeQSTile>): QSFactory {
return FakeQSFactory { spec ->
- creatorTiles.firstOrNull { it.tileSpec == spec }?.also {
- createdTiles.add(it)
- }
+ creatorTiles.firstOrNull { it.tileSpec == spec }?.also { createdTiles.add(it) }
}
}
companion object {
private fun tilesForCreator(
- user: Int,
- specAvailabilities: Map<String, Boolean>
+ user: Int,
+ specAvailabilities: Map<String, Boolean>,
): Set<FakeQSTile> {
return specAvailabilities.mapTo(mutableSetOf()) {
- FakeQSTile(user, it.value).apply {
- tileSpec = it.key
- }
+ FakeQSTile(user, it.value).apply { tileSpec = it.key }
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractorImplTest.kt
index 9b50f1b..c308976 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractorImplTest.kt
@@ -17,10 +17,10 @@
package com.android.systemui.qs.pipeline.domain.interactor
import android.content.ComponentName
-import android.content.Context
import android.content.Intent
import android.content.pm.UserInfo
import android.os.UserHandle
+import android.platform.test.annotations.EnableFlags
import android.service.quicksettings.Tile
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -28,653 +28,702 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.dump.nano.SystemUIProtoDump
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.runTest
+import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.qs.QSTile
import com.android.systemui.plugins.qs.QSTile.BooleanState
import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.FakeQSFactory
import com.android.systemui.qs.FakeQSTile
import com.android.systemui.qs.external.CustomTile
-import com.android.systemui.qs.external.CustomTileStatePersister
import com.android.systemui.qs.external.TileLifecycleManager
import com.android.systemui.qs.external.TileServiceKey
-import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepository
-import com.android.systemui.qs.pipeline.data.repository.FakeCustomTileAddedRepository
-import com.android.systemui.qs.pipeline.data.repository.FakeInstalledTilesComponentRepository
-import com.android.systemui.qs.pipeline.data.repository.FakeTileSpecRepository
-import com.android.systemui.qs.pipeline.data.repository.MinimumTilesFixedRepository
-import com.android.systemui.qs.pipeline.data.repository.TileSpecRepository
+import com.android.systemui.qs.external.customTileStatePersister
+import com.android.systemui.qs.external.tileLifecycleManagerFactory
+import com.android.systemui.qs.pipeline.data.repository.customTileAddedRepository
+import com.android.systemui.qs.pipeline.data.repository.fakeInstalledTilesRepository
+import com.android.systemui.qs.pipeline.data.repository.tileSpecRepository
import com.android.systemui.qs.pipeline.domain.model.TileModel
-import com.android.systemui.qs.pipeline.shared.QSPipelineFlagsRepository
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.qs.pipeline.shared.logging.QSPipelineLogger
-import com.android.systemui.qs.tiles.di.NewQSTileFactory
+import com.android.systemui.qs.pipeline.shared.logging.qsLogger
+import com.android.systemui.qs.qsTileFactory
+import com.android.systemui.qs.tiles.di.newQSTileFactory
import com.android.systemui.qs.toProto
-import com.android.systemui.retail.data.repository.FakeRetailModeRepository
-import com.android.systemui.settings.UserTracker
-import com.android.systemui.user.data.repository.FakeUserRepository
+import com.android.systemui.settings.fakeUserTracker
+import com.android.systemui.testKosmos
+import com.android.systemui.user.data.repository.fakeUserRepository
+import com.android.systemui.user.data.repository.userRepository
import com.android.systemui.util.mockito.any
-import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import com.google.protobuf.nano.MessageNano
-import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyString
-import org.mockito.Mock
import org.mockito.Mockito.inOrder
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
+@EnableFlags(FLAG_QS_NEW_TILES)
class CurrentTilesInteractorImplTest : SysuiTestCase() {
- private val tileSpecRepository: TileSpecRepository = FakeTileSpecRepository()
- private val userRepository = FakeUserRepository()
- private val installedTilesPackageRepository = FakeInstalledTilesComponentRepository()
- private val tileFactory = FakeQSFactory(::tileCreator)
- private val customTileAddedRepository: CustomTileAddedRepository =
- FakeCustomTileAddedRepository()
- private val pipelineFlags = QSPipelineFlagsRepository()
- private val tileLifecycleManagerFactory = TLMFactory()
- private val minimumTilesRepository = MinimumTilesFixedRepository()
- private val retailModeRepository = FakeRetailModeRepository()
-
- @Mock private lateinit var customTileStatePersister: CustomTileStatePersister
-
- @Mock private lateinit var userTracker: UserTracker
-
- @Mock private lateinit var logger: QSPipelineLogger
-
- @Mock private lateinit var newQSTileFactory: NewQSTileFactory
-
- private val testDispatcher = StandardTestDispatcher()
- private val testScope = TestScope(testDispatcher)
+ private val kosmos =
+ testKosmos().apply {
+ qsTileFactory = FakeQSFactory { tileCreator(it) }
+ fakeUserTracker.set(listOf(USER_INFO_0), 0)
+ fakeUserRepository.setUserInfos(listOf(USER_INFO_0, USER_INFO_1))
+ tileLifecycleManagerFactory = TLMFactory()
+ newQSTileFactory = mock()
+ qsLogger = mock()
+ }
private val unavailableTiles = mutableSetOf("e")
- private lateinit var underTest: CurrentTilesInteractorImpl
-
- @Before
- fun setup() {
- MockitoAnnotations.initMocks(this)
-
- mSetFlagsRule.enableFlags(FLAG_QS_NEW_TILES)
-
- userRepository.setUserInfos(listOf(USER_INFO_0, USER_INFO_1))
-
- setUserTracker(0)
-
- underTest =
- CurrentTilesInteractorImpl(
- tileSpecRepository = tileSpecRepository,
- installedTilesComponentRepository = installedTilesPackageRepository,
- userRepository = userRepository,
- minimumTilesRepository = minimumTilesRepository,
- retailModeRepository = retailModeRepository,
- customTileStatePersister = customTileStatePersister,
- tileFactory = tileFactory,
- newQSTileFactory = { newQSTileFactory },
- customTileAddedRepository = customTileAddedRepository,
- tileLifecycleManagerFactory = tileLifecycleManagerFactory,
- userTracker = userTracker,
- mainDispatcher = testDispatcher,
- backgroundDispatcher = testDispatcher,
- scope = testScope.backgroundScope,
- logger = logger,
- featureFlags = pipelineFlags,
- )
- }
+ private val underTest = kosmos.currentTilesInteractor
@Test
fun initialState() =
- testScope.runTest(USER_INFO_0) {
- assertThat(underTest.currentTiles.value).isEmpty()
- assertThat(underTest.currentQSTiles).isEmpty()
- assertThat(underTest.currentTilesSpecs).isEmpty()
- assertThat(underTest.userId.value).isEqualTo(0)
- assertThat(underTest.userContext.value.userId).isEqualTo(0)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ assertThat(underTest.currentTiles.value).isEmpty()
+ assertThat(underTest.currentQSTiles).isEmpty()
+ assertThat(underTest.currentTilesSpecs).isEmpty()
+ assertThat(underTest.userId.value).isEqualTo(0)
+ assertThat(underTest.userContext.value.userId).isEqualTo(0)
+ }
}
@Test
fun correctTiles() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs =
- listOf(
- TileSpec.create("a"),
- TileSpec.create("e"),
- CUSTOM_TILE_SPEC,
- TileSpec.create("d"),
- TileSpec.create("non_existent"),
- )
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val specs =
+ listOf(
+ TileSpec.create("a"),
+ TileSpec.create("e"),
+ CUSTOM_TILE_SPEC,
+ TileSpec.create("d"),
+ TileSpec.create("non_existent"),
+ )
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- // check each tile
+ // check each tile
- // Tile a
- val tile0 = tiles!![0]
- assertThat(tile0.spec).isEqualTo(specs[0])
- assertThat(tile0.tile.tileSpec).isEqualTo(specs[0].spec)
- assertThat(tile0.tile).isInstanceOf(FakeQSTile::class.java)
- assertThat(tile0.tile.isAvailable).isTrue()
+ // Tile a
+ val tile0 = tiles!![0]
+ assertThat(tile0.spec).isEqualTo(specs[0])
+ assertThat(tile0.tile.tileSpec).isEqualTo(specs[0].spec)
+ assertThat(tile0.tile).isInstanceOf(FakeQSTile::class.java)
+ assertThat(tile0.tile.isAvailable).isTrue()
- // Tile e is not available and is not in the list
+ // Tile e is not available and is not in the list
- // Custom Tile
- val tile1 = tiles!![1]
- assertThat(tile1.spec).isEqualTo(specs[2])
- assertThat(tile1.tile.tileSpec).isEqualTo(specs[2].spec)
- assertThat(tile1.tile).isInstanceOf(CustomTile::class.java)
- assertThat(tile1.tile.isAvailable).isTrue()
+ // Custom Tile
+ val tile1 = tiles!![1]
+ assertThat(tile1.spec).isEqualTo(specs[2])
+ assertThat(tile1.tile.tileSpec).isEqualTo(specs[2].spec)
+ assertThat(tile1.tile).isInstanceOf(CustomTile::class.java)
+ assertThat(tile1.tile.isAvailable).isTrue()
- // Tile d
- val tile2 = tiles!![2]
- assertThat(tile2.spec).isEqualTo(specs[3])
- assertThat(tile2.tile.tileSpec).isEqualTo(specs[3].spec)
- assertThat(tile2.tile).isInstanceOf(FakeQSTile::class.java)
- assertThat(tile2.tile.isAvailable).isTrue()
+ // Tile d
+ val tile2 = tiles!![2]
+ assertThat(tile2.spec).isEqualTo(specs[3])
+ assertThat(tile2.tile.tileSpec).isEqualTo(specs[3].spec)
+ assertThat(tile2.tile).isInstanceOf(FakeQSTile::class.java)
+ assertThat(tile2.tile.isAvailable).isTrue()
- // Tile non-existent shouldn't be created. Therefore, only 3 tiles total
- assertThat(tiles?.size).isEqualTo(3)
+ // Tile non-existent shouldn't be created. Therefore, only 3 tiles total
+ assertThat(tiles?.size).isEqualTo(3)
+ }
}
@Test
fun logTileCreated() =
- testScope.runTest(USER_INFO_0) {
- val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
- specs.forEach { verify(logger).logTileCreated(it) }
+ specs.forEach { verify(qsLogger).logTileCreated(it) }
+ }
}
@Test
fun logTileNotFoundInFactory() =
- testScope.runTest(USER_INFO_0) {
- val specs = listOf(TileSpec.create("non_existing"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val specs = listOf(TileSpec.create("non_existing"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
- verify(logger, never()).logTileCreated(any())
- verify(logger).logTileNotFoundInFactory(specs[0])
+ verify(qsLogger, never()).logTileCreated(any())
+ verify(qsLogger).logTileNotFoundInFactory(specs[0])
+ }
}
@Test
fun tileNotAvailableDestroyed_logged() =
- testScope.runTest(USER_INFO_0) {
- val specs = listOf(TileSpec.create("e"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val specs = listOf(TileSpec.create("e"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
- verify(logger, never()).logTileCreated(any())
- verify(logger)
- .logTileDestroyed(
- specs[0],
- QSPipelineLogger.TileDestroyedReason.NEW_TILE_NOT_AVAILABLE,
- )
+ verify(qsLogger, never()).logTileCreated(any())
+ verify(qsLogger)
+ .logTileDestroyed(
+ specs[0],
+ QSPipelineLogger.TileDestroyedReason.NEW_TILE_NOT_AVAILABLE,
+ )
+ }
}
@Test
fun someTilesNotValid_repositorySetToDefinitiveList() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val specs = listOf(TileSpec.create("a"), TileSpec.create("e"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("e"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles).isEqualTo(listOf(TileSpec.create("a")))
+ assertThat(tiles).isEqualTo(listOf(TileSpec.create("a")))
+ }
}
@Test
fun deduplicatedTiles() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), TileSpec.create("a"))
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("a"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles?.size).isEqualTo(1)
- assertThat(tiles!![0].spec).isEqualTo(specs[0])
+ assertThat(tiles?.size).isEqualTo(1)
+ assertThat(tiles!![0].spec).isEqualTo(specs[0])
+ }
}
@Test
fun tilesChange_platformTileNotRecreated() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"))
+ val specs = listOf(TileSpec.create("a"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- val originalTileA = tiles!![0].tile
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val originalTileA = tiles!![0].tile
- tileSpecRepository.addTile(USER_INFO_0.id, TileSpec.create("b"))
+ tileSpecRepository.addTile(USER_INFO_0.id, TileSpec.create("b"))
- assertThat(tiles?.size).isEqualTo(2)
- assertThat(tiles!![0].tile).isSameInstanceAs(originalTileA)
+ assertThat(tiles?.size).isEqualTo(2)
+ assertThat(tiles!![0].tile).isSameInstanceAs(originalTileA)
+ }
}
@Test
fun tileRemovedIsDestroyed() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), TileSpec.create("c"))
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("c"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- val originalTileC = tiles!![1].tile
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val originalTileC = tiles!![1].tile
- tileSpecRepository.removeTiles(USER_INFO_0.id, listOf(TileSpec.create("c")))
+ tileSpecRepository.removeTiles(USER_INFO_0.id, listOf(TileSpec.create("c")))
- assertThat(tiles?.size).isEqualTo(1)
- assertThat(tiles!![0].spec).isEqualTo(TileSpec.create("a"))
+ assertThat(tiles?.size).isEqualTo(1)
+ assertThat(tiles!![0].spec).isEqualTo(TileSpec.create("a"))
- assertThat((originalTileC as FakeQSTile).destroyed).isTrue()
- verify(logger)
- .logTileDestroyed(
- TileSpec.create("c"),
- QSPipelineLogger.TileDestroyedReason.TILE_REMOVED,
- )
+ assertThat(originalTileC.isDestroyed).isTrue()
+ verify(qsLogger)
+ .logTileDestroyed(
+ TileSpec.create("c"),
+ QSPipelineLogger.TileDestroyedReason.TILE_REMOVED,
+ )
+ }
}
@Test
fun tileBecomesNotAvailable_destroyed() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
- val repoTiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ val repoTiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val specs = listOf(TileSpec.create("a"))
+ val specs = listOf(TileSpec.create("a"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- val originalTileA = tiles!![0].tile
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val originalTileA = tiles!![0].tile
- // Tile becomes unavailable
- (originalTileA as FakeQSTile).available = false
- unavailableTiles.add("a")
- // and there is some change in the specs
- tileSpecRepository.addTile(USER_INFO_0.id, TileSpec.create("b"))
- runCurrent()
+ // Tile becomes unavailable
+ (originalTileA as FakeQSTile).available = false
+ unavailableTiles.add("a")
+ // and there is some change in the specs
+ tileSpecRepository.addTile(USER_INFO_0.id, TileSpec.create("b"))
+ runCurrent()
- assertThat(originalTileA.destroyed).isTrue()
- verify(logger)
- .logTileDestroyed(
- TileSpec.create("a"),
- QSPipelineLogger.TileDestroyedReason.EXISTING_TILE_NOT_AVAILABLE,
- )
+ assertThat(originalTileA.isDestroyed).isTrue()
+ verify(qsLogger)
+ .logTileDestroyed(
+ TileSpec.create("a"),
+ QSPipelineLogger.TileDestroyedReason.EXISTING_TILE_NOT_AVAILABLE,
+ )
- assertThat(tiles?.size).isEqualTo(1)
- assertThat(tiles!![0].spec).isEqualTo(TileSpec.create("b"))
- assertThat(tiles!![0].tile).isNotSameInstanceAs(originalTileA)
+ assertThat(tiles?.size).isEqualTo(1)
+ assertThat(tiles!![0].spec).isEqualTo(TileSpec.create("b"))
+ assertThat(tiles!![0].tile).isNotSameInstanceAs(originalTileA)
- assertThat(repoTiles).isEqualTo(tiles!!.map(TileModel::spec))
+ assertThat(repoTiles).isEqualTo(tiles!!.map(TileModel::spec))
+ }
}
@Test
fun userChange_tilesChange() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs0 = listOf(TileSpec.create("a"))
- val specs1 = listOf(TileSpec.create("b"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs0)
- tileSpecRepository.setTiles(USER_INFO_1.id, specs1)
+ val specs0 = listOf(TileSpec.create("a"))
+ val specs1 = listOf(TileSpec.create("b"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs0)
+ tileSpecRepository.setTiles(USER_INFO_1.id, specs1)
- switchUser(USER_INFO_1)
+ switchUser(USER_INFO_1)
- assertThat(tiles!![0].spec).isEqualTo(specs1[0])
- assertThat(tiles!![0].tile.tileSpec).isEqualTo(specs1[0].spec)
+ assertThat(tiles!![0].spec).isEqualTo(specs1[0])
+ assertThat(tiles!![0].tile.tileSpec).isEqualTo(specs1[0].spec)
+ }
}
@Test
fun tileNotPresentInSecondaryUser_destroyedInUserChange() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs0 = listOf(TileSpec.create("a"))
- val specs1 = listOf(TileSpec.create("b"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs0)
- tileSpecRepository.setTiles(USER_INFO_1.id, specs1)
+ val specs0 = listOf(TileSpec.create("a"))
+ val specs1 = listOf(TileSpec.create("b"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs0)
+ tileSpecRepository.setTiles(USER_INFO_1.id, specs1)
- val originalTileA = tiles!![0].tile
+ val originalTileA = tiles!![0].tile
- switchUser(USER_INFO_1)
- runCurrent()
+ switchUser(USER_INFO_1)
+ runCurrent()
- assertThat((originalTileA as FakeQSTile).destroyed).isTrue()
- verify(logger)
- .logTileDestroyed(
- specs0[0],
- QSPipelineLogger.TileDestroyedReason.TILE_NOT_PRESENT_IN_NEW_USER,
- )
+ assertThat(originalTileA.isDestroyed).isTrue()
+ verify(qsLogger)
+ .logTileDestroyed(
+ specs0[0],
+ QSPipelineLogger.TileDestroyedReason.TILE_NOT_PRESENT_IN_NEW_USER,
+ )
+ }
}
@Test
- fun userChange_customTileDestroyed_lifecycleNotTerminated() {
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ fun userChange_customTileDestroyed_lifecycleNotTerminated() =
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(CUSTOM_TILE_SPEC)
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- tileSpecRepository.setTiles(USER_INFO_1.id, specs)
+ val specs = listOf(CUSTOM_TILE_SPEC)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ tileSpecRepository.setTiles(USER_INFO_1.id, specs)
- val originalCustomTile = tiles!![0].tile
+ val originalCustomTile = tiles!![0].tile
- switchUser(USER_INFO_1)
- runCurrent()
+ switchUser(USER_INFO_1)
+ runCurrent()
- verify(originalCustomTile).destroy()
- assertThat(tileLifecycleManagerFactory.created).isEmpty()
+ verify(originalCustomTile).destroy()
+ assertThat((tileLifecycleManagerFactory as TLMFactory).created).isEmpty()
+ }
}
- }
@Test
fun userChange_sameTileUserChanged() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- tileSpecRepository.setTiles(USER_INFO_1.id, specs)
+ val specs = listOf(TileSpec.create("a"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ tileSpecRepository.setTiles(USER_INFO_1.id, specs)
- val originalTileA = tiles!![0].tile as FakeQSTile
- assertThat(originalTileA.user).isEqualTo(USER_INFO_0.id)
+ val originalTileA = tiles!![0].tile as FakeQSTile
+ assertThat(originalTileA.user).isEqualTo(USER_INFO_0.id)
- switchUser(USER_INFO_1)
- runCurrent()
+ switchUser(USER_INFO_1)
+ runCurrent()
- assertThat(tiles!![0].tile).isSameInstanceAs(originalTileA)
- assertThat(originalTileA.user).isEqualTo(USER_INFO_1.id)
- verify(logger).logTileUserChanged(specs[0], USER_INFO_1.id)
+ assertThat(tiles!![0].tile).isSameInstanceAs(originalTileA)
+ assertThat(originalTileA.user).isEqualTo(USER_INFO_1.id)
+ verify(qsLogger).logTileUserChanged(specs[0], USER_INFO_1.id)
+ }
}
@Test
fun addTile() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val spec = TileSpec.create("a")
- val currentSpecs = listOf(TileSpec.create("b"), TileSpec.create("c"))
- tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ val spec = TileSpec.create("a")
+ val currentSpecs = listOf(TileSpec.create("b"), TileSpec.create("c"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
- underTest.addTile(spec, position = 1)
+ underTest.addTile(spec, position = 1)
- val expectedSpecs = listOf(TileSpec.create("b"), spec, TileSpec.create("c"))
- assertThat(tiles).isEqualTo(expectedSpecs)
+ val expectedSpecs = listOf(TileSpec.create("b"), spec, TileSpec.create("c"))
+ assertThat(tiles).isEqualTo(expectedSpecs)
+ }
}
@Test
fun addTile_currentUser() =
- testScope.runTest(USER_INFO_1) {
- val tiles0 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val tiles1 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_1.id))
- val spec = TileSpec.create("a")
- val currentSpecs = listOf(TileSpec.create("b"), TileSpec.create("c"))
- tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
- tileSpecRepository.setTiles(USER_INFO_1.id, currentSpecs)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_1) {
+ val tiles0 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ val tiles1 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_1.id))
+ val spec = TileSpec.create("a")
+ val currentSpecs = listOf(TileSpec.create("b"), TileSpec.create("c"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
+ tileSpecRepository.setTiles(USER_INFO_1.id, currentSpecs)
- switchUser(USER_INFO_1)
- underTest.addTile(spec, position = 1)
+ switchUser(USER_INFO_1)
+ underTest.addTile(spec, position = 1)
- assertThat(tiles0).isEqualTo(currentSpecs)
+ assertThat(tiles0).isEqualTo(currentSpecs)
- val expectedSpecs = listOf(TileSpec.create("b"), spec, TileSpec.create("c"))
- assertThat(tiles1).isEqualTo(expectedSpecs)
+ val expectedSpecs = listOf(TileSpec.create("b"), spec, TileSpec.create("c"))
+ assertThat(tiles1).isEqualTo(expectedSpecs)
+ }
}
@Test
fun removeTile_platform() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val specs = listOf(TileSpec.create("a"), TileSpec.create("b"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("b"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
- underTest.removeTiles(specs.subList(0, 1))
+ underTest.removeTiles(specs.subList(0, 1))
- assertThat(tiles).isEqualTo(specs.subList(1, 2))
+ assertThat(tiles).isEqualTo(specs.subList(1, 2))
+ }
}
@Test
- fun removeTile_customTile_lifecycleEnded() {
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ fun removeTile_customTile_lifecycleEnded() =
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
- assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
- .isTrue()
+ val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
+ assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
+ .isTrue()
- underTest.removeTiles(listOf(CUSTOM_TILE_SPEC))
+ underTest.removeTiles(listOf(CUSTOM_TILE_SPEC))
- assertThat(tiles).isEqualTo(specs.subList(0, 1))
+ assertThat(tiles).isEqualTo(specs.subList(0, 1))
- val tileLifecycleManager =
- tileLifecycleManagerFactory.created[USER_INFO_0.id to TEST_COMPONENT]
- assertThat(tileLifecycleManager).isNotNull()
+ val tileLifecycleManager =
+ (tileLifecycleManagerFactory as TLMFactory)
+ .created[USER_INFO_0.id to TEST_COMPONENT]
+ assertThat(tileLifecycleManager).isNotNull()
- with(inOrder(tileLifecycleManager!!)) {
- verify(tileLifecycleManager).onStopListening()
- verify(tileLifecycleManager).onTileRemoved()
- verify(tileLifecycleManager).flushMessagesAndUnbind()
+ with(inOrder(tileLifecycleManager!!)) {
+ verify(tileLifecycleManager).onStopListening()
+ verify(tileLifecycleManager).onTileRemoved()
+ verify(tileLifecycleManager).flushMessagesAndUnbind()
+ }
+ assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
+ .isFalse()
+ assertThat(
+ customTileStatePersister.readState(
+ TileServiceKey(TEST_COMPONENT, USER_INFO_0.id)
+ )
+ )
+ .isNull()
}
- assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
- .isFalse()
- verify(customTileStatePersister)
- .removeState(TileServiceKey(TEST_COMPONENT, USER_INFO_0.id))
}
- }
@Test
fun removeTiles_currentUser() =
- testScope.runTest {
- val tiles0 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val tiles1 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_1.id))
- val currentSpecs =
- listOf(TileSpec.create("a"), TileSpec.create("b"), TileSpec.create("c"))
- tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
- tileSpecRepository.setTiles(USER_INFO_1.id, currentSpecs)
+ with(kosmos) {
+ testScope.runTest {
+ val tiles0 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ val tiles1 by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_1.id))
+ val currentSpecs =
+ listOf(TileSpec.create("a"), TileSpec.create("b"), TileSpec.create("c"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
+ tileSpecRepository.setTiles(USER_INFO_1.id, currentSpecs)
- switchUser(USER_INFO_1)
- runCurrent()
+ switchUser(USER_INFO_1)
+ runCurrent()
- underTest.removeTiles(currentSpecs.subList(0, 2))
+ underTest.removeTiles(currentSpecs.subList(0, 2))
- assertThat(tiles0).isEqualTo(currentSpecs)
- assertThat(tiles1).isEqualTo(currentSpecs.subList(2, 3))
+ assertThat(tiles0).isEqualTo(currentSpecs)
+ assertThat(tiles1).isEqualTo(currentSpecs.subList(2, 3))
+ }
}
@Test
fun setTiles() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(tileSpecRepository.tilesSpecs(USER_INFO_0.id))
- val currentSpecs = listOf(TileSpec.create("a"), TileSpec.create("b"))
- tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
- runCurrent()
+ val currentSpecs = listOf(TileSpec.create("a"), TileSpec.create("b"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
+ runCurrent()
- val newSpecs = listOf(TileSpec.create("b"), TileSpec.create("c"), TileSpec.create("a"))
- underTest.setTiles(newSpecs)
- runCurrent()
+ val newSpecs =
+ listOf(TileSpec.create("b"), TileSpec.create("c"), TileSpec.create("a"))
+ underTest.setTiles(newSpecs)
+ runCurrent()
- assertThat(tiles).isEqualTo(newSpecs)
+ assertThat(tiles).isEqualTo(newSpecs)
+ }
}
@Test
fun setTiles_customTiles_lifecycleEndedIfGone() =
- testScope.runTest(USER_INFO_0) {
- val otherCustomTileSpec = TileSpec.create("custom(b/c)")
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val otherCustomTileSpec = TileSpec.create("custom(b/c)")
- val currentSpecs = listOf(CUSTOM_TILE_SPEC, TileSpec.create("a"), otherCustomTileSpec)
- tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
- runCurrent()
+ val currentSpecs =
+ listOf(CUSTOM_TILE_SPEC, TileSpec.create("a"), otherCustomTileSpec)
+ tileSpecRepository.setTiles(USER_INFO_0.id, currentSpecs)
+ runCurrent()
- val newSpecs = listOf(otherCustomTileSpec, TileSpec.create("a"))
+ val newSpecs = listOf(otherCustomTileSpec, TileSpec.create("a"))
- underTest.setTiles(newSpecs)
- runCurrent()
+ underTest.setTiles(newSpecs)
+ runCurrent()
- val tileLifecycleManager =
- tileLifecycleManagerFactory.created[USER_INFO_0.id to TEST_COMPONENT]!!
+ val tileLifecycleManager =
+ (tileLifecycleManagerFactory as TLMFactory)
+ .created[USER_INFO_0.id to TEST_COMPONENT]!!
- with(inOrder(tileLifecycleManager)) {
- verify(tileLifecycleManager).onStopListening()
- verify(tileLifecycleManager).onTileRemoved()
- verify(tileLifecycleManager).flushMessagesAndUnbind()
+ with(inOrder(tileLifecycleManager)) {
+ verify(tileLifecycleManager).onStopListening()
+ verify(tileLifecycleManager).onTileRemoved()
+ verify(tileLifecycleManager).flushMessagesAndUnbind()
+ }
+ assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
+ .isFalse()
+ assertThat(
+ customTileStatePersister.readState(
+ TileServiceKey(TEST_COMPONENT, USER_INFO_0.id)
+ )
+ )
+ .isNull()
}
- assertThat(customTileAddedRepository.isTileAdded(TEST_COMPONENT, USER_INFO_0.id))
- .isFalse()
- verify(customTileStatePersister)
- .removeState(TileServiceKey(TEST_COMPONENT, USER_INFO_0.id))
}
@Test
fun protoDump() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- val stateA = tiles!![0].tile.state
- stateA.fillIn(Tile.STATE_INACTIVE, "A", "AA")
- val stateCustom = QSTile.BooleanState()
- stateCustom.fillIn(Tile.STATE_ACTIVE, "B", "BB")
- stateCustom.spec = CUSTOM_TILE_SPEC.spec
- whenever(tiles!![1].tile.state).thenReturn(stateCustom)
+ val stateA = tiles!![0].tile.state
+ stateA.fillIn(Tile.STATE_INACTIVE, "A", "AA")
+ val stateCustom = QSTile.BooleanState()
+ stateCustom.fillIn(Tile.STATE_ACTIVE, "B", "BB")
+ stateCustom.spec = CUSTOM_TILE_SPEC.spec
+ whenever(tiles!![1].tile.state).thenReturn(stateCustom)
- val proto = SystemUIProtoDump()
- underTest.dumpProto(proto, emptyArray())
+ val proto = SystemUIProtoDump()
+ underTest.dumpProto(proto, emptyArray())
- assertThat(MessageNano.messageNanoEquals(proto.tiles[0], stateA.toProto())).isTrue()
- assertThat(MessageNano.messageNanoEquals(proto.tiles[1], stateCustom.toProto()))
- .isTrue()
+ assertThat(MessageNano.messageNanoEquals(proto.tiles[0], stateA.toProto())).isTrue()
+ assertThat(MessageNano.messageNanoEquals(proto.tiles[1], stateCustom.toProto()))
+ .isTrue()
+ }
}
@Test
fun retainedTiles_callbackNotRemoved() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
- tileSpecRepository.setTiles(USER_INFO_0.id, listOf(TileSpec.create("a")))
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ tileSpecRepository.setTiles(USER_INFO_0.id, listOf(TileSpec.create("a")))
- val tileA = tiles!![0].tile
- val callback = mock<QSTile.Callback>()
- tileA.addCallback(callback)
+ val tileA = tiles!![0].tile
+ val callback = mock<QSTile.Callback>()
+ tileA.addCallback(callback)
- tileSpecRepository.setTiles(
- USER_INFO_0.id,
- listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC),
- )
- val newTileA = tiles!![0].tile
- assertThat(tileA).isSameInstanceAs(newTileA)
+ tileSpecRepository.setTiles(
+ USER_INFO_0.id,
+ listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC),
+ )
+ val newTileA = tiles!![0].tile
+ assertThat(tileA).isSameInstanceAs(newTileA)
- assertThat((tileA as FakeQSTile).callbacks).containsExactly(callback)
+ assertThat((tileA as FakeQSTile).callbacks).containsExactly(callback)
+ }
}
@Test
fun packageNotInstalled_customTileNotVisible() =
- testScope.runTest(USER_INFO_0) {
- installedTilesPackageRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ fakeInstalledTilesRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
- val tiles by collectLastValue(underTest.currentTiles)
+ val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles!!.size).isEqualTo(1)
- assertThat(tiles!![0].spec).isEqualTo(specs[0])
+ assertThat(tiles!!.size).isEqualTo(1)
+ assertThat(tiles!![0].spec).isEqualTo(specs[0])
+ }
}
@Test
fun packageInstalledLater_customTileAdded() =
- testScope.runTest(USER_INFO_0) {
- installedTilesPackageRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ fakeInstalledTilesRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
- val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC, TileSpec.create("b"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ val tiles by collectLastValue(underTest.currentTiles)
+ val specs = listOf(TileSpec.create("a"), CUSTOM_TILE_SPEC, TileSpec.create("b"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles!!.size).isEqualTo(2)
+ assertThat(tiles!!.size).isEqualTo(2)
- installedTilesPackageRepository.setInstalledPackagesForUser(
- USER_INFO_0.id,
- setOf(TEST_COMPONENT),
- )
+ fakeInstalledTilesRepository.setInstalledPackagesForUser(
+ USER_INFO_0.id,
+ setOf(TEST_COMPONENT),
+ )
- assertThat(tiles!!.size).isEqualTo(3)
- assertThat(tiles!![1].spec).isEqualTo(CUSTOM_TILE_SPEC)
+ assertThat(tiles!!.size).isEqualTo(3)
+ assertThat(tiles!![1].spec).isEqualTo(CUSTOM_TILE_SPEC)
+ }
}
@Test
fun tileAddedOnEmptyList_blocked() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
- val specs = listOf(TileSpec.create("a"), TileSpec.create("b"))
- val newTile = TileSpec.create("c")
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("b"))
+ val newTile = TileSpec.create("c")
- underTest.addTile(newTile)
+ underTest.addTile(newTile)
- assertThat(tiles!!.isEmpty()).isTrue()
+ assertThat(tiles!!.isEmpty()).isTrue()
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles!!.size).isEqualTo(3)
+ assertThat(tiles!!.size).isEqualTo(3)
+ }
}
@Test
fun changeInPackagesTiles_doesntTriggerUserChange_logged() =
- testScope.runTest(USER_INFO_0) {
- val specs = listOf(TileSpec.create("a"))
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- runCurrent()
- // Settled on the same list of tiles.
- assertThat(underTest.currentTilesSpecs).isEqualTo(specs)
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val specs = listOf(TileSpec.create("a"))
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ runCurrent()
+ // Settled on the same list of tiles.
+ assertThat(underTest.currentTilesSpecs).isEqualTo(specs)
- installedTilesPackageRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
- runCurrent()
+ fakeInstalledTilesRepository.setInstalledPackagesForUser(USER_INFO_0.id, emptySet())
+ runCurrent()
- verify(logger, never()).logTileUserChanged(TileSpec.create("a"), 0)
+ verify(qsLogger, never()).logTileUserChanged(TileSpec.create("a"), 0)
+ }
}
@Test
fun getTileDetails() =
- testScope.runTest(USER_INFO_0) {
- val tiles by collectLastValue(underTest.currentTiles)
- val tileA = TileSpec.create("a")
- val tileB = TileSpec.create("b")
- val tileNoDetails = TileSpec.create("NoDetails")
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ val tileA = TileSpec.create("a")
+ val tileB = TileSpec.create("b")
+ val tileNoDetails = TileSpec.create("NoDetails")
- val specs = listOf(tileA, tileB, tileNoDetails)
+ val specs = listOf(tileA, tileB, tileNoDetails)
- assertThat(tiles!!.isEmpty()).isTrue()
+ assertThat(tiles!!.isEmpty()).isTrue()
- tileSpecRepository.setTiles(USER_INFO_0.id, specs)
- assertThat(tiles!!.size).isEqualTo(3)
+ tileSpecRepository.setTiles(USER_INFO_0.id, specs)
+ assertThat(tiles!!.size).isEqualTo(3)
- // The third tile doesn't have a details view.
- assertThat(tiles!![2].spec).isEqualTo(tileNoDetails)
- (tiles!![2].tile as FakeQSTile).hasDetailsViewModel = false
+ // The third tile doesn't have a details view.
+ assertThat(tiles!![2].spec).isEqualTo(tileNoDetails)
+ (tiles!![2].tile as FakeQSTile).hasDetailsViewModel = false
- var currentModel: TileDetailsViewModel? = null
- val setCurrentModel = { model: TileDetailsViewModel? -> currentModel = model }
- tiles!![0].tile.getDetailsViewModel(setCurrentModel)
- assertThat(currentModel?.getTitle()).isEqualTo("a")
+ var currentModel: TileDetailsViewModel? = null
+ val setCurrentModel = { model: TileDetailsViewModel? -> currentModel = model }
+ tiles!![0].tile.getDetailsViewModel(setCurrentModel)
+ assertThat(currentModel?.getTitle()).isEqualTo("a")
- currentModel = null
- tiles!![1].tile.getDetailsViewModel(setCurrentModel)
- assertThat(currentModel?.getTitle()).isEqualTo("b")
+ currentModel = null
+ tiles!![1].tile.getDetailsViewModel(setCurrentModel)
+ assertThat(currentModel?.getTitle()).isEqualTo("b")
- currentModel = null
- tiles!![2].tile.getDetailsViewModel(setCurrentModel)
- assertThat(currentModel).isNull()
+ currentModel = null
+ tiles!![2].tile.getDetailsViewModel(setCurrentModel)
+ assertThat(currentModel).isNull()
+ }
+ }
+
+ @Test
+ fun destroyedTilesNotReused() =
+ with(kosmos) {
+ testScope.runTest(USER_INFO_0) {
+ val tiles by collectLastValue(underTest.currentTiles)
+ val specs = listOf(TileSpec.create("a"), TileSpec.create("b"))
+ val newTile = TileSpec.create("c")
+
+ underTest.setTiles(specs)
+
+ val tileABefore = tiles!!.first { it.spec == specs[0] }.tile
+
+ // We destroy it manually, in prod, this could happen if the tile processing action
+ // is interrupted in the middle.
+ tileABefore.destroy()
+
+ underTest.addTile(newTile)
+
+ val tileAAfter = tiles!!.first { it.spec == specs[0] }.tile
+ assertThat(tileAAfter).isNotSameInstanceAs(tileABefore)
+ }
}
private fun QSTile.State.fillIn(state: Int, label: CharSequence, secondaryLabel: CharSequence) {
@@ -686,20 +735,21 @@
}
}
- private fun tileCreator(spec: String): QSTile? {
- val currentUser = userTracker.userId
+ private fun Kosmos.tileCreator(spec: String): QSTile? {
+ val currentUser = userRepository.getSelectedUserInfo().id
return when (spec) {
CUSTOM_TILE_SPEC.spec ->
mock<CustomTile> {
var tileSpecReference: String? = null
- whenever(user).thenReturn(currentUser)
- whenever(component).thenReturn(CUSTOM_TILE_SPEC.componentName)
- whenever(isAvailable).thenReturn(true)
- whenever(setTileSpec(anyString())).thenAnswer {
- tileSpecReference = it.arguments[0] as? String
- Unit
- }
- whenever(tileSpec).thenAnswer { tileSpecReference }
+ on { user } doReturn currentUser
+ on { component } doReturn CUSTOM_TILE_SPEC.componentName
+ on { isAvailable } doReturn true
+ on { setTileSpec(anyString()) }
+ .thenAnswer {
+ tileSpecReference = it.arguments[0] as? String
+ Unit
+ }
+ on { tileSpec }.thenAnswer { tileSpecReference }
// Also, add it to the set of added tiles (as this happens as part of the tile
// creation).
customTileAddedRepository.setTileAdded(
@@ -714,22 +764,16 @@
}
private fun TestScope.runTest(user: UserInfo, body: suspend TestScope.() -> Unit) {
- return runTest {
+ return kosmos.runTest {
switchUser(user)
body()
}
}
- private suspend fun switchUser(user: UserInfo) {
- setUserTracker(user.id)
- installedTilesPackageRepository.setInstalledPackagesForUser(user.id, setOf(TEST_COMPONENT))
- userRepository.setSelectedUserInfo(user)
- }
-
- private fun setUserTracker(user: Int) {
- val mockContext = mockUserContext(user)
- whenever(userTracker.userContext).thenReturn(mockContext)
- whenever(userTracker.userId).thenReturn(user)
+ private suspend fun Kosmos.switchUser(user: UserInfo) {
+ fakeUserTracker.set(listOf(user), 0)
+ fakeInstalledTilesRepository.setInstalledPackagesForUser(user.id, setOf(TEST_COMPONENT))
+ fakeUserRepository.setSelectedUserInfo(user)
}
private class TLMFactory : TileLifecycleManager.Factory {
@@ -745,13 +789,6 @@
}
}
- private fun mockUserContext(user: Int): Context {
- return mock {
- whenever(this.userId).thenReturn(user)
- whenever(this.user).thenReturn(UserHandle.of(user))
- }
- }
-
companion object {
private val USER_INFO_0 = UserInfo().apply { id = 0 }
private val USER_INFO_1 = UserInfo().apply { id = 1 }
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
index 296478b..1d8c6cc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
@@ -508,6 +508,12 @@
assertThat(mTile.mRefreshes).isEqualTo(1);
}
+ @Test
+ public void testIsDestroyedImmediately() {
+ mTile.destroy();
+ assertThat(mTile.isDestroyed()).isTrue();
+ }
+
private void assertEvent(UiEventLogger.UiEventEnum eventType,
UiEventLoggerFake.FakeUiEvent fakeEvent) {
assertEquals(eventType.getId(), fakeEvent.eventId);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImplTest.kt
index fba6151..da3cebd 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImplTest.kt
@@ -22,6 +22,7 @@
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
+import com.android.systemui.qs.FakeTileDetailsViewModel
import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics
import com.android.systemui.qs.tiles.base.interactor.FakeDisabledByPolicyInteractor
import com.android.systemui.qs.tiles.base.interactor.FakeQSTileDataInteractor
@@ -97,6 +98,7 @@
testCoroutineDispatcher,
testCoroutineDispatcher,
testScope.backgroundScope,
+ FakeTileDetailsViewModel("QSTileViewModelImplTest"),
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
index 3db5efc..261e3de 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
@@ -26,8 +26,6 @@
import com.android.systemui.qs.tiles.base.actions.FakeQSTileIntentUserInputHandler
import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandlerSubject
import com.android.systemui.qs.tiles.base.interactor.QSTileInputTestKtx
-import com.android.systemui.qs.tiles.dialog.InternetDetailsContentManager
-import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
import com.android.systemui.qs.tiles.impl.internet.domain.model.InternetTileModel
import com.android.systemui.statusbar.connectivity.AccessPointController
@@ -39,11 +37,8 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.eq
-import org.mockito.kotlin.any
import org.mockito.kotlin.mock
-import org.mockito.kotlin.times
import org.mockito.kotlin.verify
-import org.mockito.kotlin.whenever
@SmallTest
@EnabledOnRavenwood
@@ -56,31 +51,17 @@
private lateinit var internetDialogManager: InternetDialogManager
private lateinit var controller: AccessPointController
- private lateinit var internetDetailsViewModelFactory: InternetDetailsViewModel.Factory
- private lateinit var internetDetailsContentManagerFactory: InternetDetailsContentManager.Factory
- private lateinit var internetDetailsViewModel: InternetDetailsViewModel
@Before
fun setup() {
internetDialogManager = mock<InternetDialogManager>()
controller = mock<AccessPointController>()
- internetDetailsViewModelFactory = mock<InternetDetailsViewModel.Factory>()
- internetDetailsContentManagerFactory = mock<InternetDetailsContentManager.Factory>()
- internetDetailsViewModel =
- InternetDetailsViewModel(
- onLongClick = {},
- accessPointController = mock<AccessPointController>(),
- contentManagerFactory = internetDetailsContentManagerFactory,
- )
- whenever(internetDetailsViewModelFactory.create(any())).thenReturn(internetDetailsViewModel)
-
underTest =
InternetTileUserActionInteractor(
kosmos.testScope.coroutineContext,
internetDialogManager,
controller,
inputHandler,
- internetDetailsViewModelFactory,
)
}
@@ -127,12 +108,4 @@
assertThat(it.intent.action).isEqualTo(Settings.ACTION_WIFI_SETTINGS)
}
}
-
- @Test
- fun detailsViewModel() =
- kosmos.testScope.runTest {
- assertThat(underTest.detailsViewModel.getTitle()).isEqualTo("Internet")
- assertThat(underTest.detailsViewModel.getSubTitle())
- .isEqualTo("Tab a network to connect")
- }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelTest.kt
index 0598a8b..4e9b635 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelTest.kt
@@ -25,6 +25,7 @@
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.coroutines.collectValues
+import com.android.systemui.qs.FakeTileDetailsViewModel
import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics
import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger
import com.android.systemui.qs.tiles.base.interactor.FakeDisabledByPolicyInteractor
@@ -171,21 +172,6 @@
.isEqualTo(FakeQSTileDataInteractor.AvailabilityRequest(USER))
}
- @Test
- fun tileDetails() =
- testScope.runTest {
- assertThat(tileUserActionInteractor.detailsViewModel).isNotNull()
- assertThat(tileUserActionInteractor.detailsViewModel?.getTitle())
- .isEqualTo("FakeQSTileUserActionInteractor")
- assertThat(underTest.detailsViewModel).isNotNull()
- assertThat(underTest.detailsViewModel?.getTitle())
- .isEqualTo("FakeQSTileUserActionInteractor")
-
- tileUserActionInteractor.detailsViewModel = null
- assertThat(tileUserActionInteractor.detailsViewModel).isNull()
- assertThat(underTest.detailsViewModel).isNull()
- }
-
private fun createViewModel(
scope: TestScope,
config: QSTileConfig = tileConfig,
@@ -209,6 +195,7 @@
testCoroutineDispatcher,
testCoroutineDispatcher,
scope.backgroundScope,
+ FakeTileDetailsViewModel("QSTileViewModelTest"),
)
private companion object {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelUserInputTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelUserInputTest.kt
index ece21e1..166e950 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelUserInputTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelUserInputTest.kt
@@ -22,6 +22,7 @@
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
+import com.android.systemui.qs.FakeTileDetailsViewModel
import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics
import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger
import com.android.systemui.qs.tiles.base.interactor.FakeDisabledByPolicyInteractor
@@ -253,5 +254,6 @@
testCoroutineDispatcher,
testCoroutineDispatcher,
scope.backgroundScope,
+ FakeTileDetailsViewModel("QSTileViewModelUserInputTest"),
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneContentViewModelTest.kt
index b36c111..1d891da 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneContentViewModelTest.kt
@@ -23,8 +23,6 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
-import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
@@ -79,8 +77,6 @@
@Before
fun setUp() {
- kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false)
-
sceneContainerStartable.start()
underTest =
QuickSettingsSceneContentViewModel(
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
index c69ebab..baf0aeb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
@@ -61,8 +61,7 @@
usingMediaInComposeFragment = false // This is not for the compose fragment
}
private val testScope = kosmos.testScope
- private val sceneInteractor = kosmos.sceneInteractor
-
+ private val sceneInteractor by lazy { kosmos.sceneInteractor }
private val underTest by lazy { kosmos.quickSettingsShadeOverlayContentViewModel }
@Before
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsUserActionsViewModelTest.kt
index d5fbe49..0254dfb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsUserActionsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsUserActionsViewModelTest.kt
@@ -29,8 +29,6 @@
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.flags.EnableSceneContainer
-import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
@@ -68,8 +66,6 @@
@Before
fun setUp() {
- kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false)
-
sceneContainerStartable.start()
underTest =
QuickSettingsUserActionsViewModel(
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
index eb630b4..abb41b5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
@@ -39,8 +39,6 @@
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.EnableSceneContainer
-import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.ui.viewmodel.lockscreenUserActionsViewModel
import com.android.systemui.kosmos.Kosmos
@@ -112,8 +110,6 @@
whenever(mockTelecomManager.isInCall).thenReturn(false)
whenever(emergencyAffordanceManager.needsEmergencyAffordance()).thenReturn(true)
- fakeFeatureFlagsClassic.apply { set(Flags.NEW_NETWORK_SLICE_UI, false) }
-
fakeMobileConnectionsRepository.isAnySimSecure.value = false
fakeTelephonyRepository.apply {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
index 559e363..d3f5923 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -73,9 +73,8 @@
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private val fakeSceneDataSource = kosmos.fakeSceneDataSource
-
- private val underTest = kosmos.sceneInteractor
+ private val fakeSceneDataSource by lazy { kosmos.fakeSceneDataSource }
+ private val underTest by lazy { kosmos.sceneInteractor }
@Before
fun setUp() {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
index 4a011c0..ccc876c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
@@ -50,11 +50,10 @@
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private val configurationRepository = kosmos.fakeConfigurationRepository
- private val keyguardRepository = kosmos.fakeKeyguardRepository
- private val sceneInteractor = kosmos.sceneInteractor
+ private val configurationRepository by lazy { kosmos.fakeConfigurationRepository }
+ private val keyguardRepository by lazy { kosmos.fakeKeyguardRepository }
+ private val sceneInteractor by lazy { kosmos.sceneInteractor }
private val shadeTestUtil by lazy { kosmos.shadeTestUtil }
-
private val underTest by lazy { kosmos.shadeInteractorSceneContainerImpl }
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
index 37b4688..a832f48 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
@@ -15,7 +15,9 @@
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
+import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.testScope
+import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.plugins.activityStarter
import com.android.systemui.scene.domain.interactor.sceneInteractor
@@ -51,12 +53,11 @@
@RunWith(AndroidJUnit4::class)
@EnableSceneContainer
class ShadeHeaderViewModelTest : SysuiTestCase() {
- private val kosmos = testKosmos()
+ private val kosmos = testKosmos().useUnconfinedTestDispatcher()
private val testScope = kosmos.testScope
- private val mobileIconsInteractor = kosmos.fakeMobileIconsInteractor
- private val sceneInteractor = kosmos.sceneInteractor
- private val deviceEntryInteractor = kosmos.deviceEntryInteractor
-
+ private val mobileIconsInteractor by lazy { kosmos.fakeMobileIconsInteractor }
+ private val sceneInteractor by lazy { kosmos.sceneInteractor }
+ private val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor }
private val underTest by lazy { kosmos.shadeHeaderViewModel }
@Before
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java
index 3d8da61..70df82d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -22,6 +22,7 @@
import static android.service.quickaccesswallet.Flags.FLAG_LAUNCH_WALLET_VIA_SYSUI_CALLBACKS;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -556,9 +557,9 @@
@Test
public void testImmersiveModeChanged() {
final int displayAreaId = 10;
- mCommandQueue.immersiveModeChanged(displayAreaId, true);
+ mCommandQueue.immersiveModeChanged(displayAreaId, true, TYPE_APPLICATION);
waitForIdleSync();
- verify(mCallbacks).immersiveModeChanged(displayAreaId, true);
+ verify(mCallbacks).immersiveModeChanged(displayAreaId, true, TYPE_APPLICATION);
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStoreTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStoreTest.kt
new file mode 100644
index 0000000..06650f2
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStoreTest.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.core
+
+import android.platform.test.annotations.EnableFlags
+import android.view.Display.DEFAULT_DISPLAY
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.display.data.repository.displayRepository
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.kosmos.useUnconfinedTestDispatcher
+import com.android.systemui.testKosmos
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.verify
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@EnableFlags(StatusBarConnectedDisplays.FLAG_NAME)
+class MultiDisplayStatusBarOrchestratorStoreTest : SysuiTestCase() {
+
+ private val kosmos = testKosmos().useUnconfinedTestDispatcher()
+ private val testScope = kosmos.testScope
+ private val fakeDisplayRepository = kosmos.displayRepository
+ private val underTest by lazy { kosmos.multiDisplayStatusBarOrchestratorStore }
+
+ @Before
+ fun start() {
+ underTest.start()
+ }
+
+ @Before fun addDisplays() = runBlocking { fakeDisplayRepository.addDisplay(DEFAULT_DISPLAY) }
+
+ @Test
+ fun displayRemoved_stopsInstance() =
+ testScope.runTest {
+ val instance = underTest.forDisplay(DEFAULT_DISPLAY)!!
+
+ fakeDisplayRepository.removeDisplay(DEFAULT_DISPLAY)
+
+ verify(instance).stop()
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/StatusBarOrchestratorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/StatusBarOrchestratorTest.kt
index 04c5bd9..f5d9f43 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/StatusBarOrchestratorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/core/StatusBarOrchestratorTest.kt
@@ -22,6 +22,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
+import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.plugins.DarkIconDispatcher
@@ -70,6 +71,7 @@
private val mockBubbles = kosmos.bubbles
private val fakeStatusBarWindowController = kosmos.fakeStatusBarWindowController
private val fakeStatusBarInitializer = kosmos.fakeStatusBarInitializer
+ private val dumpManager = kosmos.dumpManager
private val orchestrator = kosmos.statusBarOrchestrator
@@ -291,6 +293,15 @@
.transitionTo(TRANSPARENT.toTransitionModeInt(), /* animate= */ true)
}
+ @Test
+ fun stop_unregisterDumpable() {
+ orchestrator.start()
+
+ orchestrator.stop()
+
+ verify(dumpManager).unregisterDumpable("StatusBarOrchestrator")
+ }
+
private fun putDeviceToSleep() {
fakePowerRepository.updateWakefulness(
rawState = WakefulnessState.ASLEEP,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStoreImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStoreImplTest.kt
index ae734b3..a5b7fc2 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStoreImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStoreImplTest.kt
@@ -22,24 +22,29 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.display.data.repository.displayRepository
+import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.testKosmos
import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.verify
@SmallTest
@RunWith(AndroidJUnit4::class)
@EnableFlags(StatusBarConnectedDisplays.FLAG_NAME)
class PrivacyDotWindowControllerStoreImplTest : SysuiTestCase() {
private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
private val underTest by lazy { kosmos.privacyDotWindowControllerStoreImpl }
@Before
fun installDisplays() = runBlocking {
+ underTest.start()
kosmos.displayRepository.addDisplay(displayId = Display.DEFAULT_DISPLAY)
- kosmos.displayRepository.addDisplay(displayId = Display.DEFAULT_DISPLAY + 1)
+ kosmos.displayRepository.addDisplay(displayId = DISPLAY_2)
}
@Test(expected = IllegalArgumentException::class)
@@ -49,6 +54,20 @@
@Test
fun forDisplay_nonDefaultDisplay_doesNotThrow() {
- underTest.forDisplay(displayId = Display.DEFAULT_DISPLAY + 1)
+ underTest.forDisplay(displayId = DISPLAY_2)
+ }
+
+ @Test
+ fun displayRemoved_stopsInstance() =
+ testScope.runTest {
+ val instance = underTest.forDisplay(DISPLAY_2)!!
+
+ kosmos.displayRepository.removeDisplay(DISPLAY_2)
+
+ verify(instance).stop()
+ }
+
+ private companion object {
+ const val DISPLAY_2 = Display.DEFAULT_DISPLAY + 1
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/events/PrivacyDotWindowControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/events/PrivacyDotWindowControllerTest.kt
index 6bcd735..60782b8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/events/PrivacyDotWindowControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/events/PrivacyDotWindowControllerTest.kt
@@ -173,6 +173,17 @@
expect.that(gravityForView(viewController.bottomRight!!)).isEqualTo(BOTTOM or LEFT)
}
+ @Test
+ fun onStop_removeAllWindows() {
+ underTest.start()
+ executor.runAllReady()
+
+ underTest.stop()
+ executor.runAllReady()
+
+ assertThat(windowManager.addedViews).isEmpty()
+ }
+
private fun paramsForView(view: View): WindowManager.LayoutParams {
return windowManager.addedViews.entries
.first { it.key == view || it.key.findViewById<View>(view.id) != null }
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
index 611ae3d..d546206 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
@@ -846,7 +846,7 @@
}
private fun connectSession() {
- val dateView = controller.buildAndConnectDateView(fakeParent)
+ val dateView = controller.buildAndConnectDateView(fakeParent, false)
dateSmartspaceView = dateView as SmartspaceView
fakeParent.addView(dateView)
controller.stateChangeListener.onViewAttachedToWindow(dateView)
@@ -860,7 +860,7 @@
verify(dateSmartspaceView).setPrimaryTextColor(anyInt())
verify(dateSmartspaceView).setDozeAmount(0.5f)
- val weatherView = controller.buildAndConnectWeatherView(fakeParent)
+ val weatherView = controller.buildAndConnectWeatherView(fakeParent, false)
weatherSmartspaceView = weatherView as SmartspaceView
fakeParent.addView(weatherView)
controller.stateChangeListener.onViewAttachedToWindow(weatherView)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/ConversationNotificationProcessorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/ConversationNotificationProcessorTest.kt
index 67d0ade..0caddf4 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/ConversationNotificationProcessorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/ConversationNotificationProcessorTest.kt
@@ -111,13 +111,13 @@
.isNotNull()
val processedSummary = nb.build().extras.getCharSequence(EXTRA_SUMMARIZED_CONTENT)
- assertThat(processedSummary.toString()).isEqualTo("x$summarization")
+ assertThat(processedSummary.toString()).isEqualTo("x $summarization")
val checkSpans = SpannableStringBuilder(processedSummary)
assertThat(
checkSpans.getSpans(
/* queryStart = */ 0,
- /* queryEnd = */ 1,
+ /* queryEnd = */ 2,
/* kind = */ ImageSpan::class.java,
)
)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
index 510167d..d3cd240 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
@@ -84,7 +84,7 @@
controller.onIntentStarted(willAnimate = false)
assertTrue(HeadsUpUtil.isClickedHeadsUpNotification(notification))
- assertFalse(notification.entry.isExpandAnimationRunning)
+ assertFalse(notification.isLaunchAnimationRunning)
val isExpandAnimationRunning by
testScope.collectLastValue(
notificationLaunchAnimationInteractor.isLaunchAnimationRunning
@@ -107,7 +107,7 @@
controller.onTransitionAnimationCancelled()
assertTrue(HeadsUpUtil.isClickedHeadsUpNotification(notification))
- assertFalse(notification.entry.isExpandAnimationRunning)
+ assertFalse(notification.isLaunchAnimationRunning)
val isExpandAnimationRunning by
testScope.collectLastValue(
notificationLaunchAnimationInteractor.isLaunchAnimationRunning
@@ -130,7 +130,7 @@
controller.onTransitionAnimationEnd(isExpandingFullyAbove = true)
assertFalse(HeadsUpUtil.isClickedHeadsUpNotification(notification))
- assertFalse(notification.entry.isExpandAnimationRunning)
+ assertFalse(notification.isLaunchAnimationRunning)
val isExpandAnimationRunning by
testScope.collectLastValue(
notificationLaunchAnimationInteractor.isLaunchAnimationRunning
@@ -199,7 +199,7 @@
fun testNotificationIsExpandingDuringAnimation() {
controller.onIntentStarted(willAnimate = true)
- assertTrue(notification.entry.isExpandAnimationRunning)
+ assertTrue(notification.isLaunchAnimationRunning)
val isExpandAnimationRunning by
testScope.collectLastValue(
notificationLaunchAnimationInteractor.isLaunchAnimationRunning
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/BundleEntryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/BundleEntryTest.kt
index 5d8b68e..83fd5dc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/BundleEntryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/BundleEntryTest.kt
@@ -105,4 +105,52 @@
fun getWhen_adapter() {
assertThat(underTest.entryAdapter.`when`).isEqualTo(0)
}
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun isColorized() {
+ assertThat(underTest.entryAdapter.isColorized).isFalse()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun getSbn() {
+ assertThat(underTest.entryAdapter.sbn).isNull()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun canDragAndDrop() {
+ assertThat(underTest.entryAdapter.canDragAndDrop()).isFalse()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun isBubble() {
+ assertThat(underTest.entryAdapter.isBubbleCapable).isFalse()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun getStyle() {
+ assertThat(underTest.entryAdapter.style).isNull()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun getSectionBucket() {
+ assertThat(underTest.entryAdapter.sectionBucket).isEqualTo(underTest.bucket)
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun isAmbient() {
+ assertThat(underTest.entryAdapter.isAmbient).isFalse()
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ fun canShowFullScreen() {
+ assertThat(underTest.entryAdapter.isFullScreenCapable()).isFalse()
+ }
}
\ No newline at end of file
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
index 0df1073..4c18025 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
@@ -41,7 +41,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
@@ -64,7 +63,6 @@
import android.app.NotificationManager;
import android.os.Handler;
import android.os.RemoteException;
-import android.platform.test.annotations.EnableFlags;
import android.service.notification.NotificationListenerService.Ranking;
import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
@@ -78,7 +76,6 @@
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.statusbar.NotificationVisibility;
-import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.LogBufferEulogizer;
@@ -96,6 +93,7 @@
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLogger;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -1587,7 +1585,7 @@
// THEN entry updated gets called, added does not, and ranking is called again
verify(mCollectionListener).onEntryUpdated(eq(entry));
- verify(mCollectionListener).onEntryUpdated(eq(entry), eq(true));
+ verify(mCollectionListener).onEntryUpdated(eq(entry), eq(UpdateSource.App));
verify(mCollectionListener).onEntryAdded((entry));
verify(mCollectionListener, times(2)).onRankingApplied();
}
@@ -1610,7 +1608,7 @@
verify(mCollectionListener).onEntryAdded(eq(entry));
verify(mCollectionListener).onRankingApplied();
verify(mCollectionListener).onEntryUpdated(eq(entry));
- verify(mCollectionListener).onEntryUpdated(eq(entry), eq(false));
+ verify(mCollectionListener).onEntryUpdated(eq(entry), eq(UpdateSource.SystemUi));
}
@Test
@@ -1626,7 +1624,7 @@
verify(mCollectionListener, never()).onRankingUpdate(any());
verify(mCollectionListener, never()).onRankingApplied();
verify(mCollectionListener, never()).onEntryUpdated(any());
- verify(mCollectionListener, never()).onEntryUpdated(any(), anyBoolean());
+ verify(mCollectionListener, never()).onEntryUpdated(any(), any());
}
@Test
@@ -1786,6 +1784,7 @@
private static NotificationEntryBuilder buildNotif(String pkg, int id, String tag) {
return new NotificationEntryBuilder()
+ .setPostTime(System.currentTimeMillis())
.setPkg(pkg)
.setId(id)
.setTag(tag);
@@ -1838,7 +1837,7 @@
}
@Override
- public void onEntryUpdated(NotificationEntry entry, boolean fromSystem) {
+ public void onEntryUpdated(NotificationEntry entry, UpdateSource source) {
onEntryUpdated(entry);
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
index 34dff24..4810813 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
@@ -21,12 +21,15 @@
import static android.app.Notification.CATEGORY_EVENT;
import static android.app.Notification.CATEGORY_MESSAGE;
import static android.app.Notification.CATEGORY_REMINDER;
+import static android.app.Notification.FLAG_BUBBLE;
import static android.app.Notification.FLAG_FSI_REQUESTED_BUT_DENIED;
import static android.app.Notification.FLAG_PROMOTED_ONGOING;
+import static android.app.NotificationManager.IMPORTANCE_MIN;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT;
import static com.android.systemui.statusbar.NotificationEntryHelper.modifyRanking;
import static com.android.systemui.statusbar.NotificationEntryHelper.modifySbn;
+import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_ALERTING;
import static com.google.common.truth.Truth.assertThat;
@@ -35,6 +38,7 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.Notification;
@@ -664,6 +668,126 @@
assertThat(entry.getEntryAdapter().getIcons()).isEqualTo(entry.getIcons());
}
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void isColorized() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setColorized(true)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ assertThat(entry.getEntryAdapter().isColorized()).isEqualTo(
+ entry.getSbn().getNotification().isColorized());
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void getSbn() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ assertThat(entry.getEntryAdapter().getSbn()).isEqualTo(
+ entry.getSbn());
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void canDragAndDrop() {
+ PendingIntent pi = mock(PendingIntent.class);
+ when(pi.isActivity()).thenReturn(true);
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setContentIntent(pi)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ assertThat(entry.getEntryAdapter().canDragAndDrop()).isTrue();
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void isBubble() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setFlag(FLAG_BUBBLE, true)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ assertThat(entry.getEntryAdapter().isBubbleCapable()).isEqualTo(entry.isBubble());
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void getStyle() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setStyle(new Notification.BigTextStyle())
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ assertThat(entry.getEntryAdapter().getStyle()).isEqualTo(entry.getNotificationStyle());
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void getSectionBucket() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setStyle(new Notification.BigTextStyle())
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .build();
+ entry.setBucket(BUCKET_ALERTING);
+
+ assertThat(entry.getEntryAdapter().getSectionBucket()).isEqualTo(BUCKET_ALERTING);
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void isAmbient() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .setImportance(IMPORTANCE_MIN)
+ .build();
+
+ assertThat(entry.getEntryAdapter().isAmbient()).isTrue();
+ }
+
+ @Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
+ public void canShowFullScreen() {
+ Notification notification = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setFullScreenIntent(mock(PendingIntent.class), true)
+ .build();
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setNotification(notification)
+ .setImportance(IMPORTANCE_MIN)
+ .build();
+
+ assertThat(entry.getEntryAdapter().isFullScreenCapable()).isTrue();
+ }
+
private Notification.Action createContextualAction(String title) {
return new Notification.Action.Builder(
Icon.createWithResource(getContext(), android.R.drawable.sym_def_app_icon),
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinatorTest.kt
index 43cb957..4e13dcd 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinatorTest.kt
@@ -20,7 +20,6 @@
import android.media.session.MediaSession
import android.platform.test.flag.junit.FlagsParameterization
import android.provider.Settings
-import android.service.notification.StatusBarNotification
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.dumpManager
@@ -46,6 +45,7 @@
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource
import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor
import com.android.systemui.statusbar.notification.domain.interactor.lockScreenShowOnlyUnseenNotificationsSetting
import com.android.systemui.statusbar.notification.domain.interactor.seenNotificationsInteractor
@@ -221,16 +221,19 @@
mock<ExpandableNotificationRow>().apply {
whenever(isMediaRow).thenReturn(true)
}
- sbn = SbnBuilder().setNotification(
- Notification.Builder(context, "channel").setStyle(
- MediaStyle().setMediaSession(
- MediaSession(
- context,
- "tag"
- ).sessionToken
+ sbn =
+ SbnBuilder()
+ .setNotification(
+ Notification.Builder(context, "channel")
+ .setStyle(
+ MediaStyle()
+ .setMediaSession(
+ MediaSession(context, "tag").sessionToken
+ )
+ )
+ .build()
)
- ).build()
- ).build()
+ .build()
}
collectionListener.onEntryAdded(fakeEntry)
@@ -600,7 +603,7 @@
testScheduler.runCurrent()
// WHEN: the notification is updated
- collectionListener.onEntryUpdated(entry)
+ collectionListener.onEntryUpdated(entry, UpdateSource.App)
testScheduler.runCurrent()
// WHEN: four more seconds have passed
@@ -630,6 +633,132 @@
}
}
+ @Test
+ fun seenNotificationOnKeyguardMarkedAsSeenIfUpdatedBySystemServer() {
+ // GIVEN: Keyguard is showing, not dozing, unseen notification is present
+ keyguardRepository.setKeyguardShowing(true)
+ keyguardRepository.setIsDozing(false)
+ runKeyguardCoordinatorTest {
+ val fakeEntry = NotificationEntryBuilder().build()
+ collectionListener.onEntryAdded(fakeEntry)
+ keyguardTransitionRepository.sendTransitionSteps(
+ from = KeyguardState.AOD,
+ to = KeyguardState.LOCKSCREEN,
+ this.testScheduler,
+ )
+ testScheduler.runCurrent()
+
+ // WHEN: five seconds have passed
+ testScheduler.advanceTimeBy(5.seconds)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is no longer showing
+ keyguardRepository.setKeyguardShowing(false)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Gone),
+ stateTransition = TransitionStep(KeyguardState.LOCKSCREEN, KeyguardState.GONE),
+ )
+
+ // WHEN: the notification is updated by the Server
+ collectionListener.onEntryUpdated(fakeEntry, UpdateSource.SystemServer)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is shown again
+ keyguardRepository.setKeyguardShowing(true)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Lockscreen),
+ stateTransition = TransitionStep(KeyguardState.GONE, KeyguardState.AOD),
+ )
+
+ // THEN: The notification is still recognized as "seen" and is filtered out.
+ assertThat(unseenFilter.shouldFilterOut(fakeEntry, 0L)).isTrue()
+ }
+ }
+
+ @Test
+ fun seenNotificationOnKeyguardMarkedAsSeenIfUpdatedBySystemUi() {
+ // GIVEN: Keyguard is showing, not dozing, unseen notification is present
+ keyguardRepository.setKeyguardShowing(true)
+ keyguardRepository.setIsDozing(false)
+ runKeyguardCoordinatorTest {
+ val fakeEntry = NotificationEntryBuilder().build()
+ collectionListener.onEntryAdded(fakeEntry)
+ keyguardTransitionRepository.sendTransitionSteps(
+ from = KeyguardState.AOD,
+ to = KeyguardState.LOCKSCREEN,
+ this.testScheduler,
+ )
+ testScheduler.runCurrent()
+
+ // WHEN: five seconds have passed
+ testScheduler.advanceTimeBy(5.seconds)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is no longer showing
+ keyguardRepository.setKeyguardShowing(false)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Gone),
+ stateTransition = TransitionStep(KeyguardState.LOCKSCREEN, KeyguardState.GONE),
+ )
+
+ // WHEN: the notification is updated by the SystemUi
+ collectionListener.onEntryUpdated(fakeEntry, UpdateSource.SystemUi)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is shown again
+ keyguardRepository.setKeyguardShowing(true)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Lockscreen),
+ stateTransition = TransitionStep(KeyguardState.GONE, KeyguardState.AOD),
+ )
+
+ // THEN: The notification is still recognized as "seen" and is filtered out.
+ assertThat(unseenFilter.shouldFilterOut(fakeEntry, 0L)).isTrue()
+ }
+ }
+
+ @Test
+ fun seenNotificationOnKeyguardMarkedAsUnseenIfUpdatedByApp() {
+ // GIVEN: Keyguard is showing, not dozing, unseen notification is present
+ keyguardRepository.setKeyguardShowing(true)
+ keyguardRepository.setIsDozing(false)
+ runKeyguardCoordinatorTest {
+ val fakeEntry = NotificationEntryBuilder().build()
+ collectionListener.onEntryAdded(fakeEntry)
+ keyguardTransitionRepository.sendTransitionSteps(
+ from = KeyguardState.AOD,
+ to = KeyguardState.LOCKSCREEN,
+ this.testScheduler,
+ )
+ testScheduler.runCurrent()
+
+ // WHEN: five seconds have passed
+ testScheduler.advanceTimeBy(5.seconds)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is no longer showing
+ keyguardRepository.setKeyguardShowing(false)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Gone),
+ stateTransition = TransitionStep(KeyguardState.LOCKSCREEN, KeyguardState.GONE),
+ )
+
+ // WHEN: the notification is updated by the App
+ collectionListener.onEntryUpdated(fakeEntry, UpdateSource.App)
+ testScheduler.runCurrent()
+
+ // WHEN: Keyguard is shown again
+ keyguardRepository.setKeyguardShowing(true)
+ kosmos.setTransition(
+ sceneTransition = Idle(Scenes.Lockscreen),
+ stateTransition = TransitionStep(KeyguardState.GONE, KeyguardState.AOD),
+ )
+
+ // THEN: The notification is now recognized as "unseen" and is not filtered out.
+ assertThat(unseenFilter.shouldFilterOut(fakeEntry, 0L)).isFalse()
+ }
+ }
+
private fun runKeyguardCoordinatorTest(
testBlock: suspend KeyguardCoordinatorTestScope.() -> Unit
) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinatorTest.kt
index a3f8452..85d7386 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinatorTest.kt
@@ -39,6 +39,7 @@
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender.OnEndLifetimeExtensionCallback
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.captureMany
import com.android.systemui.util.mockito.withArgCaptor
@@ -191,7 +192,7 @@
`when`(remoteInputManager.shouldKeepForRemoteInputHistory(entry)).thenReturn(true)
`when`(remoteInputManager.shouldKeepForSmartReplyHistory(entry)).thenReturn(false)
- collectionListeners.forEach { it.onEntryUpdated(entry, true) }
+ collectionListeners.forEach { it.onEntryUpdated(entry, UpdateSource.App) }
verify(rebuilder, times(1)).rebuildForRemoteInputReply(entry)
}
@@ -208,7 +209,7 @@
.build()
`when`(remoteInputManager.shouldKeepForRemoteInputHistory(entry)).thenReturn(false)
`when`(remoteInputManager.shouldKeepForSmartReplyHistory(entry)).thenReturn(true)
- collectionListeners.forEach { it.onEntryUpdated(entry, true) }
+ collectionListeners.forEach { it.onEntryUpdated(entry, UpdateSource.App) }
verify(rebuilder, times(1)).rebuildForCanceledSmartReplies(entry)
verify(smartReplyController, times(1)).stopSending(entry)
@@ -226,7 +227,7 @@
.build()
`when`(remoteInputManager.shouldKeepForRemoteInputHistory(entry)).thenReturn(false)
`when`(remoteInputManager.shouldKeepForSmartReplyHistory(entry)).thenReturn(false)
- collectionListeners.forEach { it.onEntryUpdated(entry, true) }
+ collectionListeners.forEach { it.onEntryUpdated(entry, UpdateSource.App) }
verify(rebuilder, times(1)).rebuildForRemoteInputReply(entry)
}
@@ -246,7 +247,7 @@
`when`(remoteInputManager.shouldKeepForRemoteInputHistory(entry)).thenReturn(false)
`when`(remoteInputManager.shouldKeepForSmartReplyHistory(entry)).thenReturn(false)
- collectionListeners.forEach { it.onEntryUpdated(entry, true) }
+ collectionListeners.forEach { it.onEntryUpdated(entry, UpdateSource.App) }
assertThat(entry.remoteInputs).isNull()
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
deleted file mode 100644
index 2aa405a..0000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
+++ /dev/null
@@ -1,1001 +0,0 @@
-/*
- * Copyright (C) 2020 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.systemui.statusbar.notification.collection.coordinator;
-
-import static android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static junit.framework.Assert.assertFalse;
-
-import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeFalse;
-import static org.junit.Assume.assumeTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.FlagsParameterization;
-import android.testing.TestableLooper;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.compose.animation.scene.ObservableTransitionState;
-import com.android.systemui.Flags;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.communal.shared.model.CommunalScenes;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.BrokenWithSceneContainer;
-import com.android.systemui.flags.DisableSceneContainer;
-import com.android.systemui.flags.EnableSceneContainer;
-import com.android.systemui.flags.SceneContainerFlagParameterizationKt;
-import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.keyguard.shared.model.KeyguardState;
-import com.android.systemui.keyguard.shared.model.TransitionState;
-import com.android.systemui.keyguard.shared.model.TransitionStep;
-import com.android.systemui.kosmos.KosmosJavaAdapter;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.scene.shared.flag.SceneContainerFlag;
-import com.android.systemui.shade.data.repository.FakeShadeRepository;
-import com.android.systemui.shade.data.repository.ShadeAnimationRepository;
-import com.android.systemui.shade.data.repository.ShadeRepository;
-import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor;
-import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorLegacyImpl;
-import com.android.systemui.statusbar.notification.VisibilityLocationProvider;
-import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
-import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager;
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
-import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
-import com.android.systemui.statusbar.notification.data.repository.HeadsUpRepository;
-import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.util.concurrency.FakeExecutor;
-import com.android.systemui.util.kotlin.JavaAdapter;
-import com.android.systemui.util.time.FakeSystemClock;
-
-import kotlinx.coroutines.flow.MutableStateFlow;
-import kotlinx.coroutines.test.TestScope;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.verification.VerificationMode;
-
-import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
-import platform.test.runner.parameterized.Parameters;
-
-import java.util.List;
-import java.util.Set;
-
-@SmallTest
-@RunWith(ParameterizedAndroidJunit4.class)
-@TestableLooper.RunWithLooper
-public class VisualStabilityCoordinatorTest extends SysuiTestCase {
-
- @Parameters(name = "{0}")
- public static List<FlagsParameterization> getParams() {
- return SceneContainerFlagParameterizationKt
- .andSceneContainer(allCombinationsOf(Flags.FLAG_STABILIZE_HEADS_UP_GROUP_V2));
- }
-
- private VisualStabilityCoordinator mCoordinator;
-
- @Mock private DumpManager mDumpManager;
- @Mock private NotifPipeline mNotifPipeline;
- @Mock private WakefulnessLifecycle mWakefulnessLifecycle;
- @Mock private StatusBarStateController mStatusBarStateController;
- @Mock private Pluggable.PluggableListener<NotifStabilityManager> mInvalidateListener;
- @Mock private SeenNotificationsInteractor mSeenNotificationsInteractor;
- @Mock private HeadsUpRepository mHeadsUpRepository;
- @Mock private VisibilityLocationProvider mVisibilityLocationProvider;
- @Mock private VisualStabilityProvider mVisualStabilityProvider;
- @Mock private VisualStabilityCoordinatorLogger mLogger;
- @Mock private KeyguardStateController mKeyguardStateController;
-
- @Captor private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefulnessObserverCaptor;
- @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mSBStateListenerCaptor;
- @Captor private ArgumentCaptor<NotifStabilityManager> mNotifStabilityManagerCaptor;
-
- private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);
- private FakeSystemClock mFakeSystemClock = new FakeSystemClock();
- private FakeExecutor mFakeBackgroundExecutor = new FakeExecutor(mFakeSystemClock);
- private FakeExecutor mFakeMainExecutor = new FakeExecutor(mFakeSystemClock);
- private final TestScope mTestScope = mKosmos.getTestScope();
- private final JavaAdapter mJavaAdapter = new JavaAdapter(mTestScope.getBackgroundScope());
-
- private ShadeAnimationInteractor mShadeAnimationInteractor;
- private ShadeRepository mShadeRepository;
- private WakefulnessLifecycle.Observer mWakefulnessObserver;
- private StatusBarStateController.StateListener mStatusBarStateListener;
- private NotifStabilityManager mNotifStabilityManager;
- private NotificationEntry mEntry;
- private GroupEntry mGroupEntry;
-
- public VisualStabilityCoordinatorTest(FlagsParameterization flags) {
- super();
- mSetFlagsRule.setFlagsParameterization(flags);
- }
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mShadeRepository = new FakeShadeRepository();
- mShadeAnimationInteractor = new ShadeAnimationInteractorLegacyImpl(
- new ShadeAnimationRepository(), mShadeRepository);
- mCoordinator = new VisualStabilityCoordinator(
- mFakeBackgroundExecutor,
- mFakeMainExecutor,
- mDumpManager,
- mHeadsUpRepository,
- mShadeAnimationInteractor,
- mJavaAdapter,
- mSeenNotificationsInteractor,
- mStatusBarStateController,
- mVisibilityLocationProvider,
- mVisualStabilityProvider,
- mWakefulnessLifecycle,
- mKosmos.getCommunalSceneInteractor(),
- mKosmos.getShadeInteractor(),
- mKosmos.getKeyguardTransitionInteractor(),
- mKeyguardStateController,
- mLogger);
-
- when(mHeadsUpRepository.isTrackingHeadsUp()).thenReturn(MutableStateFlow(false));
- mCoordinator.attach(mNotifPipeline);
- mTestScope.getTestScheduler().runCurrent();
-
- // capture arguments:
- verify(mWakefulnessLifecycle).addObserver(mWakefulnessObserverCaptor.capture());
- mWakefulnessObserver = mWakefulnessObserverCaptor.getValue();
-
- verify(mStatusBarStateController).addCallback(mSBStateListenerCaptor.capture());
- mStatusBarStateListener = mSBStateListenerCaptor.getValue();
-
- verify(mNotifPipeline).setVisualStabilityManager(mNotifStabilityManagerCaptor.capture());
- mNotifStabilityManager = mNotifStabilityManagerCaptor.getValue();
- mNotifStabilityManager.setInvalidationListener(mInvalidateListener);
-
- mEntry = new NotificationEntryBuilder()
- .setPkg("testPkg1")
- .build();
-
- mGroupEntry = new GroupEntryBuilder()
- .setSummary(mEntry)
- .build();
-
- when(mHeadsUpRepository.isHeadsUpEntry(mEntry.getKey())).thenReturn(false);
-
- // Whenever we invalidate, the pipeline runs again, so we invalidate the state
- doAnswer(i -> {
- mNotifStabilityManager.onBeginRun();
- return null;
- }).when(mInvalidateListener).onPluggableInvalidated(eq(mNotifStabilityManager), any());
- }
-
- @Test
- public void testScreenOff_groupAndSectionChangesAllowed() {
- // GIVEN screen is off, panel isn't expanded and device isn't pulsing
- setFullyDozed(true);
- setSleepy(true);
- setPanelExpanded(false);
- setPulsing(false);
-
- // THEN group changes are allowed
- assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertTrue(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are allowed
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testScreenTurningOff_groupAndSectionChangesNotAllowed() {
- // GIVEN the screen is turning off (sleepy but partially dozed)
- setFullyDozed(false);
- setSleepy(true);
- setPanelExpanded(true);
- setPulsing(false);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testScreenTurningOn_groupAndSectionChangesNotAllowed() {
- // GIVEN the screen is turning on (still fully dozed, not sleepy)
- setFullyDozed(true);
- setSleepy(false);
- setPanelExpanded(true);
- setPulsing(false);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testPanelNotExpanded_groupAndSectionChangesAllowed() {
- // GIVEN screen is on but the panel isn't expanded and device isn't pulsing
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(false);
- setPulsing(false);
-
- // THEN group changes are allowed
- assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertTrue(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are allowed
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testPanelExpanded_groupAndSectionChangesNotAllowed() {
- // GIVEN the panel true expanded and device isn't pulsing
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setPulsing(false);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
- public void testLockscreenPartlyShowing_groupAndSectionChangesNotAllowed() {
- // GIVEN the panel true expanded and device isn't pulsing
- setFullyDozed(false);
- setSleepy(false);
- setLockscreenShowing(0.5f);
- setPulsing(false);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
- public void testLockscreenFullyShowing_groupAndSectionChangesNotAllowed() {
- // GIVEN the panel true expanded and device isn't pulsing
- setFullyDozed(false);
- setSleepy(false);
- setLockscreenShowing(1.0f);
- setPulsing(false);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testPulsing_screenOff_groupAndSectionChangesNotAllowed() {
- // GIVEN the device is pulsing and screen is off
- setFullyDozed(true);
- setSleepy(true);
- setPulsing(true);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testPulsing_panelNotExpanded_groupAndSectionChangesNotAllowed() {
- // GIVEN the device is pulsing and screen is off with the panel not expanded
- setFullyDozed(true);
- setSleepy(true);
- setPanelExpanded(false);
- setPulsing(true);
-
- // THEN group changes are NOT allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are NOT allowed
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testOverrideReorderingSuppression_onlySectionChangesAllowed() {
- // GIVEN section changes typically wouldn't be allowed because the panel is expanded and
- // we're not pulsing
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setPulsing(true);
-
- // WHEN we temporarily allow section changes for this notification entry
- mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
-
- // THEN group changes aren't allowed
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // THEN section changes are allowed for this notification but not other notifications
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(
- new NotificationEntryBuilder()
- .setPkg("testPkg2")
- .build()));
- }
-
- @Test
- public void testTemporarilyAllowSectionChanges_callsInvalidate() {
- // GIVEN section changes typically wouldn't be allowed because the panel is expanded
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setPulsing(false);
-
- // WHEN we temporarily allow section changes for this notification entry
- mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.uptimeMillis());
-
- // THEN the notification list is invalidated
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- public void testTemporarilyAllowSectionChanges_noInvalidationCalled() {
- // GIVEN section changes typically WOULD be allowed
- setFullyDozed(true);
- setSleepy(true);
- setPanelExpanded(false);
- setPulsing(false);
-
- // WHEN we temporarily allow section changes for this notification entry
- mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
-
- // THEN invalidate is not called because this entry was never suppressed from reordering
- verifyStabilityManagerWasInvalidated(never());
- }
-
- @Test
- public void testTemporarilyAllowSectionChangesTimeout() {
- // GIVEN section changes typically WOULD be allowed
- setFullyDozed(true);
- setSleepy(true);
- setPanelExpanded(false);
- setPulsing(false);
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
-
- // WHEN we temporarily allow section changes for this notification entry
- mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
-
- // THEN invalidate is not called because this entry was never suppressed from reordering;
- // THEN section changes are allowed for this notification
- verifyStabilityManagerWasInvalidated(never());
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
-
- // WHEN we're pulsing (now disallowing reordering)
- setPulsing(true);
-
- // THEN we're still allowed to reorder this section because it's still in the list of
- // notifications to allow section changes
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
-
- // WHEN the timeout for the temporarily allow section reordering runnable is finsihed
- mFakeBackgroundExecutor.advanceClockToNext();
- mFakeBackgroundExecutor.runNextReady();
-
- // THEN section changes aren't allowed anymore
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
- }
-
- @Test
- public void testTemporarilyAllowSectionChanges_isPulsingChangeBeforeTimeout() {
- // GIVEN section changes typically wouldn't be allowed because the device is pulsing
- setFullyDozed(true);
- setSleepy(true);
- setPanelExpanded(false);
- setPulsing(true);
-
- // WHEN we temporarily allow section changes for this notification entry
- mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
- // can now reorder, so invalidates
- verifyStabilityManagerWasInvalidated(times(1));
-
- // WHEN reordering is now allowed because device isn't pulsing anymore
- setPulsing(false);
-
- // THEN invalidate isn't called a second time since reordering was already allowed
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- public void testMovingVisibleHeadsUpNotAllowed() {
- // GIVEN stability enforcing conditions
- setPanelExpanded(true);
- setSleepy(false);
-
- // WHEN a notification is alerting and visible
- when(mHeadsUpRepository.isHeadsUpEntry(mEntry.getKey())).thenReturn(true);
- when(mVisibilityLocationProvider.isInVisibleLocation(any(NotificationEntry.class)))
- .thenReturn(true);
-
- // VERIFY the notification cannot be reordered
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(mEntry)).isFalse();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(mEntry)).isFalse();
- }
-
- @Test
- public void testMovingInvisibleHeadsUpAllowed() {
- // GIVEN stability enforcing conditions
- setPanelExpanded(true);
- setSleepy(false);
-
- // WHEN a notification is alerting but not visible
- when(mHeadsUpRepository.isHeadsUpEntry(mEntry.getKey())).thenReturn(true);
- when(mVisibilityLocationProvider.isInVisibleLocation(any(NotificationEntry.class)))
- .thenReturn(false);
-
- // VERIFY the notification can be reordered
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(mEntry)).isTrue();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(mEntry)).isTrue();
- }
-
- @Test
- public void testNeverSuppressedChanges_noInvalidationCalled() {
- // GIVEN no notifications are currently being suppressed from grouping nor being sorted
-
- // WHEN device isn't pulsing anymore
- setPulsing(false);
-
- // WHEN fully dozed
- setFullyDozed(true);
-
- // WHEN sleepy
- setSleepy(true);
-
- // WHEN panel isn't expanded
- setPanelExpanded(false);
-
- // THEN we never see any calls to invalidate since there weren't any notifications that
- // were being suppressed from grouping or section changes
- verifyStabilityManagerWasInvalidated(never());
- }
-
- @Test
- public void testNotSuppressingGroupChangesAnymore_invalidationCalled() {
- // GIVEN visual stability is being maintained b/c panel is expanded
- setPulsing(false);
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
-
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
-
- // WHEN the panel isn't expanded anymore
- setPanelExpanded(false);
-
- // invalidate is called because we were previously suppressing a group change
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- public void testNotLaunchingActivityAnymore_invalidationCalled() {
- // GIVEN visual stability is being maintained b/c animation is playing
- setActivityLaunching(true);
-
- assertFalse(mNotifStabilityManager.isPipelineRunAllowed());
-
- // WHEN the animation has stopped playing
- setActivityLaunching(false);
-
- // invalidate is called, b/c we were previously suppressing the pipeline from running
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- public void testNotCollapsingPanelAnymore_invalidationCalled() {
- // GIVEN visual stability is being maintained b/c animation is playing
- setPanelCollapsing(true);
-
- assertFalse(mNotifStabilityManager.isPipelineRunAllowed());
-
- // WHEN the animation has stopped playing
- setPanelCollapsing(false);
-
- // invalidate is called, b/c we were previously suppressing the pipeline from running
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION)
- @DisableSceneContainer
- public void testNotLockscreenInGoneTransitionLegacy_invalidationCalled() {
- // GIVEN visual stability is being maintained b/c animation is playing
- doReturn(true).when(mKeyguardStateController).isKeyguardFadingAway();
- mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged();
-
- assertFalse(mNotifStabilityManager.isPipelineRunAllowed());
-
- // WHEN the animation has stopped playing
- doReturn(false).when(mKeyguardStateController).isKeyguardFadingAway();
- mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged();
-
- // invalidate is called, b/c we were previously suppressing the pipeline from running
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION)
- @EnableSceneContainer
- @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
- public void testNotLockscreenInGoneTransition_invalidationCalled() {
- // GIVEN visual stability is being maintained b/c animation is playing
- mKosmos.getKeyguardTransitionRepository().sendTransitionStepJava(
- mTestScope, new TransitionStep(
- KeyguardState.LOCKSCREEN,
- KeyguardState.GONE,
- 1f,
- TransitionState.RUNNING), /* validateStep = */ false);
- mTestScope.getTestScheduler().runCurrent();
- assertFalse(mNotifStabilityManager.isPipelineRunAllowed());
-
- // WHEN the animation has stopped playing
- mKosmos.getKeyguardTransitionRepository().sendTransitionStepJava(
- mTestScope, new TransitionStep(
- KeyguardState.LOCKSCREEN,
- KeyguardState.GONE,
- 1f,
- TransitionState.FINISHED), /* validateStep = */ false);
- mTestScope.getTestScheduler().runCurrent();
-
- // invalidate is called, b/c we were previously suppressing the pipeline from running
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- public void testNeverSuppressPipelineRunFromPanelCollapse_noInvalidationCalled() {
- // GIVEN animation is playing
- setPanelCollapsing(true);
-
- // WHEN the animation has stopped playing
- setPanelCollapsing(false);
-
- // THEN invalidate is not called, b/c nothing has been suppressed
- verifyStabilityManagerWasInvalidated(never());
- }
-
- @Test
- public void testNeverSuppressPipelineRunFromLaunchActivity_noInvalidationCalled() {
- // GIVEN animation is playing
- setActivityLaunching(true);
-
- // WHEN the animation has stopped playing
- setActivityLaunching(false);
-
- // THEN invalidate is not called, b/c nothing has been suppressed
- verifyStabilityManagerWasInvalidated(never());
- }
-
- @Test
- public void testNotSuppressingEntryReorderingAnymoreWillInvalidate() {
- // GIVEN visual stability is being maintained b/c panel is expanded
- setPulsing(false);
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setCommunalShowing(false);
-
- assertFalse(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
- // The pipeline still has to report back that entry reordering was suppressed
- mNotifStabilityManager.onEntryReorderSuppressed();
-
- // WHEN the panel isn't expanded anymore
- setPanelExpanded(false);
-
- // invalidate is called because we were previously suppressing an entry reorder
- verifyStabilityManagerWasInvalidated(times(1));
- }
-
- @Test
- @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
- public void testCommunalShowingWillNotSuppressReordering() {
- // GIVEN panel is expanded, communal is showing, and QS is collapsed
- setPulsing(false);
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setQsExpanded(false);
- setCommunalShowing(true);
-
- // Reordering should be allowed
- assertTrue(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
- }
-
- @Test
- public void testQsExpandedOverCommunalWillSuppressReordering() {
- // GIVEN panel is expanded and communal is showing, but QS is expanded
- setPulsing(false);
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setQsExpanded(true);
- setCommunalShowing(true);
-
- // Reordering should not be allowed
- assertFalse(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
- }
-
- @Test
- public void testQueryingEntryReorderingButNotReportingReorderSuppressedDoesNotInvalidate() {
- // GIVEN visual stability is being maintained b/c panel is expanded
- setPulsing(false);
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
-
- assertFalse(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
-
- // WHEN the panel isn't expanded anymore
- setPanelExpanded(false);
-
- // invalidate is not called because we were not told that an entry reorder was suppressed
- verifyStabilityManagerWasInvalidated(never());
- }
-
- @Test
- public void testHeadsUp_allowedToChangeGroupAndSection() {
- // GIVEN group + section changes disallowed
- setFullyDozed(false);
- setSleepy(false);
- setPanelExpanded(true);
- setPulsing(true);
- assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
- assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
-
- // GIVEN mEntry is a HUN
- when(mHeadsUpRepository.isHeadsUpEntry(mEntry.getKey())).thenReturn(true);
-
- // THEN group + section changes are allowed
- assertTrue(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
- assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
-
- // BUT pruning the group for which this is the summary would still NOT be allowed.
- assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
- }
-
- @Test
- public void everyChangeAllowed_onReorderingEnabled_legacy() {
- assumeFalse(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // THEN
- assertThat(mNotifStabilityManager.isEveryChangeAllowed()).isTrue();
- assertThat(mNotifStabilityManager.isGroupChangeAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isGroupPruneAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(any())).isTrue();
- }
-
- @Test
- public void everyChangeAllowed_noActiveHeadsUpGroup_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - empty heads-up-group keys
- mCoordinator.setHeadsUpGroupKeys(Set.of());
-
- // THEN
- assertThat(mNotifStabilityManager.isEveryChangeAllowed()).isTrue();
- assertThat(mNotifStabilityManager.isGroupChangeAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isGroupPruneAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(any())).isTrue();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(any())).isTrue();
- }
-
- @Test
- public void everyChangeDisallowed_activeHeadsUpGroup_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- mCoordinator.setHeadsUpGroupKeys(Set.of("heads_up_group_key"));
-
- // THEN
- assertThat(mNotifStabilityManager.isEveryChangeAllowed()).isFalse();
- }
-
- @Test
- public void nonHeadsUpGroup_changesAllowed_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- String headsUpGroupKey = "heads_up_group_key";
- mCoordinator.setHeadsUpGroupKeys(Set.of(headsUpGroupKey));
- when(mHeadsUpRepository.isHeadsUpEntry(headsUpGroupKey)).thenReturn(true);
-
- // GIVEN - HUN Group Summary
- final NotificationEntry nonHeadsUpGroupSummary = mock(NotificationEntry.class);
- when(nonHeadsUpGroupSummary.getKey()).thenReturn("non_heads_up_group_key");
- when(nonHeadsUpGroupSummary.isSummaryWithChildren()).thenReturn(true);
- final GroupEntry nonHeadsUpGroupEntry = mock(GroupEntry.class);
- when(nonHeadsUpGroupEntry.getSummary()).thenReturn(nonHeadsUpGroupSummary);
- when(nonHeadsUpGroupEntry.getRepresentativeEntry()).thenReturn(nonHeadsUpGroupSummary);
-
- // THEN
- assertThat(mNotifStabilityManager.isGroupPruneAllowed(nonHeadsUpGroupEntry)).isTrue();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(nonHeadsUpGroupEntry)).isTrue();
- }
-
- @Test
- public void headsUpGroup_changesDisallowed_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- final String headsUpGroupKey = "heads_up_group_key";
- mCoordinator.setHeadsUpGroupKeys(Set.of(headsUpGroupKey));
- when(mHeadsUpRepository.isHeadsUpEntry(headsUpGroupKey)).thenReturn(true);
-
- // GIVEN - HUN Group
- final NotificationEntry headsUpGroupSummary = mock(NotificationEntry.class);
- when(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false);
- when(headsUpGroupSummary.getKey()).thenReturn(headsUpGroupKey);
- when(headsUpGroupSummary.isSummaryWithChildren()).thenReturn(true);
-
- final GroupEntry headsUpGroupEntry = mock(GroupEntry.class);
- when(headsUpGroupEntry.getSummary()).thenReturn(headsUpGroupSummary);
- when(headsUpGroupEntry.getRepresentativeEntry()).thenReturn(headsUpGroupSummary);
-
- when(headsUpGroupSummary.getParent()).thenReturn(headsUpGroupEntry);
-
- // GIVEN - HUN is in visible location
- when(mVisibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary)).thenReturn(true);
-
- // THEN
- assertThat(mNotifStabilityManager.isGroupPruneAllowed(headsUpGroupEntry)).isFalse();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(headsUpGroupEntry)).isFalse();
- }
-
- @Test
- public void headsUpGroupSummaries_changesDisallowed_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- final String headsUpGroupKey = "heads_up_group_key";
- mCoordinator.setHeadsUpGroupKeys(Set.of(headsUpGroupKey));
- when(mHeadsUpRepository.isHeadsUpEntry(headsUpGroupKey)).thenReturn(true);
-
- // GIVEN - HUN Group
- final NotificationEntry headsUpGroupSummary = mock(NotificationEntry.class);
- when(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false);
- when(headsUpGroupSummary.getKey()).thenReturn(headsUpGroupKey);
- when(headsUpGroupSummary.isSummaryWithChildren()).thenReturn(true);
-
- final GroupEntry headsUpGroupEntry = mock(GroupEntry.class);
- when(headsUpGroupEntry.getSummary()).thenReturn(headsUpGroupSummary);
- when(headsUpGroupEntry.getRepresentativeEntry()).thenReturn(headsUpGroupSummary);
-
- when(headsUpGroupSummary.getParent()).thenReturn(headsUpGroupEntry);
-
- // GIVEN - HUN is in visible location
- when(mVisibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary)).thenReturn(true);
-
- // THEN
- assertThat(mNotifStabilityManager.isGroupChangeAllowed(headsUpGroupSummary)).isFalse();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(headsUpGroupSummary)).isFalse();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(headsUpGroupSummary)).isFalse();
- }
-
- @Test
- public void notificationInNonHUNGroup_changesAllowed_onReorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- String headsUpGroupKey = "heads_up_group_key";
- mCoordinator.setHeadsUpGroupKeys(Set.of(headsUpGroupKey));
- when(mHeadsUpRepository.isHeadsUpEntry(headsUpGroupKey)).thenReturn(true);
-
- // GIVEN - non HUN parent Group Summary
- final NotificationEntry groupSummary = mock(NotificationEntry.class);
- when(groupSummary.getKey()).thenReturn("non_heads_up_group_key");
- when(groupSummary.isSummaryWithChildren()).thenReturn(true);
-
- final GroupEntry nonHeadsUpGroupEntry = mock(GroupEntry.class);
- when(nonHeadsUpGroupEntry.getSummary()).thenReturn(groupSummary);
- when(nonHeadsUpGroupEntry.getRepresentativeEntry()).thenReturn(groupSummary);
-
- // GIVEN - child entry in a non heads-up group.
- final NotificationEntry childEntry = mock(NotificationEntry.class);
- when(childEntry.rowIsChildInGroup()).thenReturn(true);
- when(childEntry.getParent()).thenReturn(nonHeadsUpGroupEntry);
- when(childEntry.getParent()).thenReturn(nonHeadsUpGroupEntry);
-
- // THEN
- assertThat(mNotifStabilityManager.isGroupChangeAllowed(childEntry)).isTrue();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(childEntry)).isTrue();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(nonHeadsUpGroupEntry)).isTrue();
- }
-
- @Test
- public void notificationInHUNGroup_changesDisallowed_reorderingEnabled() {
- assumeTrue(StabilizeHeadsUpGroup.isEnabled());
- // GIVEN - reordering is allowed.
- setPulsing(false);
- setPanelExpanded(false);
-
- // GIVEN - there is a group heads-up.
- final String headsUpGroupKey = "heads_up_group_key";
- mCoordinator.setHeadsUpGroupKeys(Set.of(headsUpGroupKey));
- when(mHeadsUpRepository.isHeadsUpEntry(headsUpGroupKey)).thenReturn(true);
-
- // GIVEN - HUN Group Summary
- final NotificationEntry headsUpGroupSummary = mock(NotificationEntry.class);
- when(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false);
- when(headsUpGroupSummary.getKey()).thenReturn(headsUpGroupKey);
- when(headsUpGroupSummary.isSummaryWithChildren()).thenReturn(true);
-
- final GroupEntry nonHeadsUpGroupEntry = mock(GroupEntry.class);
- when(nonHeadsUpGroupEntry.getSummary()).thenReturn(headsUpGroupSummary);
- when(nonHeadsUpGroupEntry.getRepresentativeEntry()).thenReturn(headsUpGroupSummary);
-
- // GIVEN - child entry in a non heads-up group.
- final NotificationEntry childEntry = mock(NotificationEntry.class);
- when(childEntry.rowIsChildInGroup()).thenReturn(true);
- when(childEntry.getParent()).thenReturn(nonHeadsUpGroupEntry);
-
- // GIVEN - HUN is in visible location
- when(mVisibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary)).thenReturn(true);
-
- // THEN
- assertThat(mNotifStabilityManager.isGroupChangeAllowed(childEntry)).isFalse();
- assertThat(mNotifStabilityManager.isSectionChangeAllowed(childEntry)).isFalse();
- assertThat(mNotifStabilityManager.isEntryReorderingAllowed(childEntry)).isFalse();
- }
-
- private void verifyStabilityManagerWasInvalidated(VerificationMode mode) {
- verify(mInvalidateListener, mode).onPluggableInvalidated(eq(mNotifStabilityManager), any());
- }
-
- private void setActivityLaunching(boolean activityLaunching) {
- mShadeAnimationInteractor.setIsLaunchingActivity(activityLaunching);
- mTestScope.getTestScheduler().runCurrent();
- }
-
- private void setPanelCollapsing(boolean collapsing) {
- mShadeRepository.setLegacyIsClosing(collapsing);
- mTestScope.getTestScheduler().runCurrent();
- }
-
- private void setCommunalShowing(boolean isShowing) {
- final MutableStateFlow<ObservableTransitionState> showingFlow =
- MutableStateFlow(
- new ObservableTransitionState.Idle(
- isShowing ? CommunalScenes.Communal : CommunalScenes.Blank)
- );
- mKosmos.getCommunalSceneInteractor().setTransitionState(showingFlow);
- mTestScope.getTestScheduler().runCurrent();
- }
-
- private void setQsExpanded(boolean isExpanded) {
- mKosmos.getShadeRepository().setQsExpansion(isExpanded ? 1.0f : 0.0f);
- mTestScope.getTestScheduler().runCurrent();
- }
-
- private void setPulsing(boolean pulsing) {
- mStatusBarStateListener.onPulsingChanged(pulsing);
- }
-
- private void setFullyDozed(boolean fullyDozed) {
- float dozeAmount = fullyDozed ? 1 : 0;
- mStatusBarStateListener.onDozeAmountChanged(dozeAmount, dozeAmount);
- }
-
- private void setSleepy(boolean sleepy) {
- if (sleepy) {
- mWakefulnessObserver.onFinishedGoingToSleep();
- } else {
- mWakefulnessObserver.onStartedWakingUp();
- }
- }
-
- private void setPanelExpanded(boolean expanded) {
- setPanelExpandedAndLockscreenShowing(expanded, /* lockscreenShowing = */ 0.0f);
- }
-
- private void setLockscreenShowing(float lockscreenShowing) {
- setPanelExpandedAndLockscreenShowing(/* panelExpanded = */ false, lockscreenShowing);
- }
-
- private void setPanelExpandedAndLockscreenShowing(boolean panelExpanded,
- float lockscreenShowing) {
- if (SceneContainerFlag.isEnabled()) {
- mStatusBarStateListener.onExpandedChanged(panelExpanded);
- mKosmos.getKeyguardTransitionRepository().sendTransitionStepJava(
- mTestScope,
- makeLockscreenTransitionStep(lockscreenShowing),
- /* validateStep = */ false);
- } else {
- mStatusBarStateListener.onExpandedChanged(panelExpanded || lockscreenShowing > 0.0f);
- }
- }
-
- private TransitionStep makeLockscreenTransitionStep(float value) {
- if (value <= 0.0f) {
- return new TransitionStep(KeyguardState.GONE);
- } else if (value >= 1.0f) {
- return new TransitionStep(KeyguardState.LOCKSCREEN);
- } else {
- return new TransitionStep(
- KeyguardState.GONE,
- KeyguardState.LOCKSCREEN,
- value,
- TransitionState.RUNNING);
- }
- }
-}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt
new file mode 100644
index 0000000..ef0a416
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt
@@ -0,0 +1,1007 @@
+/*
+ * Copyright (C) 2020 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.systemui.statusbar.notification.collection.coordinator
+
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.FlagsParameterization
+import android.testing.TestableLooper.RunWithLooper
+import androidx.test.filters.SmallTest
+import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.systemui.Flags
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.shared.model.CommunalScenes
+import com.android.systemui.concurrency.fakeExecutor
+import com.android.systemui.flags.BrokenWithSceneContainer
+import com.android.systemui.flags.DisableSceneContainer
+import com.android.systemui.flags.EnableSceneContainer
+import com.android.systemui.flags.andSceneContainer
+import com.android.systemui.keyguard.WakefulnessLifecycle
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.keyguard.wakefulnessLifecycle
+import com.android.systemui.kosmos.testCase
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.plugins.statusbar.statusBarStateController
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.shade.data.repository.ShadeAnimationRepository
+import com.android.systemui.shade.data.repository.fakeShadeRepository
+import com.android.systemui.shade.data.repository.shadeRepository
+import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorLegacyImpl
+import com.android.systemui.shade.domain.interactor.shadeAnimationInteractor
+import com.android.systemui.statusbar.notification.VisibilityLocationProvider
+import com.android.systemui.statusbar.notification.collection.GroupEntry
+import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable.PluggableListener
+import com.android.systemui.statusbar.notification.collection.notifPipeline
+import com.android.systemui.statusbar.notification.data.repository.FakeHeadsUpRowRepository
+import com.android.systemui.statusbar.notification.stack.data.repository.FakeHeadsUpNotificationRepository
+import com.android.systemui.statusbar.notification.stack.data.repository.headsUpNotificationRepository
+import com.android.systemui.statusbar.notification.visibilityLocationProvider
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.statusbar.policy.keyguardStateController
+import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.withArgCaptor
+import com.android.systemui.util.time.fakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.runTest
+import org.junit.Assume.assumeFalse
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doAnswer
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+import org.mockito.verification.VerificationMode
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
+
+@SmallTest
+@RunWith(ParameterizedAndroidJunit4::class)
+@RunWithLooper
+class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCase() {
+ private val kosmos = testKosmos().apply { testCase = this@VisualStabilityCoordinatorTest }
+
+ private val invalidateListener: PluggableListener<NotifStabilityManager> = mock()
+ private val headsUpRepository = kosmos.headsUpNotificationRepository
+ private val visibilityLocationProvider: VisibilityLocationProvider =
+ kosmos.visibilityLocationProvider
+ private val keyguardStateController: KeyguardStateController = kosmos.keyguardStateController
+
+ private val fakeSystemClock = kosmos.fakeSystemClock
+ private val fakeBackgroundExecutor = kosmos.fakeExecutor
+ private val testScope = kosmos.testScope
+
+ private val shadeRepository = kosmos.fakeShadeRepository
+ private lateinit var wakefulnessObserver: WakefulnessLifecycle.Observer
+ private lateinit var statusBarStateListener: StatusBarStateController.StateListener
+ private lateinit var notifStabilityManager: NotifStabilityManager
+ private lateinit var entry: NotificationEntry
+ private lateinit var groupEntry: GroupEntry
+
+ private val underTest: VisualStabilityCoordinator by lazy { kosmos.visualStabilityCoordinator }
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return FlagsParameterization.allCombinationsOf(Flags.FLAG_STABILIZE_HEADS_UP_GROUP_V2)
+ .andSceneContainer()
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags)
+ }
+
+ @Before
+ fun setUp() {
+ configureKosmos()
+
+ underTest.attach(kosmos.notifPipeline)
+ testScope.testScheduler.runCurrent()
+
+ // capture arguments:
+ wakefulnessObserver = withArgCaptor {
+ verify(kosmos.wakefulnessLifecycle).addObserver(capture())
+ }
+ statusBarStateListener = withArgCaptor {
+ verify(kosmos.statusBarStateController).addCallback(capture())
+ }
+ notifStabilityManager = withArgCaptor {
+ verify(kosmos.notifPipeline).setVisualStabilityManager(capture())
+ }
+ notifStabilityManager.setInvalidationListener(invalidateListener)
+
+ entry = NotificationEntryBuilder().setPkg("testPkg1").build()
+
+ groupEntry = GroupEntryBuilder().setSummary(entry).build()
+
+ // Whenever we invalidate, the pipeline runs again, so we invalidate the state
+ whenever(invalidateListener.onPluggableInvalidated(eq(notifStabilityManager), any()))
+ .doAnswer { _ ->
+ notifStabilityManager.onBeginRun()
+ null
+ }
+ }
+
+ private fun configureKosmos() {
+ kosmos.statusBarStateController = mock()
+ // TODO(377868472) only override this when SceneContainer is disabled
+ kosmos.shadeAnimationInteractor =
+ ShadeAnimationInteractorLegacyImpl(ShadeAnimationRepository(), shadeRepository)
+ }
+
+ @Test
+ fun testScreenOff_groupAndSectionChangesAllowed() =
+ testScope.runTest {
+ // GIVEN screen is off, panel isn't expanded and device isn't pulsing
+ setFullyDozed(true)
+ setSleepy(true)
+ setPanelExpanded(false)
+ setPulsing(false)
+
+ // THEN group changes are allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isTrue()
+
+ // THEN section changes are allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun testScreenTurningOff_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the screen is turning off (sleepy but partially dozed)
+ setFullyDozed(false)
+ setSleepy(true)
+ setPanelExpanded(true)
+ setPulsing(false)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testScreenTurningOn_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the screen is turning on (still fully dozed, not sleepy)
+ setFullyDozed(true)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setPulsing(false)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testPanelNotExpanded_groupAndSectionChangesAllowed() =
+ testScope.runTest {
+ // GIVEN screen is on but the panel isn't expanded and device isn't pulsing
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(false)
+ setPulsing(false)
+
+ // THEN group changes are allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isTrue()
+
+ // THEN section changes are allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun testPanelExpanded_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the panel true expanded and device isn't pulsing
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setPulsing(false)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
+ fun testLockscreenPartlyShowing_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the panel true expanded and device isn't pulsing
+ setFullyDozed(false)
+ setSleepy(false)
+ setLockscreenShowing(0.5f)
+ setPulsing(false)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
+ fun testLockscreenFullyShowing_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the panel true expanded and device isn't pulsing
+ setFullyDozed(false)
+ setSleepy(false)
+ setLockscreenShowing(1.0f)
+ setPulsing(false)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testPulsing_screenOff_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the device is pulsing and screen is off
+ setFullyDozed(true)
+ setSleepy(true)
+ setPulsing(true)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testPulsing_panelNotExpanded_groupAndSectionChangesNotAllowed() =
+ testScope.runTest {
+ // GIVEN the device is pulsing and screen is off with the panel not expanded
+ setFullyDozed(true)
+ setSleepy(true)
+ setPanelExpanded(false)
+ setPulsing(true)
+
+ // THEN group changes are NOT allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are NOT allowed
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testOverrideReorderingSuppression_onlySectionChangesAllowed() =
+ testScope.runTest {
+ // GIVEN section changes typically wouldn't be allowed because the panel is expanded and
+ // we're not pulsing
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setPulsing(true)
+
+ // WHEN we temporarily allow section changes for this notification entry
+ underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
+
+ // THEN group changes aren't allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // THEN section changes are allowed for this notification but not other notifications
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ assertThat(
+ notifStabilityManager.isSectionChangeAllowed(
+ NotificationEntryBuilder().setPkg("testPkg2").build()
+ )
+ )
+ .isFalse()
+ }
+
+ @Test
+ fun testTemporarilyAllowSectionChanges_callsInvalidate() =
+ testScope.runTest {
+ // GIVEN section changes typically wouldn't be allowed because the panel is expanded
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setPulsing(false)
+
+ // WHEN we temporarily allow section changes for this notification entry
+ underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.uptimeMillis())
+
+ // THEN the notification list is invalidated
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ fun testTemporarilyAllowSectionChanges_noInvalidationCalled() =
+ testScope.runTest {
+ // GIVEN section changes typically WOULD be allowed
+ setFullyDozed(true)
+ setSleepy(true)
+ setPanelExpanded(false)
+ setPulsing(false)
+
+ // WHEN we temporarily allow section changes for this notification entry
+ underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
+
+ // THEN invalidate is not called because this entry was never suppressed from reordering
+ verifyStabilityManagerWasInvalidated(never())
+ }
+
+ @Test
+ fun testTemporarilyAllowSectionChangesTimeout() =
+ testScope.runTest {
+ // GIVEN section changes typically WOULD be allowed
+ setFullyDozed(true)
+ setSleepy(true)
+ setPanelExpanded(false)
+ setPulsing(false)
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+
+ // WHEN we temporarily allow section changes for this notification entry
+ underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
+
+ // THEN invalidate is not called because this entry was never suppressed from
+ // reordering;
+ // THEN section changes are allowed for this notification
+ verifyStabilityManagerWasInvalidated(never())
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+
+ // WHEN we're pulsing (now disallowing reordering)
+ setPulsing(true)
+
+ // THEN we're still allowed to reorder this section because it's still in the list of
+ // notifications to allow section changes
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+
+ // WHEN the timeout for the temporarily allow section reordering runnable is finsihed
+ fakeBackgroundExecutor.advanceClockToNext()
+ fakeBackgroundExecutor.runNextReady()
+
+ // THEN section changes aren't allowed anymore
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testTemporarilyAllowSectionChanges_isPulsingChangeBeforeTimeout() =
+ testScope.runTest {
+ // GIVEN section changes typically wouldn't be allowed because the device is pulsing
+ setFullyDozed(true)
+ setSleepy(true)
+ setPanelExpanded(false)
+ setPulsing(true)
+
+ // WHEN we temporarily allow section changes for this notification entry
+ underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
+ // can now reorder, so invalidates
+ verifyStabilityManagerWasInvalidated(times(1))
+
+ // WHEN reordering is now allowed because device isn't pulsing anymore
+ setPulsing(false)
+
+ // THEN invalidate isn't called a second time since reordering was already allowed
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ fun testMovingVisibleHeadsUpNotAllowed() =
+ testScope.runTest {
+ // GIVEN stability enforcing conditions
+ setPanelExpanded(true)
+ setSleepy(false)
+
+ // WHEN a notification is alerting and visible
+ headsUpRepository.setHeadsUpKeys(entry.key)
+ whenever(visibilityLocationProvider.isInVisibleLocation(any())).thenReturn(true)
+
+ // THEN the notification cannot be reordered
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testMovingInvisibleHeadsUpAllowed() =
+ testScope.runTest {
+ // GIVEN stability enforcing conditions
+ setPanelExpanded(true)
+ setSleepy(false)
+
+ // WHEN a notification is alerting but not visible
+ headsUpRepository.setHeadsUpKeys(entry.key)
+ whenever(visibilityLocationProvider.isInVisibleLocation(any())).thenReturn(false)
+
+ // THEN the notification can be reordered
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun testNeverSuppressedChanges_noInvalidationCalled() =
+ testScope.runTest {
+ // GIVEN no notifications are currently being suppressed from grouping nor being sorted
+
+ // WHEN device isn't pulsing anymore
+
+ setPulsing(false)
+
+ // WHEN fully dozed
+ setFullyDozed(true)
+
+ // WHEN sleepy
+ setSleepy(true)
+
+ // WHEN panel isn't expanded
+ setPanelExpanded(false)
+
+ // THEN we never see any calls to invalidate since there weren't any notifications that
+ // were being suppressed from grouping or section changes
+ verifyStabilityManagerWasInvalidated(never())
+ }
+
+ @Test
+ fun testNotSuppressingGroupChangesAnymore_invalidationCalled() =
+ testScope.runTest {
+ // GIVEN visual stability is being maintained b/c panel is expanded
+ setPulsing(false)
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+
+ // WHEN the panel isn't expanded anymore
+ setPanelExpanded(false)
+
+ // THEN invalidate is called because we were previously suppressing a group change
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ fun testNotLaunchingActivityAnymore_invalidationCalled() {
+ // GIVEN visual stability is being maintained b/c animation is playing
+ setActivityLaunching(true)
+
+ assertThat(notifStabilityManager.isPipelineRunAllowed()).isFalse()
+
+ // WHEN the animation has stopped playing
+ setActivityLaunching(false)
+
+ // THEN invalidate is called, b/c we were previously suppressing the pipeline from running
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ fun testNotCollapsingPanelAnymore_invalidationCalled() {
+ // GIVEN visual stability is being maintained b/c animation is playing
+ setPanelCollapsing(true)
+
+ assertThat(notifStabilityManager.isPipelineRunAllowed()).isFalse()
+
+ // WHEN the animation has stopped playing
+ setPanelCollapsing(false)
+
+ // THEN invalidate is called, b/c we were previously suppressing the pipeline from running
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION)
+ @DisableSceneContainer
+ fun testNotLockscreenInGoneTransitionLegacy_invalidationCalled() {
+ // GIVEN visual stability is being maintained b/c animation is playing
+ whenever(keyguardStateController.isKeyguardFadingAway).thenReturn(true)
+ underTest.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged()
+
+ assertThat(notifStabilityManager.isPipelineRunAllowed()).isFalse()
+
+ // WHEN the animation has stopped playing
+ whenever(keyguardStateController.isKeyguardFadingAway).thenReturn(false)
+ underTest.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged()
+
+ // THEN invalidate is called, b/c we were previously suppressing the pipeline from running
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION)
+ @EnableSceneContainer
+ @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
+ fun testNotLockscreenInGoneTransition_invalidationCalled() =
+ testScope.runTest {
+ // GIVEN visual stability is being maintained b/c animation is playing
+ kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.GONE,
+ 1f,
+ TransitionState.RUNNING,
+ ),
+ /* validateStep = */ false,
+ )
+ testScope.testScheduler.runCurrent()
+ assertThat(notifStabilityManager.isPipelineRunAllowed()).isFalse()
+
+ // WHEN the animation has stopped playing
+ kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ KeyguardState.LOCKSCREEN,
+ KeyguardState.GONE,
+ 1f,
+ TransitionState.FINISHED,
+ ),
+ /* validateStep = */ false,
+ )
+ testScope.testScheduler.runCurrent()
+
+ // THEN invalidate is called, b/c we were previously suppressing the pipeline from
+ // running
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ fun testNeverSuppressPipelineRunFromPanelCollapse_noInvalidationCalled() {
+ // GIVEN animation is playing
+ setPanelCollapsing(true)
+
+ // WHEN the animation has stopped playing
+ setPanelCollapsing(false)
+
+ // THEN invalidate is not called, b/c nothing has been suppressed
+ verifyStabilityManagerWasInvalidated(never())
+ }
+
+ @Test
+ fun testNeverSuppressPipelineRunFromLaunchActivity_noInvalidationCalled() {
+ // GIVEN animation is playing
+ setActivityLaunching(true)
+
+ // WHEN the animation has stopped playing
+ setActivityLaunching(false)
+
+ // THEN invalidate is not called, b/c nothing has been suppressed
+ verifyStabilityManagerWasInvalidated(never())
+ }
+
+ @Test
+ fun testNotSuppressingEntryReorderingAnymoreWillInvalidate() =
+ testScope.runTest {
+ // GIVEN visual stability is being maintained b/c panel is expanded
+ setPulsing(false)
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setCommunalShowing(false)
+
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isFalse()
+ // The pipeline still has to report back that entry reordering was suppressed
+ notifStabilityManager.onEntryReorderSuppressed()
+
+ // WHEN the panel isn't expanded anymore
+ setPanelExpanded(false)
+
+ // THEN invalidate is called because we were previously suppressing an entry reorder
+ verifyStabilityManagerWasInvalidated(times(1))
+ }
+
+ @Test
+ @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
+ fun testCommunalShowingWillNotSuppressReordering() =
+ testScope.runTest {
+ // GIVEN panel is expanded, communal is showing, and QS is collapsed
+ setPulsing(false)
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setQsExpanded(false)
+ setCommunalShowing(true)
+
+ // THEN Reordering should be allowed
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun testQsExpandedOverCommunalWillSuppressReordering() =
+ testScope.runTest {
+ // GIVEN panel is expanded and communal is showing, but QS is expanded
+ setPulsing(false)
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setQsExpanded(true)
+ setCommunalShowing(true)
+
+ // THEN Reordering should not be allowed
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isFalse()
+ }
+
+ @Test
+ fun testQueryingEntryReorderingButNotReportingReorderSuppressedDoesNotInvalidate() =
+ testScope.runTest {
+ // GIVEN visual stability is being maintained b/c panel is expanded
+ setPulsing(false)
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isFalse()
+
+ // WHEN the panel isn't expanded anymore
+ setPanelExpanded(false)
+
+ // THEN invalidate is not called because we were not told that an entry reorder was
+ // suppressed
+ verifyStabilityManagerWasInvalidated(never())
+ }
+
+ @Test
+ fun testHeadsUp_allowedToChangeGroupAndSection() =
+ testScope.runTest {
+ // GIVEN group + section changes disallowed
+ setFullyDozed(false)
+ setSleepy(false)
+ setPanelExpanded(true)
+ setPulsing(true)
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isFalse()
+
+ // GIVEN mEntry is a HUN
+ headsUpRepository.setHeadsUpKeys(entry.key)
+
+ // THEN group + section changes are allowed
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+
+ // BUT pruning the group for which this is the summary would still NOT be allowed.
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isFalse()
+ }
+
+ @Test
+ fun everyChangeAllowed_onReorderingEnabled_legacy() =
+ testScope.runTest {
+ assumeFalse(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // THEN
+ assertThat(notifStabilityManager.isEveryChangeAllowed()).isTrue()
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isTrue()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun everyChangeAllowed_noActiveHeadsUpGroup_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - empty heads-up-group keys
+ underTest.setHeadsUpGroupKeys(setOf())
+
+ // THEN
+ assertThat(notifStabilityManager.isEveryChangeAllowed()).isTrue()
+ assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isGroupPruneAllowed(groupEntry)).isTrue()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(entry)).isTrue()
+ }
+
+ @Test
+ fun everyChangeDisallowed_activeHeadsUpGroup_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ underTest.setHeadsUpGroupKeys(setOf("heads_up_group_key"))
+
+ // THEN
+ assertThat(notifStabilityManager.isEveryChangeAllowed()).isFalse()
+ }
+
+ @Test
+ fun nonHeadsUpGroup_changesAllowed_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ val headsUpGroupKey = "heads_up_group_key"
+ underTest.setHeadsUpGroupKeys(setOf(headsUpGroupKey))
+ headsUpRepository.setHeadsUpKeys(headsUpGroupKey)
+
+ // GIVEN - HUN Group Summary
+ val nonHeadsUpGroupSummary: NotificationEntry = mock()
+ whenever(nonHeadsUpGroupSummary.key).thenReturn("non_heads_up_group_key")
+ whenever(nonHeadsUpGroupSummary.isSummaryWithChildren).thenReturn(true)
+ val nonHeadsUpGroupEntry: GroupEntry = mock()
+ whenever(nonHeadsUpGroupEntry.summary).thenReturn(nonHeadsUpGroupSummary)
+ whenever(nonHeadsUpGroupEntry.representativeEntry).thenReturn(nonHeadsUpGroupSummary)
+
+ // THEN
+ assertThat(notifStabilityManager.isGroupPruneAllowed(nonHeadsUpGroupEntry)).isTrue()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(nonHeadsUpGroupEntry))
+ .isTrue()
+ }
+
+ @Test
+ fun headsUpGroup_changesDisallowed_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ val headsUpGroupKey = "heads_up_group_key"
+ underTest.setHeadsUpGroupKeys(setOf(headsUpGroupKey))
+ headsUpRepository.setHeadsUpKeys(headsUpGroupKey)
+
+ // GIVEN - HUN Group
+ val headsUpGroupSummary: NotificationEntry = mock()
+ whenever(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false)
+ whenever(headsUpGroupSummary.key).thenReturn(headsUpGroupKey)
+ whenever(headsUpGroupSummary.isSummaryWithChildren).thenReturn(true)
+
+ val headsUpGroupEntry: GroupEntry = mock()
+ whenever(headsUpGroupEntry.summary).thenReturn(headsUpGroupSummary)
+ whenever(headsUpGroupEntry.representativeEntry).thenReturn(headsUpGroupSummary)
+
+ whenever(headsUpGroupSummary.parent).thenReturn(headsUpGroupEntry)
+
+ // GIVEN - HUN is in visible location
+ whenever(visibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary))
+ .thenReturn(true)
+
+ // THEN
+ assertThat(notifStabilityManager.isGroupPruneAllowed(headsUpGroupEntry)).isFalse()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(headsUpGroupEntry)).isFalse()
+ }
+
+ @Test
+ fun headsUpGroupSummaries_changesDisallowed_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ val headsUpGroupKey = "heads_up_group_key"
+ underTest.setHeadsUpGroupKeys(setOf(headsUpGroupKey))
+ headsUpRepository.setHeadsUpKeys(headsUpGroupKey)
+
+ // GIVEN - HUN Group
+ val headsUpGroupSummary: NotificationEntry = mock()
+ whenever(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false)
+ whenever(headsUpGroupSummary.key).thenReturn(headsUpGroupKey)
+ whenever(headsUpGroupSummary.isSummaryWithChildren).thenReturn(true)
+
+ val headsUpGroupEntry: GroupEntry = mock()
+ whenever(headsUpGroupEntry.summary).thenReturn(headsUpGroupSummary)
+ whenever(headsUpGroupEntry.representativeEntry).thenReturn(headsUpGroupSummary)
+
+ whenever(headsUpGroupSummary.parent).thenReturn(headsUpGroupEntry)
+
+ // GIVEN - HUN is in visible location
+ whenever(visibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary))
+ .thenReturn(true)
+
+ // THEN
+ assertThat(notifStabilityManager.isGroupChangeAllowed(headsUpGroupSummary)).isFalse()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(headsUpGroupSummary))
+ .isFalse()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(headsUpGroupSummary)).isFalse()
+ }
+
+ @Test
+ fun notificationInNonHUNGroup_changesAllowed_onReorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ val headsUpGroupKey = "heads_up_group_key"
+ underTest.setHeadsUpGroupKeys(setOf(headsUpGroupKey))
+ headsUpRepository.setHeadsUpKeys(headsUpGroupKey)
+
+ // GIVEN - non HUN parent Group Summary
+ val groupSummary: NotificationEntry = mock()
+ whenever(groupSummary.key).thenReturn("non_heads_up_group_key")
+ whenever(groupSummary.isSummaryWithChildren).thenReturn(true)
+
+ val nonHeadsUpGroupEntry: GroupEntry = mock()
+ whenever(nonHeadsUpGroupEntry.summary).thenReturn(groupSummary)
+ whenever(nonHeadsUpGroupEntry.representativeEntry).thenReturn(groupSummary)
+
+ // GIVEN - child entry in a non heads-up group.
+ val childEntry: NotificationEntry = mock()
+ whenever(childEntry.rowIsChildInGroup()).thenReturn(true)
+ whenever(childEntry.parent).thenReturn(nonHeadsUpGroupEntry)
+ whenever(childEntry.parent).thenReturn(nonHeadsUpGroupEntry)
+
+ // THEN
+ assertThat(notifStabilityManager.isGroupChangeAllowed(childEntry)).isTrue()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(childEntry)).isTrue()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(nonHeadsUpGroupEntry))
+ .isTrue()
+ }
+
+ @Test
+ fun notificationInHUNGroup_changesDisallowed_reorderingEnabled() =
+ testScope.runTest {
+ assumeTrue(StabilizeHeadsUpGroup.isEnabled)
+ // GIVEN - reordering is allowed.
+ setPulsing(false)
+ setPanelExpanded(false)
+
+ // GIVEN - there is a group heads-up.
+ val headsUpGroupKey = "heads_up_group_key"
+ underTest.setHeadsUpGroupKeys(setOf(headsUpGroupKey))
+ headsUpRepository.setHeadsUpKeys(headsUpGroupKey)
+
+ // GIVEN - HUN Group Summary
+ val headsUpGroupSummary: NotificationEntry = mock()
+ whenever(headsUpGroupSummary.rowIsChildInGroup()).thenReturn(false)
+ whenever(headsUpGroupSummary.key).thenReturn(headsUpGroupKey)
+ whenever(headsUpGroupSummary.isSummaryWithChildren).thenReturn(true)
+
+ val nonHeadsUpGroupEntry: GroupEntry = mock()
+ whenever(nonHeadsUpGroupEntry.summary).thenReturn(headsUpGroupSummary)
+ whenever(nonHeadsUpGroupEntry.representativeEntry).thenReturn(headsUpGroupSummary)
+
+ // GIVEN - child entry in a non heads-up group.
+ val childEntry: NotificationEntry =
+ mock<NotificationEntry>().apply { whenever(key).thenReturn("child") }
+ whenever(childEntry.rowIsChildInGroup()).thenReturn(true)
+ whenever(childEntry.parent).thenReturn(nonHeadsUpGroupEntry)
+
+ // GIVEN - HUN is in visible location
+ whenever(visibilityLocationProvider.isInVisibleLocation(headsUpGroupSummary))
+ .thenReturn(true)
+
+ // THEN
+ assertThat(notifStabilityManager.isGroupChangeAllowed(childEntry)).isFalse()
+ assertThat(notifStabilityManager.isSectionChangeAllowed(childEntry)).isFalse()
+ assertThat(notifStabilityManager.isEntryReorderingAllowed(childEntry)).isFalse()
+ }
+
+ private fun verifyStabilityManagerWasInvalidated(mode: VerificationMode) {
+ verify(invalidateListener, mode).onPluggableInvalidated(eq(notifStabilityManager), any())
+ }
+
+ private fun setActivityLaunching(activityLaunching: Boolean) {
+ kosmos.shadeAnimationInteractor.setIsLaunchingActivity(activityLaunching)
+ testScope.testScheduler.runCurrent()
+ }
+
+ private fun setPanelCollapsing(collapsing: Boolean) {
+ shadeRepository.setLegacyIsClosing(collapsing)
+ testScope.testScheduler.runCurrent()
+ }
+
+ private fun setCommunalShowing(isShowing: Boolean) {
+ val showingFlow =
+ MutableStateFlow<ObservableTransitionState>(
+ ObservableTransitionState.Idle(
+ if (isShowing) CommunalScenes.Communal else CommunalScenes.Blank
+ )
+ )
+ kosmos.communalSceneInteractor.setTransitionState(showingFlow)
+ testScope.testScheduler.runCurrent()
+ }
+
+ private fun setQsExpanded(isExpanded: Boolean) {
+ kosmos.shadeRepository.setQsExpansion(if (isExpanded) 1.0f else 0.0f)
+ testScope.testScheduler.runCurrent()
+ }
+
+ private fun setPulsing(pulsing: Boolean) = statusBarStateListener.onPulsingChanged(pulsing)
+
+ private fun setFullyDozed(fullyDozed: Boolean) {
+ val dozeAmount = if (fullyDozed) 1f else 0f
+ statusBarStateListener.onDozeAmountChanged(dozeAmount, dozeAmount)
+ }
+
+ private fun setSleepy(sleepy: Boolean) {
+ if (sleepy) {
+ wakefulnessObserver.onFinishedGoingToSleep()
+ } else {
+ wakefulnessObserver.onStartedWakingUp()
+ }
+ }
+
+ private suspend fun setPanelExpanded(expanded: Boolean) =
+ setPanelExpandedAndLockscreenShowing(expanded, /* lockscreenShowing= */ 0.0f)
+
+ private suspend fun setLockscreenShowing(lockscreenShowing: Float) =
+ setPanelExpandedAndLockscreenShowing(/* panelExpanded= */ false, lockscreenShowing)
+
+ private suspend fun setPanelExpandedAndLockscreenShowing(
+ panelExpanded: Boolean,
+ lockscreenShowing: Float,
+ ) {
+ if (SceneContainerFlag.isEnabled) {
+ statusBarStateListener.onExpandedChanged(panelExpanded)
+ kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
+ makeLockscreenTransitionStep(lockscreenShowing),
+ /* validateStep = */ false,
+ )
+ } else {
+ statusBarStateListener.onExpandedChanged(panelExpanded || lockscreenShowing > 0.0f)
+ }
+ }
+
+ private fun makeLockscreenTransitionStep(value: Float): TransitionStep {
+ return when (value) {
+ 0.0f -> TransitionStep(KeyguardState.GONE)
+ 1.0f -> TransitionStep(KeyguardState.LOCKSCREEN)
+ else ->
+ TransitionStep(
+ KeyguardState.GONE,
+ KeyguardState.LOCKSCREEN,
+ value,
+ TransitionState.RUNNING,
+ )
+ }
+ }
+}
+
+private fun FakeHeadsUpNotificationRepository.setHeadsUpKeys(vararg keys: String) {
+ setNotifications(keys.map { FakeHeadsUpRowRepository(key = it) })
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimatorTest.kt
new file mode 100644
index 0000000..206eb89
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimatorTest.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification.headsup
+
+import android.platform.test.annotations.EnableFlags
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.res.R
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import org.junit.Before
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+class HeadsUpAnimatorTest : SysuiTestCase() {
+ @Before
+ fun setUp() {
+ context.getOrCreateTestableResources().apply {
+ this.addOverride(R.dimen.heads_up_appear_y_above_screen, TEST_Y_ABOVE_SCREEN)
+ }
+ }
+
+ @Test
+ fun getHeadsUpYTranslation_fromBottomTrue_usesBottomAndYAbove() {
+ val underTest = HeadsUpAnimator(context)
+ underTest.stackTopMargin = 30
+ underTest.headsUpAppearHeightBottom = 300
+
+ val yTranslation = underTest.getHeadsUpYTranslation(isHeadsUpFromBottom = true)
+
+ assertThat(yTranslation).isEqualTo(TEST_Y_ABOVE_SCREEN + 300)
+ }
+
+ @Test
+ fun getHeadsUpYTranslation_fromBottomFalse_usesTopMarginAndYAbove() {
+ val underTest = HeadsUpAnimator(context)
+ underTest.stackTopMargin = 30
+ underTest.headsUpAppearHeightBottom = 300
+
+ val yTranslation = underTest.getHeadsUpYTranslation(isHeadsUpFromBottom = false)
+
+ assertThat(yTranslation).isEqualTo(-30 - TEST_Y_ABOVE_SCREEN)
+ }
+
+ @Test
+ fun getHeadsUpYTranslation_resourcesUpdated() {
+ val underTest = HeadsUpAnimator(context)
+ underTest.stackTopMargin = 30
+ underTest.headsUpAppearHeightBottom = 300
+
+ val yTranslation = underTest.getHeadsUpYTranslation(isHeadsUpFromBottom = true)
+
+ assertThat(yTranslation).isEqualTo(TEST_Y_ABOVE_SCREEN + 300)
+
+ // WHEN the resource is updated
+ val newYAbove = 600
+ context.getOrCreateTestableResources().apply {
+ this.addOverride(R.dimen.heads_up_appear_y_above_screen, newYAbove)
+ }
+ underTest.updateResources(context)
+
+ // THEN HeadsUpAnimator knows about it
+ assertThat(underTest.getHeadsUpYTranslation(isHeadsUpFromBottom = true))
+ .isEqualTo(newYAbove + 300)
+ }
+
+ companion object {
+ private const val TEST_Y_ABOVE_SCREEN = 50
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
index 25ae13f..f060cae 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
@@ -21,6 +21,7 @@
import android.net.Uri
import android.os.UserHandle
import android.os.UserHandle.USER_ALL
+import android.service.notification.StatusBarNotification
import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -36,6 +37,7 @@
import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.statusbar.SmartReplyController
import com.android.systemui.statusbar.notification.ColorUpdateLogger
+import com.android.systemui.statusbar.notification.collection.EntryAdapter
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider
@@ -229,6 +231,10 @@
@Test
fun registerSettingsListener_forBubbles() {
controller.init(mock(NotificationEntry::class.java))
+ val entryAdapter = mock(EntryAdapter::class.java)
+ whenever(entryAdapter.sbn).thenReturn(mock(StatusBarNotification::class.java))
+ whenever(view.entryAdapter).thenReturn(entryAdapter)
+
val viewStateObserver = withArgCaptor {
verify(view).addOnAttachStateChangeListener(capture())
}
@@ -239,6 +245,9 @@
@Test
fun unregisterSettingsListener_forBubbles() {
controller.init(mock(NotificationEntry::class.java))
+ val entryAdapter = mock(EntryAdapter::class.java)
+ whenever(entryAdapter.sbn).thenReturn(mock(StatusBarNotification::class.java))
+ whenever(view.entryAdapter).thenReturn(entryAdapter)
val viewStateObserver = withArgCaptor {
verify(view).addOnAttachStateChangeListener(capture())
}
@@ -255,6 +264,7 @@
@Test
fun settingsListener_invalidUserId() {
+ whenever(view.entryAdapter).thenReturn(mock(EntryAdapter::class.java))
controller.mSettingsListener.onSettingChanged(BUBBLES_SETTING_URI, -1000, "1")
controller.mSettingsListener.onSettingChanged(BUBBLES_SETTING_URI, -1000, null)
@@ -265,6 +275,12 @@
fun settingsListener_validUserId() {
val childView: NotificationContentView = mock()
whenever(view.privateLayout).thenReturn(childView)
+ val entryAdapter = mock(EntryAdapter::class.java)
+ val sbn =
+ SbnBuilder().setNotification(Notification.Builder(mContext).build())
+ .setUser(UserHandle.of(view.entry.sbn.userId)).build()
+ whenever(entryAdapter.sbn).thenReturn(sbn)
+ whenever(view.entryAdapter).thenReturn(entryAdapter)
controller.mSettingsListener.onSettingChanged(
BUBBLES_SETTING_URI,
@@ -293,6 +309,9 @@
.thenReturn(
NotificationEntryBuilder().setSbn(sbn).setUser(UserHandle.of(USER_ALL)).build()
)
+ val entryAdapter = mock(EntryAdapter::class.java)
+ whenever(entryAdapter.sbn).thenReturn(sbn)
+ whenever(view.entryAdapter).thenReturn(entryAdapter)
controller.mSettingsListener.onSettingChanged(BUBBLES_SETTING_URI, 9, "1")
verify(childView).setBubblesEnabledForUser(true)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
index 979a1d0..fd49f60 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
@@ -79,6 +79,7 @@
mRow = spy(mNotificationTestHelper.createRow());
Notification notification = mRow.getEntry().getSbn().getNotification();
notification.contentIntent = mock(PendingIntent.class);
+ when(notification.contentIntent.isActivity()).thenReturn(true);
doReturn(true).when(mRow).startDragAndDrop(any(), any(), any(), anyInt());
mGroupRow = mNotificationTestHelper.createGroup(4);
when(mMenuRow.getLongpressMenuItem(any(Context.class))).thenReturn(mMenuItem);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
index 92ceb60..c376fad 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java
@@ -70,6 +70,8 @@
import com.android.systemui.statusbar.SmartReplyController;
import com.android.systemui.statusbar.notification.ColorUpdateLogger;
import com.android.systemui.statusbar.notification.ConversationNotificationProcessor;
+import com.android.systemui.statusbar.notification.collection.GroupEntry;
+import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
@@ -106,6 +108,7 @@
import org.mockito.ArgumentCaptor;
+import java.util.List;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
@@ -338,6 +341,46 @@
}
/**
+ * Returns an {@link GroupEntry} group with the given number of child
+ * notifications.
+ */
+ public GroupEntry createGroupEntry(int numChildren,
+ @Nullable List<NotificationEntry> additionalChildren) {
+ Notification summary = new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setGroupSummary(true)
+ .setGroup(GROUP_KEY)
+ .build();
+
+ NotificationEntry summaryEntry = new NotificationEntryBuilder()
+ .setPkg(PKG)
+ .setOpPkg(PKG)
+ .setId(mId++)
+ .setUid(UID)
+ .setInitialPid(2000)
+ .setNotification(summary)
+ .setParent(GroupEntry.ROOT_ENTRY)
+ .build();
+ GroupEntryBuilder groupEntry = new GroupEntryBuilder()
+ .setSummary(summaryEntry);
+
+ for (int i = 0; i < numChildren; i++) {
+ NotificationEntry child = new NotificationEntryBuilder()
+ .setParent(GroupEntry.ROOT_ENTRY)
+ .setNotification(new Notification.Builder(mContext, "")
+ .setSmallIcon(R.drawable.ic_person)
+ .setGroup(GROUP_KEY)
+ .build())
+ .build();
+ groupEntry.addChild(child);
+ }
+ for (NotificationEntry entry : additionalChildren) {
+ groupEntry.addChild(entry);
+ }
+ return groupEntry.build();
+ }
+
+ /**
* Returns an {@link ExpandableNotificationRow} group with the given number of child
* notifications.
*/
@@ -411,6 +454,23 @@
}
/**
+ * Returns an {@link NotificationEntry} that should be shown as a bubble and is part
+ * of a group of notifications.
+ */
+ public NotificationEntry createBubbleEntryInGroup() throws Exception {
+ Notification n = createNotification(false /* isGroupSummary */,
+ GROUP_KEY /* groupKey */,
+ makeBubbleMetadata(null /* deleteIntent */, false /* autoExpand */));
+ n.flags |= FLAG_BUBBLE;
+ NotificationEntry entry = generateEntry(n, PKG, UID, USER_HANDLE,
+ mDefaultInflationFlags, IMPORTANCE_HIGH);
+ modifyRanking(entry)
+ .setCanBubble(true)
+ .build();
+ return entry;
+ }
+
+ /**
* Returns an {@link ExpandableNotificationRow} that should be shown as a bubble and is part
* of a group of notifications.
*/
@@ -573,6 +633,41 @@
return mKeyguardBypassController;
}
+ private NotificationEntry generateEntry(
+ Notification notification,
+ String pkg,
+ int uid,
+ UserHandle userHandle,
+ @InflationFlag int extraInflationFlags,
+ int importance)
+ throws Exception {
+ final NotificationChannel channel =
+ new NotificationChannel(
+ notification.getChannelId(),
+ notification.getChannelId(),
+ importance);
+ channel.setBlockable(true);
+
+ NotificationEntry entry = new NotificationEntryBuilder()
+ .setPkg(pkg)
+ .setOpPkg(pkg)
+ .setId(mId++)
+ .setUid(uid)
+ .setInitialPid(2000)
+ .setNotification(notification)
+ .setUser(userHandle)
+ .setPostTime(System.currentTimeMillis())
+ .setChannel(channel)
+ .updateRanking(rankingBuilder -> rankingBuilder.setIsConversation(
+ notification.isStyle(Notification.MessagingStyle.class)
+ ))
+ .build();
+
+
+ return entry;
+ }
+
+
private ExpandableNotificationRow generateRow(
Notification notification,
String pkg,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/AmbientStateTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/AmbientStateTest.kt
index 92b8c3a..13da04e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/AmbientStateTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/AmbientStateTest.kt
@@ -24,6 +24,7 @@
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator
import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.notification.data.repository.HeadsUpRepository
import com.android.systemui.statusbar.notification.headsup.AvalancheController
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.util.mockito.mock
@@ -47,6 +48,7 @@
private val statusBarKeyguardViewManager = mock<StatusBarKeyguardViewManager>()
private val largeScreenShadeInterpolator = mock<LargeScreenShadeInterpolator>()
private val avalancheController = mock<AvalancheController>()
+ private val headsupRepository = mock<HeadsUpRepository>()
private lateinit var sut: AmbientState
@@ -72,6 +74,7 @@
bypassController,
statusBarKeyguardViewManager,
largeScreenShadeInterpolator,
+ headsupRepository,
avalancheController,
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
index 4b8a0c2..f7bbf98 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
@@ -29,6 +29,7 @@
import com.android.systemui.statusbar.LockscreenShadeTransitionController
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.notification.collection.EntryAdapter
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiForceExpanded
@@ -436,6 +437,9 @@
val row = mock(ExpandableNotificationRow::class.java)
val entry = mock(NotificationEntry::class.java)
whenever(entry.isStickyAndNotDemoted).thenReturn(isSticky)
+ val entryAdapter = mock(EntryAdapter::class.java)
+ whenever(entryAdapter.canPeek()).thenReturn(isSticky)
+ whenever(row.entryAdapter).thenReturn(entryAdapter)
val sbn = mock(StatusBarNotification::class.java)
whenever(entry.sbn).thenReturn(sbn)
whenever(row.entry).thenReturn(entry)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
index 33211d4..9545150 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
@@ -22,10 +22,13 @@
import com.android.systemui.statusbar.notification.RoundableState
import com.android.systemui.statusbar.notification.collection.EntryAdapter
import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.data.repository.HeadsUpRepository
import com.android.systemui.statusbar.notification.emptyshade.ui.view.EmptyShadeView
import com.android.systemui.statusbar.notification.footer.ui.view.FooterView
import com.android.systemui.statusbar.notification.footer.ui.view.FooterView.FooterViewState
import com.android.systemui.statusbar.notification.headsup.AvalancheController
+import com.android.systemui.statusbar.notification.headsup.HeadsUpAnimator
+import com.android.systemui.statusbar.notification.headsup.NotificationsHunSharedAnimationValues
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
@@ -54,13 +57,15 @@
private val avalancheController = mock<AvalancheController>()
private val hostView = FrameLayout(context)
- private val stackScrollAlgorithm = StackScrollAlgorithm(context, hostView)
+ private lateinit var headsUpAnimator: HeadsUpAnimator
+ private lateinit var stackScrollAlgorithm: StackScrollAlgorithm
private val notificationRow = mock<ExpandableNotificationRow>()
private val notificationEntry = mock<NotificationEntry>()
private val notificationEntryAdapter = mock<EntryAdapter>()
private val dumpManager = mock<DumpManager>()
private val mStatusBarKeyguardViewManager = mock<StatusBarKeyguardViewManager>()
private val notificationShelf = mock<NotificationShelf>()
+ private val headsUpRepository = mock<HeadsUpRepository>()
private val emptyShadeView =
EmptyShadeView(context, /* attrs= */ null).apply {
layout(/* l= */ 0, /* t= */ 0, /* r= */ 100, /* b= */ 100)
@@ -74,6 +79,7 @@
/* bypassController */ { false },
mStatusBarKeyguardViewManager,
largeScreenShadeInterpolator,
+ headsUpRepository,
avalancheController,
)
@@ -98,7 +104,10 @@
@JvmStatic
@Parameters(name = "{0}")
fun getParams(): List<FlagsParameterization> {
- return FlagsParameterization.allCombinationsOf().andSceneContainer()
+ return FlagsParameterization.allCombinationsOf(
+ NotificationsHunSharedAnimationValues.FLAG_NAME
+ )
+ .andSceneContainer()
}
}
@@ -120,6 +129,15 @@
ambientState.isSmallScreen = true
hostView.addView(notificationRow)
+
+ if (NotificationsHunSharedAnimationValues.isEnabled) {
+ headsUpAnimator = HeadsUpAnimator(context)
+ }
+ stackScrollAlgorithm = StackScrollAlgorithm(
+ context,
+ hostView,
+ if (::headsUpAnimator.isInitialized) headsUpAnimator else null,
+ )
}
private fun isTv(): Boolean {
@@ -400,7 +418,11 @@
ambientState.setLayoutMinHeight(2500) // Mock the height of shade
ambientState.stackY = 2500f // Scroll over the max translation
stackScrollAlgorithm.setIsExpanded(true) // Mark the shade open
- stackScrollAlgorithm.setHeadsUpAppearHeightBottom(bottomOfScreen.toInt())
+ if (NotificationsHunSharedAnimationValues.isEnabled) {
+ headsUpAnimator.headsUpAppearHeightBottom = bottomOfScreen.toInt()
+ } else {
+ stackScrollAlgorithm.setHeadsUpAppearHeightBottom(bottomOfScreen.toInt())
+ }
whenever(notificationRow.mustStayOnScreen()).thenReturn(true)
whenever(notificationRow.isHeadsUp).thenReturn(true)
whenever(notificationRow.isAboveShelf).thenReturn(true)
@@ -416,6 +438,9 @@
val topMargin = 100f
ambientState.maxHeadsUpTranslation = 2000f
ambientState.stackTopMargin = topMargin.toInt()
+ if (NotificationsHunSharedAnimationValues.isEnabled) {
+ headsUpAnimator.stackTopMargin = topMargin.toInt()
+ }
whenever(notificationRow.intrinsicHeight).thenReturn(100)
whenever(notificationRow.isHeadsUpAnimatingAway).thenReturn(true)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
index e7be20e..4a761917 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
@@ -16,12 +16,16 @@
package com.android.systemui.statusbar.notification.stack
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.AnimatorTestRule
import com.android.systemui.res.R
+import com.android.systemui.statusbar.notification.headsup.HeadsUpAnimator
+import com.android.systemui.statusbar.notification.headsup.NotificationsHunSharedAnimationValues
import com.android.systemui.statusbar.notification.row.ExpandableView
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent
import com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_HEADS_UP_APPEAR
@@ -49,10 +53,10 @@
@RunWith(AndroidJUnit4::class)
@RunWithLooper
class StackStateAnimatorTest : SysuiTestCase() {
-
@get:Rule val animatorTestRule = AnimatorTestRule(this)
private lateinit var stackStateAnimator: StackStateAnimator
+ private lateinit var headsUpAnimator: HeadsUpAnimator
private val stackScroller: NotificationStackScrollLayout = mock()
private val view: ExpandableView = mock()
private val viewState: ExpandableViewState =
@@ -69,11 +73,20 @@
whenever(stackScroller.context).thenReturn(context)
whenever(view.viewState).thenReturn(viewState)
- stackStateAnimator = StackStateAnimator(mContext, stackScroller)
+
+ if (NotificationsHunSharedAnimationValues.isEnabled) {
+ headsUpAnimator = HeadsUpAnimator(context)
+ }
+ stackStateAnimator = StackStateAnimator(
+ mContext,
+ stackScroller,
+ if (::headsUpAnimator.isInitialized) headsUpAnimator else null,
+ )
}
@Test
- fun startAnimationForEvents_headsUpFromTop_startsHeadsUpAppearAnim() {
+ @DisableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_headsUpFromTop_startsHeadsUpAppearAnim_flagOff() {
val topMargin = 50f
val expectedStartY = -topMargin - stackStateAnimator.mHeadsUpAppearStartAboveScreen
val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR)
@@ -94,7 +107,30 @@
}
@Test
- fun startAnimationForEvents_headsUpFromBottom_startsHeadsUpAppearAnim() {
+ @EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_headsUpFromTop_startsHeadsUpAppearAnim_flagOn() {
+ val topMargin = 50f
+ val expectedStartY = -topMargin - HEADS_UP_ABOVE_SCREEN
+ val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR)
+ headsUpAnimator.stackTopMargin = topMargin.toInt()
+
+ stackStateAnimator.startAnimationForEvents(arrayListOf(event), 0)
+
+ verify(view).setFinalActualHeight(VIEW_HEIGHT)
+ verify(view, description("should animate from the top")).translationY = expectedStartY
+ verify(view)
+ .performAddAnimation(
+ /* delay= */ 0L,
+ /* duration= */ ANIMATION_DURATION_HEADS_UP_APPEAR.toLong(),
+ /* isHeadsUpAppear= */ true,
+ /* isHeadsUpCycling= */ false,
+ /* onEndRunnable= */ null,
+ )
+ }
+
+ @Test
+ @DisableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_headsUpFromBottom_startsHeadsUpAppearAnim_flagOff() {
val screenHeight = 2000f
val expectedStartY = screenHeight + stackStateAnimator.mHeadsUpAppearStartAboveScreen
val event =
@@ -118,7 +154,63 @@
}
@Test
- fun startAnimationForEvents_startsHeadsUpDisappearAnim() {
+ @EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_headsUpFromBottom_startsHeadsUpAppearAnim_flagOn() {
+ val screenHeight = 2000f
+ val expectedStartY = screenHeight + HEADS_UP_ABOVE_SCREEN
+ val event =
+ AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR).apply {
+ headsUpFromBottom = true
+ }
+ headsUpAnimator.headsUpAppearHeightBottom = screenHeight.toInt()
+
+ stackStateAnimator.startAnimationForEvents(arrayListOf(event), 0)
+
+ verify(view).setFinalActualHeight(VIEW_HEIGHT)
+ verify(view, description("should animate from the bottom")).translationY = expectedStartY
+ verify(view)
+ .performAddAnimation(
+ /* delay= */ 0L,
+ /* duration= */ ANIMATION_DURATION_HEADS_UP_APPEAR.toLong(),
+ /* isHeadsUpAppear= */ true,
+ /* isHeadsUpCycling= */ false,
+ /* onEndRunnable= */ null,
+ )
+ }
+
+ @Test
+ @DisableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_startsHeadsUpDisappearAnim_flagOff() {
+ val disappearDuration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR.toLong()
+ val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR)
+ clearInvocations(view)
+ stackStateAnimator.startAnimationForEvents(arrayListOf(event), 0)
+
+ verify(view)
+ .performRemoveAnimation(
+ /* duration= */ eq(disappearDuration),
+ /* delay= */ eq(0L),
+ /* translationDirection= */ eq(0f),
+ /* isHeadsUpAnimation= */ eq(true),
+ /* isHeadsUpCycling= */ eq(false),
+ /* onStartedRunnable= */ any(),
+ /* onFinishedRunnable= */ runnableCaptor.capture(),
+ /* animationListener= */ any(),
+ /* clipSide= */ eq(ExpandableView.ClipSide.BOTTOM),
+ )
+
+ animatorTestRule.advanceTimeBy(disappearDuration) // move to the end of SSA animations
+ runnableCaptor.value.run() // execute the end runnable
+
+ verify(view, description("should be translated to the heads up appear start"))
+ .translationY = -stackStateAnimator.mHeadsUpAppearStartAboveScreen
+ verify(view, description("should be called at the end of the disappear animation"))
+ .removeFromTransientContainer()
+ }
+
+ @Test
+ @EnableFlags(NotificationsHunSharedAnimationValues.FLAG_NAME)
+ fun startAnimationForEvents_startsHeadsUpDisappearAnim_flagOn() {
val disappearDuration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR.toLong()
val event = AnimationEvent(view, AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR)
clearInvocations(view)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
index cef0824e..1797c4c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
@@ -71,7 +71,6 @@
private val connectivityRepository = FakeConnectivityRepository()
private val flags =
FakeFeatureFlagsClassic().also {
- it.set(Flags.NEW_NETWORK_SLICE_UI, false)
it.set(Flags.FILTER_PROVISIONING_NETWORK_SUBSCRIPTIONS, true)
}
@@ -133,7 +132,7 @@
iconsInteractor.isForceHidden,
repository,
context,
- MobileIconCarrierIdOverridesFake()
+ MobileIconCarrierIdOverridesFake(),
)
commonImpl =
@@ -142,7 +141,6 @@
interactor,
airplaneModeInteractor,
constants,
- flags,
testScope.backgroundScope,
)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
index 46777fa..3d37914 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
@@ -21,8 +21,6 @@
import androidx.test.filters.SmallTest
import com.android.settingslib.mobile.TelephonyIcons
import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FakeFeatureFlagsClassic
-import com.android.systemui.flags.Flags
import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
@@ -60,7 +58,6 @@
private lateinit var underTest: MobileIconsViewModel
private val interactor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock())
- private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) }
private lateinit var airplaneModeInteractor: AirplaneModeInteractor
@Mock private lateinit var constants: ConnectivityConstants
@@ -88,7 +85,6 @@
interactor,
airplaneModeInteractor,
constants,
- flags,
testScope.backgroundScope,
)
@@ -108,7 +104,7 @@
isOpportunistic = false,
carrierName = "Carrier 1",
profileClass = PROFILE_CLASS_UNSET,
- ),
+ )
)
assertThat(latest).isEqualTo(listOf(1))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModelTest.kt
index 20bdebd..d7bcf88 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModelTest.kt
@@ -22,8 +22,6 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.Icon
-import com.android.systemui.flags.Flags
-import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.runTest
@@ -53,7 +51,6 @@
@Before
fun setUp() {
- kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false)
kosmos.underTest.activateIn(testScope)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ClockTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ClockTest.kt
deleted file mode 100644
index 7549a7f..0000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ClockTest.kt
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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.systemui.statusbar.policy
-
-import android.testing.TestableLooper
-import android.view.View.MeasureSpec.UNSPECIFIED
-import android.view.View.MeasureSpec.makeMeasureSpec
-import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
-import android.widget.LinearLayout
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.systemui.SysuiTestCase
-import org.junit.Before
-import org.junit.runner.RunWith
-
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-@TestableLooper.RunWithLooper
-class ClockTest : SysuiTestCase() {
- private lateinit var clockView: Clock
-
- @Before
- fun setUp() {
- allowTestableLooperAsMainThread()
- TestableLooper.get(this).runWithLooper {
- val container = LinearLayout(context)
- val lp = LinearLayout.LayoutParams(1000, WRAP_CONTENT)
- container.layoutParams = lp
- clockView = Clock(context, null)
- container.addView(clockView)
- measureClock()
- }
- }
-
- @Test
- fun testWidthDoesNotDecrease_sameCharLength() {
- // GIVEN time is narrow
- clockView.text = ONE_3
- measureClock()
- val width1 = clockView.measuredWidth
-
- // WHEN the text changes to be wider characters
- clockView.text = ZERO_3
- measureClock()
- val width2 = clockView.measuredWidth
-
- // THEN the width should be wider (or equals when using monospace font)
- assertThat(width2).isAtLeast(width1)
- }
-
- @Test
- fun testWidthDoesNotDecrease_narrowerFont_sameNumberOfChars() {
- // GIVEN time is wide
- clockView.text = ZERO_3
- measureClock()
- val width1 = clockView.measuredWidth
-
- // WHEN the text changes to a narrower font
- clockView.text = ONE_3
- measureClock()
- val width2 = clockView.measuredWidth
-
- // THEN the width should not have decreased, and they should in fact be the same
- assertThat(width2).isEqualTo(width1)
- }
-
- @Test
- fun testWidthIncreases_whenCharsChanges() {
- // GIVEN wide 3-char text
- clockView.text = ZERO_3
- measureClock()
- val width1 = clockView.measuredWidth
-
- // WHEN text changes to 4-char wide text
- clockView.text = ZERO_4
- measureClock()
- val width2 = clockView.measuredWidth
-
- // THEN the text field is wider
- assertThat(width2).isGreaterThan(width1)
- }
-
- @Test
- fun testWidthDecreases_whenCharsChange_longToShort() {
- // GIVEN wide 4-char text
- clockView.text = ZERO_4
- measureClock()
- val width1 = clockView.measuredWidth
-
- // WHEN number of characters changes to a narrow 3-char text
- clockView.text = ONE_3
- measureClock()
- val width2 = clockView.measuredWidth
-
- // THEN the width can shrink, because number of chars changed
- assertThat(width2).isLessThan(width1)
- }
-
- private fun measureClock() {
- clockView.measure(
- makeMeasureSpec(0, UNSPECIFIED),
- makeMeasureSpec(0, UNSPECIFIED)
- )
- }
-}
-
-/**
- * In a non-monospace font, it is expected that "0:00" is wider than "1:11"
- */
-private const val ZERO_3 = "0:00"
-private const val ZERO_4 = "00:00"
-private const val ONE_3 = "1:11"
-private const val ONE_4 = "11:11"
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorTest.kt
index d0cabec..a303da0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorTest.kt
@@ -17,16 +17,17 @@
package com.android.systemui.volume.dialog.domain.interactor
import android.app.ActivityManager
-import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.accessibility.data.repository.accessibilityRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.fakeVolumeDialogController
import com.android.systemui.testKosmos
import com.android.systemui.volume.Events
+import com.android.systemui.volume.dialog.shared.model.VolumeDialogSafetyWarningModel
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel
import com.google.common.truth.Truth.assertThat
import kotlin.time.Duration.Companion.days
@@ -34,7 +35,6 @@
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,17 +42,18 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
-@TestableLooper.RunWithLooper
+@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
class VolumeDialogVisibilityInteractorTest : SysuiTestCase() {
- private val kosmos: Kosmos = testKosmos()
+ private val kosmos: Kosmos =
+ testKosmos().apply {
+ accessibilityRepository.setRecommendedTimeout(dialogTimeoutDuration)
+ volumeDialogStateInteractor.setHovering(false)
+ volumeDialogStateInteractor.setSafetyWarning(VolumeDialogSafetyWarningModel.Invisible)
+ }
- private lateinit var underTest: VolumeDialogVisibilityInteractor
-
- @Before
- fun setUp() {
- underTest = kosmos.volumeDialogVisibilityInteractor
- }
+ private val underTest: VolumeDialogVisibilityInteractor =
+ kosmos.volumeDialogVisibilityInteractor
@Test
fun testShowRequest_visible() =
@@ -92,6 +93,7 @@
runCurrent()
fakeVolumeDialogController.onDismissRequested(Events.DISMISS_REASON_SCREEN_OFF)
+ runCurrent()
assertThat(visibilityModel!!)
.isEqualTo(
@@ -105,7 +107,6 @@
with(kosmos) {
testScope.runTest {
runCurrent()
- underTest.resetDismissTimeout()
val visibilityModel by collectLastValue(underTest.dialogVisibility)
fakeVolumeDialogController.onShowRequested(
Events.SHOW_REASON_VOLUME_CHANGED,
@@ -126,7 +127,6 @@
with(kosmos) {
testScope.runTest {
runCurrent()
- underTest.resetDismissTimeout()
val visibilityModel by collectLastValue(underTest.dialogVisibility)
fakeVolumeDialogController.onShowRequested(
Events.SHOW_REASON_VOLUME_CHANGED,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSliderInputEventsInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSliderInputEventsInteractorTest.kt
index 4ed0d6e..14b61e1 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSliderInputEventsInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSliderInputEventsInteractorTest.kt
@@ -17,10 +17,10 @@
package com.android.systemui.volume.dialog.sliders.domain.interactor
import android.app.ActivityManager
-import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.accessibility.data.repository.accessibilityRepository
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.fakeVolumeDialogController
@@ -35,24 +35,19 @@
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Before
import org.junit.runner.RunWith
private val volumeDialogTimeout = 3.seconds
@SmallTest
@RunWith(AndroidJUnit4::class)
-@TestableLooper.RunWithLooper
class VolumeDialogSliderInputEventsInteractorTest : SysuiTestCase() {
- private val kosmos = testKosmos()
+ private val kosmos =
+ testKosmos().apply { accessibilityRepository.setRecommendedTimeout(volumeDialogTimeout) }
- private lateinit var underTest: VolumeDialogSliderInputEventsInteractor
-
- @Before
- fun setup() {
- underTest = kosmos.volumeDialogSliderInputEventsInteractor
- }
+ private val underTest: VolumeDialogSliderInputEventsInteractor =
+ kosmos.volumeDialogSliderInputEventsInteractor
@Test
fun inputEvents_resetDialogVisibilityTimeout() =
diff --git a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
index b2083c2..d7b4cba 100644
--- a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
+++ b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
@@ -85,6 +85,10 @@
throw new UnsupportedOperationException("Not implemented by " + getClass());
}
+ default SmartspaceView getLargeClockView(ViewGroup parent) {
+ throw new UnsupportedOperationException("Not implemented by " + getClass());
+ }
+
/**
* As the smartspace view becomes available, allow listeners to receive an event.
*/
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockLogger.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockLogger.kt
index 3ed321e..02a3902 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockLogger.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockLogger.kt
@@ -16,7 +16,9 @@
package com.android.systemui.plugins.clocks
+import android.graphics.Rect
import android.view.View
+import android.view.View.MeasureSpec
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.core.LogcatOnlyMessageBuffer
import com.android.systemui.log.core.Logger
@@ -46,12 +48,21 @@
}
}
- fun onMeasure() {
- d("onMeasure()")
+ fun onMeasure(widthSpec: Int, heightSpec: Int) {
+ d({ "onMeasure(${getSpecText(int1)}, ${getSpecText(int2)})" }) {
+ int1 = widthSpec
+ int2 = heightSpec
+ }
}
- fun onLayout() {
- d("onLayout()")
+ fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+ d({ "onLayout($bool1, ${Rect(int1, int2, long1.toInt(), long2.toInt())})" }) {
+ bool1 = changed
+ int1 = left
+ int2 = top
+ long1 = right.toLong()
+ long2 = bottom.toLong()
+ }
}
fun onDraw() {
@@ -90,8 +101,8 @@
}
}
- fun addView(child: View) {
- d({ "addView($str1 @$int1)" }) {
+ fun onViewAdded(child: View) {
+ d({ "onViewAdded($str1 @$int1)" }) {
str1 = child::class.simpleName!!
int1 = child.id
}
@@ -133,6 +144,20 @@
}
@JvmStatic
+ fun getSpecText(spec: Int): String {
+ val size = MeasureSpec.getSize(spec)
+ val mode = MeasureSpec.getMode(spec)
+ val modeText =
+ when (mode) {
+ MeasureSpec.EXACTLY -> "EXACTLY"
+ MeasureSpec.AT_MOST -> "AT MOST"
+ MeasureSpec.UNSPECIFIED -> "UNSPECIFIED"
+ else -> "$mode"
+ }
+ return "($size, $modeText)"
+ }
+
+ @JvmStatic
fun escapeTime(timeStr: String?): String? {
return timeStr?.replace("\n", "\\n")
}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockPickerConfig.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockPickerConfig.kt
index 6e4dc14..0cbc30d 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockPickerConfig.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockPickerConfig.kt
@@ -34,6 +34,9 @@
/** Font axes that can be modified on this clock */
val axes: List<ClockFontAxis> = listOf(),
+
+ /** List of font presets for this clock. Can be assigned directly. */
+ val axisPresets: List<List<ClockFontAxisSetting>> = listOf(),
)
/** Represents an Axis that can be modified */
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
index 56176cf..d197cdb7 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java
@@ -42,7 +42,7 @@
@DependsOn(target = Icon.class)
@DependsOn(target = State.class)
public interface QSTile {
- int VERSION = 4;
+ int VERSION = 5;
String getTileSpec();
@@ -78,6 +78,7 @@
void longClick(@Nullable Expandable expandable);
void userSwitch(int currentUser);
+ int getCurrentTileUser();
/**
* @deprecated not needed as {@link com.android.internal.logging.UiEvent} will use
@@ -150,6 +151,8 @@
return null;
}
+ boolean isDestroyed();
+
@ProvidesInterface(version = Callback.VERSION)
interface Callback {
static final int VERSION = 2;
diff --git a/packages/SystemUI/pods/Android.bp b/packages/SystemUI/pods/Android.bp
index 588a074..fba8962 100644
--- a/packages/SystemUI/pods/Android.bp
+++ b/packages/SystemUI/pods/Android.bp
@@ -26,7 +26,12 @@
libs: [
"jsr330",
],
+ lint: {
+ extra_check_modules: ["SystemUILintChecker"],
+ warning_checks: ["MissingApacheLicenseDetector"],
+ },
kotlincflags: [
+ "-Xexplicit-api=strict",
"-Xjvm-default=all",
],
defaults_visibility: [":__subpackages__"],
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/RetailModeModule.kt b/packages/SystemUI/pods/com/android/systemui/retail/RetailModeModule.kt
index c20e368..fe78bb3 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/RetailModeModule.kt
+++ b/packages/SystemUI/pods/com/android/systemui/retail/RetailModeModule.kt
@@ -24,11 +24,15 @@
import dagger.Module
@Module
-abstract class RetailModeModule {
+public abstract class RetailModeModule {
@Binds
- abstract fun bindsRetailModeRepository(impl: RetailModeSettingsRepository): RetailModeRepository
+ public abstract fun bindsRetailModeRepository(
+ impl: RetailModeSettingsRepository
+ ): RetailModeRepository
@Binds
- abstract fun bindsRetailModeInteractor(impl: RetailModeInteractorImpl): RetailModeInteractor
+ public abstract fun bindsRetailModeInteractor(
+ impl: RetailModeInteractorImpl
+ ): RetailModeInteractor
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/data/repository/RetailModeRepository.kt b/packages/SystemUI/pods/com/android/systemui/retail/data/repository/RetailModeRepository.kt
index c9eac25..4fd6985 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/data/repository/RetailModeRepository.kt
+++ b/packages/SystemUI/pods/com/android/systemui/retail/data/repository/RetailModeRepository.kt
@@ -19,11 +19,11 @@
import kotlinx.coroutines.flow.StateFlow
/** Repository to track if the device is in Retail mode */
-interface RetailModeRepository {
+public interface RetailModeRepository {
/** Flow of whether the device is currently in retail mode. */
- val retailMode: StateFlow<Boolean>
+ public val retailMode: StateFlow<Boolean>
/** Last value of whether the device is in retail mode. */
- val inRetailMode: Boolean
+ public val inRetailMode: Boolean
get() = retailMode.value
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/data/repository/impl/RetailModeSettingsRepository.kt b/packages/SystemUI/pods/com/android/systemui/retail/data/repository/impl/RetailModeSettingsRepository.kt
index 8955263..7296835 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/data/repository/impl/RetailModeSettingsRepository.kt
+++ b/packages/SystemUI/pods/com/android/systemui/retail/data/repository/impl/RetailModeSettingsRepository.kt
@@ -38,17 +38,17 @@
/**
* Tracks [Settings.Global.DEVICE_DEMO_MODE].
*
- * @see UserManager.isDeviceInDemoMode
+ * @see android.os.UserManager.isDeviceInDemoMode
*/
@SysUISingleton
-class RetailModeSettingsRepository
+public class RetailModeSettingsRepository
@Inject
constructor(
globalSettings: GlobalSettings,
@Background backgroundDispatcher: CoroutineDispatcher,
@Application scope: CoroutineScope,
) : RetailModeRepository {
- override val retailMode =
+ override val retailMode: StateFlow<Boolean> =
conflatedCallbackFlow {
val observer =
object : ContentObserver(null) {
@@ -66,7 +66,7 @@
.flowOn(backgroundDispatcher)
.stateIn(scope, SharingStarted.Eagerly, false)
- companion object {
+ public companion object {
private const val RETAIL_MODE_SETTING = Settings.Global.DEVICE_DEMO_MODE
}
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/RetailModeInteractor.kt b/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/RetailModeInteractor.kt
index 748e34d..3e44f8d 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/RetailModeInteractor.kt
+++ b/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/RetailModeInteractor.kt
@@ -17,7 +17,7 @@
package com.android.systemui.retail.domain.interactor
/** Interactor to determine if the device is currently in retail mode */
-interface RetailModeInteractor {
+public interface RetailModeInteractor {
/** Whether the device is currently in retail mode */
- val isInRetailMode: Boolean
+ public val isInRetailMode: Boolean
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/impl/RetailModeInteractorImpl.kt b/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/impl/RetailModeInteractorImpl.kt
index 8dbe562..52b4bcc 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/impl/RetailModeInteractorImpl.kt
+++ b/packages/SystemUI/pods/com/android/systemui/retail/domain/interactor/impl/RetailModeInteractorImpl.kt
@@ -22,11 +22,9 @@
import javax.inject.Inject
@SysUISingleton
-class RetailModeInteractorImpl
+public class RetailModeInteractorImpl
@Inject
-constructor(
- private val repository: RetailModeRepository,
-) : RetailModeInteractor {
+constructor(private val repository: RetailModeRepository) : RetailModeInteractor {
override val isInRetailMode: Boolean
get() = repository.inRetailMode
}
diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt
index 597276a..a8d4f79 100644
--- a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt
+++ b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt
@@ -19,6 +19,7 @@
import android.content.ContentResolver
import android.database.ContentObserver
import android.net.Uri
+import android.provider.Settings
import android.provider.Settings.SettingNotFoundException
import androidx.annotation.AnyThread
import androidx.annotation.WorkerThread
@@ -28,6 +29,7 @@
import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
/**
* Used to interact with mainly with Settings.Global, but can also be used for Settings.System and
@@ -43,15 +45,15 @@
* This class also provides [.registerContentObserver] methods, normally found on [ContentResolver]
* instances, unifying setting related actions in one place.
*/
-interface SettingsProxy {
+public interface SettingsProxy {
/** Returns the [ContentResolver] this instance was constructed with. */
- fun getContentResolver(): ContentResolver
+ public fun getContentResolver(): ContentResolver
/** Returns the [CoroutineScope] that the async APIs will use. */
- val settingsScope: CoroutineScope
+ public val settingsScope: CoroutineScope
@OptIn(ExperimentalStdlibApi::class)
- suspend fun executeOnSettingsScopeDispatcher(name: String, block: () -> Unit) {
+ public suspend fun executeOnSettingsScopeDispatcher(name: String, block: () -> Unit) {
val settingsDispatcher = settingsScope.coroutineContext[CoroutineDispatcher]
if (
settingsDispatcher != null &&
@@ -70,7 +72,7 @@
* @param name to look up in the table
* @return the corresponding content URI, or null if not present
*/
- @AnyThread fun getUriFor(name: String): Uri
+ @AnyThread public fun getUriFor(name: String): Uri
/**
* Registers listener for a given content observer <b>while blocking the current thread</b>.
@@ -80,7 +82,7 @@
* [registerContentObserverAsync] instead.
*/
@WorkerThread
- fun registerContentObserverSync(name: String, settingsObserver: ContentObserver) {
+ public fun registerContentObserverSync(name: String, settingsObserver: ContentObserver) {
registerContentObserverSync(getUriFor(name), settingsObserver)
}
@@ -91,7 +93,7 @@
* registration happens on a worker thread. Caller may wrap the API in an async block if they
* wish to synchronize execution.
*/
- suspend fun registerContentObserver(name: String, settingsObserver: ContentObserver) {
+ public suspend fun registerContentObserver(name: String, settingsObserver: ContentObserver) {
executeOnSettingsScopeDispatcher("registerContentObserver-A") {
registerContentObserverSync(getUriFor(name), settingsObserver)
}
@@ -103,7 +105,7 @@
* API corresponding to [registerContentObserver] for Java usage.
*/
@AnyThread
- fun registerContentObserverAsync(name: String, settingsObserver: ContentObserver) =
+ public fun registerContentObserverAsync(name: String, settingsObserver: ContentObserver): Job =
settingsScope.launch("registerContentObserverAsync-A") {
registerContentObserverSync(getUriFor(name), settingsObserver)
}
@@ -116,11 +118,11 @@
* value.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
name: String,
settingsObserver: ContentObserver,
@WorkerThread registered: Runnable,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-B") {
registerContentObserverSync(getUriFor(name), settingsObserver)
registered.run()
@@ -133,8 +135,9 @@
* [registerContentObserverAsync] instead.
*/
@WorkerThread
- fun registerContentObserverSync(uri: Uri, settingsObserver: ContentObserver) =
+ public fun registerContentObserverSync(uri: Uri, settingsObserver: ContentObserver) {
registerContentObserverSync(uri, false, settingsObserver)
+ }
/**
* Convenience wrapper around [ContentResolver.registerContentObserver].'
@@ -143,7 +146,7 @@
* registration happens on a worker thread. Caller may wrap the API in an async block if they
* wish to synchronize execution.
*/
- suspend fun registerContentObserver(uri: Uri, settingsObserver: ContentObserver) {
+ public suspend fun registerContentObserver(uri: Uri, settingsObserver: ContentObserver) {
executeOnSettingsScopeDispatcher("registerContentObserver-B") {
registerContentObserverSync(uri, settingsObserver)
}
@@ -155,7 +158,7 @@
* API corresponding to [registerContentObserver] for Java usage.
*/
@AnyThread
- fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver) =
+ public fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver): Job =
settingsScope.launch("registerContentObserverAsync-C") {
registerContentObserverSync(uri, settingsObserver)
}
@@ -168,11 +171,11 @@
* value.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
uri: Uri,
settingsObserver: ContentObserver,
@WorkerThread registered: Runnable,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-D") {
registerContentObserverSync(uri, settingsObserver)
registered.run()
@@ -184,11 +187,13 @@
* Implicitly calls [getUriFor] on the passed in name.
*/
@WorkerThread
- fun registerContentObserverSync(
+ public fun registerContentObserverSync(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
- ) = registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver)
+ ) {
+ registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver)
+ }
/**
* Convenience wrapper around [ContentResolver.registerContentObserver].'
@@ -197,7 +202,7 @@
* registration happens on a worker thread. Caller may wrap the API in an async block if they
* wish to synchronize execution.
*/
- suspend fun registerContentObserver(
+ public suspend fun registerContentObserver(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -213,11 +218,11 @@
* API corresponding to [registerContentObserver] for Java usage.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-E") {
registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver)
}
@@ -230,12 +235,12 @@
* value.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@WorkerThread registered: Runnable,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-F") {
registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver)
registered.run()
@@ -248,7 +253,7 @@
* [registerContentObserverAsync] instead.
*/
@WorkerThread
- fun registerContentObserverSync(
+ public fun registerContentObserverSync(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -266,7 +271,7 @@
* registration happens on a worker thread. Caller may wrap the API in an async block if they
* wish to synchronize execution.
*/
- suspend fun registerContentObserver(
+ public suspend fun registerContentObserver(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -282,11 +287,11 @@
* API corresponding to [registerContentObserver] for Java usage.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-G") {
registerContentObserverSync(uri, notifyForDescendants, settingsObserver)
}
@@ -299,12 +304,12 @@
* value.
*/
@AnyThread
- fun registerContentObserverAsync(
+ public fun registerContentObserverAsync(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@WorkerThread registered: Runnable,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-H") {
registerContentObserverSync(uri, notifyForDescendants, settingsObserver)
registered.run()
@@ -317,7 +322,7 @@
* [unregisterContentObserverAsync] instead.
*/
@WorkerThread
- fun unregisterContentObserverSync(settingsObserver: ContentObserver) {
+ public fun unregisterContentObserverSync(settingsObserver: ContentObserver) {
trace({ "SP#unregisterObserver" }) {
getContentResolver().unregisterContentObserver(settingsObserver)
}
@@ -330,7 +335,7 @@
* [ContentObserver] un-registration happens on a worker thread. Caller may wrap the API in an
* async block if they wish to synchronize execution.
*/
- suspend fun unregisterContentObserver(settingsObserver: ContentObserver) {
+ public suspend fun unregisterContentObserver(settingsObserver: ContentObserver) {
executeOnSettingsScopeDispatcher("unregisterContentObserver") {
unregisterContentObserverSync(settingsObserver)
}
@@ -343,7 +348,7 @@
* [ContentObserver] registration happens on a worker thread.
*/
@AnyThread
- fun unregisterContentObserverAsync(settingsObserver: ContentObserver) =
+ public fun unregisterContentObserverAsync(settingsObserver: ContentObserver): Job =
settingsScope.launch("unregisterContentObserverAsync") {
unregisterContentObserver(settingsObserver)
}
@@ -354,7 +359,7 @@
* @param name to look up in the table
* @return the corresponding value, or null if not present
*/
- fun getString(name: String): String?
+ public fun getString(name: String): String?
/**
* Store a name/value pair into the database.
@@ -363,7 +368,7 @@
* @param value to associate with the name
* @return true if the value was set, false on database errors
*/
- fun putString(name: String, value: String?): Boolean
+ public fun putString(name: String, value: String?): Boolean
/**
* Store a name/value pair into the database.
@@ -394,7 +399,7 @@
* @return true if the value was set, false on database errors.
* @see .resetToDefaults
*/
- fun putString(name: String, value: String?, tag: String?, makeDefault: Boolean): Boolean
+ public fun putString(name: String, value: String?, tag: String?, makeDefault: Boolean): Boolean
/**
* Convenience function for retrieving a single secure settings value as an integer. Note that
@@ -406,7 +411,7 @@
* @param default Value to return if the setting is not defined.
* @return The setting's current value, or default if it is not defined or not a valid integer.
*/
- fun getInt(name: String, default: Int): Int {
+ public fun getInt(name: String, default: Int): Int {
val v = getString(name)
return try {
v?.toInt() ?: default
@@ -429,7 +434,7 @@
* found or the setting value is not an integer.
*/
@Throws(SettingNotFoundException::class)
- fun getInt(name: String): Int {
+ public fun getInt(name: String): Int {
val v = getString(name) ?: throw SettingNotFoundException(name)
return try {
v.toInt()
@@ -448,7 +453,7 @@
* @param value The new value for the setting.
* @return true if the value was set, false on database errors
*/
- fun putInt(name: String, value: Int): Boolean {
+ public fun putInt(name: String, value: Int): Boolean {
return putString(name, value.toString())
}
@@ -462,7 +467,7 @@
* @param default Value to return if the setting is not defined.
* @return The setting's current value, or default if it is not defined or not a valid boolean.
*/
- fun getBool(name: String, default: Boolean): Boolean {
+ public fun getBool(name: String, default: Boolean): Boolean {
return getInt(name, if (default) 1 else 0) != 0
}
@@ -480,7 +485,7 @@
* found or the setting value is not a boolean.
*/
@Throws(SettingNotFoundException::class)
- fun getBool(name: String): Boolean {
+ public fun getBool(name: String): Boolean {
return getInt(name) != 0
}
@@ -494,7 +499,7 @@
* @param value The new value for the setting.
* @return true if the value was set, false on database errors
*/
- fun putBool(name: String, value: Boolean): Boolean {
+ public fun putBool(name: String, value: Boolean): Boolean {
return putInt(name, if (value) 1 else 0)
}
@@ -508,7 +513,7 @@
* @param def Value to return if the setting is not defined.
* @return The setting's current value, or 'def' if it is not defined or not a valid `long`.
*/
- fun getLong(name: String, def: Long): Long {
+ public fun getLong(name: String, def: Long): Long {
val valString = getString(name)
return parseLongOrUseDefault(valString, def)
}
@@ -527,7 +532,7 @@
* found or the setting value is not an integer.
*/
@Throws(SettingNotFoundException::class)
- fun getLong(name: String): Long {
+ public fun getLong(name: String): Long {
val valString = getString(name)
return parseLongOrThrow(name, valString)
}
@@ -542,7 +547,7 @@
* @param value The new value for the setting.
* @return true if the value was set, false on database errors
*/
- fun putLong(name: String, value: Long): Boolean {
+ public fun putLong(name: String, value: Long): Boolean {
return putString(name, value.toString())
}
@@ -556,7 +561,7 @@
* @param def Value to return if the setting is not defined.
* @return The setting's current value, or 'def' if it is not defined or not a valid float.
*/
- fun getFloat(name: String, def: Float): Float {
+ public fun getFloat(name: String, def: Float): Float {
val v = getString(name)
return parseFloat(v, def)
}
@@ -575,7 +580,7 @@
* found or the setting value is not a float.
*/
@Throws(SettingNotFoundException::class)
- fun getFloat(name: String): Float {
+ public fun getFloat(name: String): Float {
val v = getString(name)
return parseFloatOrThrow(name, v)
}
@@ -590,14 +595,14 @@
* @param value The new value for the setting.
* @return true if the value was set, false on database errors
*/
- fun putFloat(name: String, value: Float): Boolean {
+ public fun putFloat(name: String, value: Float): Boolean {
return putString(name, value.toString())
}
- companion object {
+ public companion object {
/** Convert a string to a long, or uses a default if the string is malformed or null */
@JvmStatic
- fun parseLongOrUseDefault(valString: String?, default: Long): Long {
+ public fun parseLongOrUseDefault(valString: String?, default: Long): Long {
val value: Long =
try {
valString?.toLong() ?: default
@@ -610,7 +615,7 @@
/** Convert a string to a long, or throws an exception if the string is malformed or null */
@JvmStatic
@Throws(SettingNotFoundException::class)
- fun parseLongOrThrow(name: String, valString: String?): Long {
+ public fun parseLongOrThrow(name: String, valString: String?): Long {
if (valString == null) {
throw SettingNotFoundException(name)
}
@@ -623,7 +628,7 @@
/** Convert a string to a float, or uses a default if the string is malformed or null */
@JvmStatic
- fun parseFloat(v: String?, def: Float): Float {
+ public fun parseFloat(v: String?, def: Float): Float {
return try {
v?.toFloat() ?: def
} catch (e: NumberFormatException) {
@@ -636,7 +641,7 @@
*/
@JvmStatic
@Throws(SettingNotFoundException::class)
- fun parseFloatOrThrow(name: String, v: String?): Float {
+ public fun parseFloatOrThrow(name: String, v: String?): Float {
if (v == null) {
throw SettingNotFoundException(name)
}
@@ -648,7 +653,7 @@
}
}
- fun interface CurrentUserIdProvider {
- @UserIdInt fun getUserId(): Int
+ public fun interface CurrentUserIdProvider {
+ @UserIdInt public fun getUserId(): Int
}
}
diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxyExt.kt b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxyExt.kt
index 36468144..60feaf1 100644
--- a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxyExt.kt
+++ b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxyExt.kt
@@ -17,6 +17,7 @@
package com.android.systemui.util.settings
+import android.annotation.SuppressLint
import android.annotation.UserIdInt
import android.database.ContentObserver
import com.android.systemui.Flags
@@ -25,10 +26,11 @@
import kotlinx.coroutines.flow.Flow
/** Kotlin extension functions for [SettingsProxy]. */
-object SettingsProxyExt {
+@SuppressLint("RegisterContentObserverSyncWarning")
+public object SettingsProxyExt {
/** Returns a flow of [Unit] that is invoked each time that content is updated. */
- fun UserSettingsProxy.observerFlow(
+ public fun UserSettingsProxy.observerFlow(
@UserIdInt userId: Int,
vararg names: String,
): Flow<Unit> {
@@ -59,9 +61,7 @@
}
/** Returns a flow of [Unit] that is invoked each time that content is updated. */
- fun SettingsProxy.observerFlow(
- vararg names: String,
- ): Flow<Unit> {
+ public fun SettingsProxy.observerFlow(vararg names: String): Flow<Unit> {
return conflatedCallbackFlow {
val observer =
object : ContentObserver(null) {
diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt b/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt
index 3ccac9e3..61c7f73 100644
--- a/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt
+++ b/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt
@@ -15,6 +15,7 @@
*/
package com.android.systemui.util.settings
+import android.annotation.SuppressLint
import android.annotation.UserIdInt
import android.annotation.WorkerThread
import android.content.ContentResolver
@@ -28,6 +29,7 @@
import com.android.systemui.util.settings.SettingsProxy.Companion.parseFloatOrThrow
import com.android.systemui.util.settings.SettingsProxy.Companion.parseLongOrThrow
import com.android.systemui.util.settings.SettingsProxy.Companion.parseLongOrUseDefault
+import kotlinx.coroutines.Job
/**
* Used to interact with per-user Settings.Secure and Settings.System settings (but not
@@ -42,11 +44,12 @@
* This class also provides [.registerContentObserver] methods, normally found on [ContentResolver]
* instances, unifying setting related actions in one place.
*/
-interface UserSettingsProxy : SettingsProxy {
- val currentUserProvider: SettingsProxy.CurrentUserIdProvider
+@SuppressLint("RegisterContentObserverSyncWarning")
+public interface UserSettingsProxy : SettingsProxy {
+ public val currentUserProvider: SettingsProxy.CurrentUserIdProvider
/** Returns the user id for the associated [ContentResolver]. */
- var userId: Int
+ public var userId: Int
get() = getContentResolver().userId
set(_) {
throw UnsupportedOperationException(
@@ -58,7 +61,7 @@
* Returns the actual current user handle when querying with the current user. Otherwise,
* returns the passed in user id.
*/
- fun getRealUserHandle(userHandle: Int): Int {
+ public fun getRealUserHandle(userHandle: Int): Int {
return if (userHandle != UserHandle.USER_CURRENT) {
userHandle
} else currentUserProvider.getUserId()
@@ -75,7 +78,7 @@
}
}
- override fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver) =
+ override fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver): Job =
settingsScope.launch("registerContentObserverAsync-A") {
registerContentObserverForUserSync(uri, settingsObserver, userId)
}
@@ -109,7 +112,7 @@
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverAsync-B") {
registerContentObserverForUserSync(uri, notifyForDescendants, settingsObserver, userId)
}
@@ -120,7 +123,7 @@
* Implicitly calls [getUriFor] on the passed in name.
*/
@WorkerThread
- fun registerContentObserverForUserSync(
+ public fun registerContentObserverForUserSync(
name: String,
settingsObserver: ContentObserver,
userHandle: Int,
@@ -135,7 +138,7 @@
* [ContentObserver] registration happens on a worker thread. Caller may wrap the API in an
* async block if they wish to synchronize execution.
*/
- suspend fun registerContentObserverForUser(
+ public suspend fun registerContentObserverForUser(
name: String,
settingsObserver: ContentObserver,
userHandle: Int,
@@ -150,11 +153,11 @@
*
* API corresponding to [registerContentObserverForUser] for Java usage.
*/
- fun registerContentObserverForUserAsync(
+ public fun registerContentObserverForUserAsync(
name: String,
settingsObserver: ContentObserver,
userHandle: Int,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverForUserAsync-A") {
try {
registerContentObserverForUserSync(getUriFor(name), settingsObserver, userHandle)
@@ -165,7 +168,7 @@
/** Convenience wrapper around [ContentResolver.registerContentObserver] */
@WorkerThread
- fun registerContentObserverForUserSync(
+ public fun registerContentObserverForUserSync(
uri: Uri,
settingsObserver: ContentObserver,
userHandle: Int,
@@ -180,7 +183,7 @@
* [ContentObserver] registration happens on a worker thread. Caller may wrap the API in an
* async block if they wish to synchronize execution.
*/
- suspend fun registerContentObserverForUser(
+ public suspend fun registerContentObserverForUser(
uri: Uri,
settingsObserver: ContentObserver,
userHandle: Int,
@@ -195,11 +198,11 @@
*
* API corresponding to [registerContentObserverForUser] for Java usage.
*/
- fun registerContentObserverForUserAsync(
+ public fun registerContentObserverForUserAsync(
uri: Uri,
settingsObserver: ContentObserver,
userHandle: Int,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverForUserAsync-B") {
try {
registerContentObserverForUserSync(uri, settingsObserver, userHandle)
@@ -215,12 +218,12 @@
* complete, the callback block is called on the <b>background thread</b> to allow for update of
* value.
*/
- fun registerContentObserverForUserAsync(
+ public fun registerContentObserverForUserAsync(
uri: Uri,
settingsObserver: ContentObserver,
userHandle: Int,
@WorkerThread registered: Runnable,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverForUserAsync-C") {
try {
registerContentObserverForUserSync(uri, settingsObserver, userHandle)
@@ -236,7 +239,7 @@
* Implicitly calls [getUriFor] on the passed in name.
*/
@WorkerThread
- fun registerContentObserverForUserSync(
+ public fun registerContentObserverForUserSync(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -257,7 +260,7 @@
* [ContentObserver] registration happens on a worker thread. Caller may wrap the API in an
* async block if they wish to synchronize execution.
*/
- suspend fun registerContentObserverForUser(
+ public suspend fun registerContentObserverForUser(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -278,7 +281,7 @@
*
* API corresponding to [registerContentObserverForUser] for Java usage.
*/
- fun registerContentObserverForUserAsync(
+ public fun registerContentObserverForUserAsync(
name: String,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -300,7 +303,7 @@
/** Convenience wrapper around [ContentResolver.registerContentObserver] */
@WorkerThread
- fun registerContentObserverForUserSync(
+ public fun registerContentObserverForUserSync(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -314,7 +317,6 @@
settingsObserver,
getRealUserHandle(userHandle),
)
- Unit
}
}
@@ -325,7 +327,7 @@
* [ContentObserver] registration happens on a worker thread. Caller may wrap the API in an
* async block if they wish to synchronize execution.
*/
- suspend fun registerContentObserverForUser(
+ public suspend fun registerContentObserverForUser(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
@@ -346,12 +348,12 @@
*
* API corresponding to [registerContentObserverForUser] for Java usage.
*/
- fun registerContentObserverForUserAsync(
+ public fun registerContentObserverForUserAsync(
uri: Uri,
notifyForDescendants: Boolean,
settingsObserver: ContentObserver,
userHandle: Int,
- ) =
+ ): Job =
settingsScope.launch("registerContentObserverForUserAsync-E") {
try {
registerContentObserverForUserSync(
@@ -376,7 +378,7 @@
}
/** See [getString]. */
- fun getStringForUser(name: String, userHandle: Int): String?
+ public fun getStringForUser(name: String, userHandle: Int): String?
/**
* Store a name/value pair into the database. Values written by this method will be overridden
@@ -386,17 +388,17 @@
* @param value to associate with the name
* @return true if the value was set, false on database errors
*/
- fun putString(name: String, value: String?, overrideableByRestore: Boolean): Boolean
+ public fun putString(name: String, value: String?, overrideableByRestore: Boolean): Boolean
override fun putString(name: String, value: String?): Boolean {
return putStringForUser(name, value, userId)
}
/** Similar implementation to [putString] for the specified [userHandle]. */
- fun putStringForUser(name: String, value: String?, userHandle: Int): Boolean
+ public fun putStringForUser(name: String, value: String?, userHandle: Int): Boolean
/** Similar implementation to [putString] for the specified [userHandle]. */
- fun putStringForUser(
+ public fun putStringForUser(
name: String,
value: String?,
tag: String?,
@@ -410,7 +412,7 @@
}
/** Similar implementation to [getInt] for the specified [userHandle]. */
- fun getIntForUser(name: String, default: Int, userHandle: Int): Int {
+ public fun getIntForUser(name: String, default: Int, userHandle: Int): Int {
val v = getStringForUser(name, userHandle)
return try {
v?.toInt() ?: default
@@ -420,11 +422,11 @@
}
@Throws(SettingNotFoundException::class)
- override fun getInt(name: String) = getIntForUser(name, userId)
+ override fun getInt(name: String): Int = getIntForUser(name, userId)
/** Similar implementation to [getInt] for the specified [userHandle]. */
@Throws(SettingNotFoundException::class)
- fun getIntForUser(name: String, userHandle: Int): Int {
+ public fun getIntForUser(name: String, userHandle: Int): Int {
val v = getStringForUser(name, userHandle) ?: throw SettingNotFoundException(name)
return try {
v.toInt()
@@ -433,24 +435,24 @@
}
}
- override fun putInt(name: String, value: Int) = putIntForUser(name, value, userId)
+ override fun putInt(name: String, value: Int): Boolean = putIntForUser(name, value, userId)
/** Similar implementation to [getInt] for the specified [userHandle]. */
- fun putIntForUser(name: String, value: Int, userHandle: Int) =
+ public fun putIntForUser(name: String, value: Int, userHandle: Int): Boolean =
putStringForUser(name, value.toString(), userHandle)
- override fun getBool(name: String, def: Boolean) = getBoolForUser(name, def, userId)
+ override fun getBool(name: String, def: Boolean): Boolean = getBoolForUser(name, def, userId)
/** Similar implementation to [getBool] for the specified [userHandle]. */
- fun getBoolForUser(name: String, def: Boolean, userHandle: Int) =
+ public fun getBoolForUser(name: String, def: Boolean, userHandle: Int): Boolean =
getIntForUser(name, if (def) 1 else 0, userHandle) != 0
@Throws(SettingNotFoundException::class)
- override fun getBool(name: String) = getBoolForUser(name, userId)
+ override fun getBool(name: String): Boolean = getBoolForUser(name, userId)
/** Similar implementation to [getBool] for the specified [userHandle]. */
@Throws(SettingNotFoundException::class)
- fun getBoolForUser(name: String, userHandle: Int): Boolean {
+ public fun getBoolForUser(name: String, userHandle: Int): Boolean {
return getIntForUser(name, userHandle) != 0
}
@@ -459,40 +461,40 @@
}
/** Similar implementation to [putBool] for the specified [userHandle]. */
- fun putBoolForUser(name: String, value: Boolean, userHandle: Int) =
+ public fun putBoolForUser(name: String, value: Boolean, userHandle: Int): Boolean =
putIntForUser(name, if (value) 1 else 0, userHandle)
/** Similar implementation to [getLong] for the specified [userHandle]. */
- fun getLongForUser(name: String, def: Long, userHandle: Int): Long {
+ public fun getLongForUser(name: String, def: Long, userHandle: Int): Long {
val valString = getStringForUser(name, userHandle)
return parseLongOrUseDefault(valString, def)
}
/** Similar implementation to [getLong] for the specified [userHandle]. */
@Throws(SettingNotFoundException::class)
- fun getLongForUser(name: String, userHandle: Int): Long {
+ public fun getLongForUser(name: String, userHandle: Int): Long {
val valString = getStringForUser(name, userHandle)
return parseLongOrThrow(name, valString)
}
/** Similar implementation to [putLong] for the specified [userHandle]. */
- fun putLongForUser(name: String, value: Long, userHandle: Int) =
+ public fun putLongForUser(name: String, value: Long, userHandle: Int): Boolean =
putStringForUser(name, value.toString(), userHandle)
/** Similar implementation to [getFloat] for the specified [userHandle]. */
- fun getFloatForUser(name: String, def: Float, userHandle: Int): Float {
+ public fun getFloatForUser(name: String, def: Float, userHandle: Int): Float {
val v = getStringForUser(name, userHandle)
return parseFloat(v, def)
}
/** Similar implementation to [getFloat] for the specified [userHandle]. */
@Throws(SettingNotFoundException::class)
- fun getFloatForUser(name: String, userHandle: Int): Float {
+ public fun getFloatForUser(name: String, userHandle: Int): Float {
val v = getStringForUser(name, userHandle)
return parseFloatOrThrow(name, v)
}
/** Similar implementation to [putFloat] for the specified [userHandle]. */
- fun putFloatForUser(name: String, value: Float, userHandle: Int) =
+ public fun putFloatForUser(name: String, value: Float, userHandle: Int): Boolean =
putStringForUser(name, value.toString(), userHandle)
}
diff --git a/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
deleted file mode 100644
index 3e6dd13..0000000
--- a/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
- <TextClock
- android:id="@+id/time"
- style="@style/widget_big"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_above="@id/date"
- android:letterSpacing="0.03"
- android:gravity="center_horizontal"
- android:format12Hour="@string/keyguard_widget_12_hours_format"
- android:format24Hour="@string/keyguard_widget_24_hours_format"
- />
-
- <TextClock
- android:id="@+id/date"
- style="@stype/widget_big"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:letterSpacing="0.03"
- android:gravity="center_horizontal"
- android:format12Hour="EEE, MMM d"
- android:format24Hour="EEE, MMM d"
- />
-</RelativeLayout>
diff --git a/packages/SystemUI/res-keyguard/layout/digital_clock.xml b/packages/SystemUI/res-keyguard/layout/digital_clock.xml
deleted file mode 100644
index 38ee081..0000000
--- a/packages/SystemUI/res-keyguard/layout/digital_clock.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2019 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.
- -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_alignParentTop="true">
- <TextClock
- android:id="@+id/lock_screen_clock"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:gravity="center_horizontal"
- android:paddingBottom="@dimen/widget_vertical_padding_clock"
- android:letterSpacing="0.03"
- android:textColor="?attr/wallpaperTextColor"
- android:singleLine="true"
- style="@style/widget_small_bold"
- android:format12Hour="@string/keyguard_widget_12_hours_format"
- android:format24Hour="@string/keyguard_widget_24_hours_format"
- android:elegantTextHeight="false"
- />
-</FrameLayout>
-
diff --git a/packages/SystemUI/res/drawable/notification_2025_guts_priority_button_bg.xml b/packages/SystemUI/res/drawable/notification_2025_guts_priority_button_bg.xml
new file mode 100644
index 0000000..1de8c2b
--- /dev/null
+++ b/packages/SystemUI/res/drawable/notification_2025_guts_priority_button_bg.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2025 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
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+ <solid
+ android:color="@color/notification_guts_priority_button_bg_fill" />
+
+ <stroke
+ android:width="1.5dp"
+ android:color="@color/notification_guts_priority_button_bg_stroke" />
+
+ <corners android:radius="16dp" />
+</shape>
diff --git a/packages/SystemUI/res/layout/combined_qs_header.xml b/packages/SystemUI/res/layout/combined_qs_header.xml
index 32407c6..5c06585 100644
--- a/packages/SystemUI/res/layout/combined_qs_header.xml
+++ b/packages/SystemUI/res/layout/combined_qs_header.xml
@@ -86,6 +86,7 @@
android:singleLine="true"
android:textDirection="locale"
android:textAppearance="@style/TextAppearance.QS.Status"
+ android:fontFeatureSettings="tnum"
android:transformPivotX="0dp"
android:transformPivotY="24dp"
android:scaleX="1"
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
index 4cb7591..d5f9d4c 100644
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
@@ -76,7 +76,7 @@
android:gravity="center_vertical"
android:ellipsize="marquee"
android:textDirection="locale"
- android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+ android:textAppearance="@style/TextAppearance.StatusBar.Carrier"
android:textColor="?attr/wallpaperTextColorSecondary"
android:singleLine="true"
systemui:showMissingSim="true"
diff --git a/packages/SystemUI/res/layout/notification_2025_info.xml b/packages/SystemUI/res/layout/notification_2025_info.xml
new file mode 100644
index 0000000..7b69166
--- /dev/null
+++ b/packages/SystemUI/res/layout/notification_2025_info.xml
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2025, 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.
+-->
+
+<!-- extends LinearLayout -->
+<com.android.systemui.statusbar.notification.row.NotificationInfo
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:id="@+id/notification_guts"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="true"
+ android:clipChildren="false"
+ android:clipToPadding="true"
+ android:orientation="vertical"
+ android:paddingStart="@*android:dimen/notification_2025_margin">
+
+ <!-- Package Info -->
+ <LinearLayout
+ android:id="@+id/header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clipChildren="false"
+ android:clipToPadding="true">
+ <ImageView
+ android:id="@+id/pkg_icon"
+ android:layout_width="@*android:dimen/notification_2025_icon_circle_size"
+ android:layout_height="@*android:dimen/notification_2025_icon_circle_size"
+ android:layout_marginTop="@*android:dimen/notification_2025_margin"
+ android:layout_marginEnd="@*android:dimen/notification_2025_margin" />
+ <LinearLayout
+ android:id="@+id/names"
+ android:layout_weight="1"
+ android:layout_width="0dp"
+ android:orientation="vertical"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@*android:dimen/notification_2025_margin"
+ android:minHeight="@*android:dimen/notification_2025_icon_circle_size">
+ <TextView
+ android:id="@+id/channel_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textDirection="locale"
+ style="@style/TextAppearance.NotificationImportanceChannel"/>
+ <TextView
+ android:id="@+id/group_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textDirection="locale"
+ android:ellipsize="end"
+ style="@style/TextAppearance.NotificationImportanceChannelGroup"/>
+ <TextView
+ android:id="@+id/pkg_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@style/TextAppearance.NotificationImportanceApp"
+ android:ellipsize="end"
+ android:textDirection="locale"
+ android:maxLines="1"/>
+ <TextView
+ android:id="@+id/delegate_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@style/TextAppearance.NotificationImportanceHeader"
+ android:ellipsize="end"
+ android:textDirection="locale"
+ android:text="@string/notification_delegate_header"
+ android:maxLines="1" />
+
+ </LinearLayout>
+
+ <!-- feedback for notificationassistantservice -->
+ <ImageButton
+ android:id="@+id/feedback"
+ android:layout_width="@dimen/notification_2025_guts_button_size"
+ android:layout_height="@dimen/notification_2025_guts_button_size"
+ android:visibility="gone"
+ android:background="@drawable/ripple_drawable"
+ android:contentDescription="@string/notification_guts_bundle_feedback"
+ android:src="@*android:drawable/ic_feedback"
+ android:paddingTop="@*android:dimen/notification_2025_margin"
+ android:tint="@androidprv:color/materialColorPrimary"/>
+
+ <!-- Optional link to app. Only appears if the channel is not disabled and the app
+ asked for it -->
+ <ImageButton
+ android:id="@+id/app_settings"
+ android:layout_width="@dimen/notification_2025_guts_button_size"
+ android:layout_height="@dimen/notification_2025_guts_button_size"
+ android:visibility="gone"
+ android:background="@drawable/ripple_drawable"
+ android:contentDescription="@string/notification_app_settings"
+ android:src="@drawable/ic_info"
+ android:paddingTop="@*android:dimen/notification_2025_margin"
+ android:tint="@androidprv:color/materialColorPrimary"/>
+
+ <!-- System notification settings -->
+ <ImageButton
+ android:id="@+id/info"
+ android:layout_width="@dimen/notification_2025_guts_button_size"
+ android:layout_height="@dimen/notification_2025_guts_button_size"
+ android:contentDescription="@string/notification_more_settings"
+ android:background="@drawable/ripple_drawable"
+ android:src="@drawable/ic_settings"
+ android:padding="@*android:dimen/notification_2025_margin"
+ android:tint="@androidprv:color/materialColorPrimary" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/inline_controls"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@*android:dimen/notification_2025_margin"
+ android:layout_marginTop="@*android:dimen/notification_2025_margin"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:orientation="vertical">
+
+ <!-- Non configurable app/channel text. appears instead of @+id/interruptiveness_settings-->
+ <TextView
+ android:id="@+id/non_configurable_text"
+ android:text="@string/notification_unblockable_desc"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@*android:style/TextAppearance.DeviceDefault.Notification" />
+
+ <!-- Non configurable app/channel text. appears instead of @+id/interruptiveness_settings-->
+ <TextView
+ android:id="@+id/non_configurable_call_text"
+ android:text="@string/notification_unblockable_call_desc"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@*android:style/TextAppearance.DeviceDefault.Notification" />
+
+ <!-- Non configurable multichannel text. appears instead of @+id/interruptiveness_settings-->
+ <TextView
+ android:id="@+id/non_configurable_multichannel_text"
+ android:text="@string/notification_multichannel_desc"
+ android:visibility="gone"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@*android:style/TextAppearance.DeviceDefault.Notification" />
+
+ <LinearLayout
+ android:id="@+id/interruptiveness_settings"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:orientation="vertical">
+ <com.android.systemui.statusbar.notification.row.ButtonLinearLayout
+ android:id="@+id/automatic"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingVertical="@dimen/notification_2025_importance_button_padding_vertical"
+ android:paddingHorizontal="@dimen/notification_2025_importance_button_padding_horizontal"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ android:focusable="true"
+ android:background="@drawable/notification_2025_guts_priority_button_bg"
+ android:orientation="horizontal"
+ android:visibility="gone">
+ <ImageView
+ android:id="@+id/automatic_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@*android:dimen/notification_2025_margin"
+ android:src="@drawable/ic_notifications_automatic"
+ android:background="@android:color/transparent"
+ android:tint="@color/notification_guts_priority_contents"
+ android:clickable="false"
+ android:focusable="false"/>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center"
+ >
+ <TextView
+ android:id="@+id/automatic_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:ellipsize="end"
+ android:maxLines="1"
+ android:clickable="false"
+ android:focusable="false"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceButton"
+ android:text="@string/notification_automatic_title"/>
+ <TextView
+ android:id="@+id/automatic_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/notification_importance_button_description_top_margin"
+ android:visibility="gone"
+ android:text="@string/notification_channel_summary_automatic"
+ android:clickable="false"
+ android:focusable="false"
+ android:ellipsize="end"
+ android:maxLines="2"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
+ </LinearLayout>
+ </com.android.systemui.statusbar.notification.row.ButtonLinearLayout>
+
+ <com.android.systemui.statusbar.notification.row.ButtonLinearLayout
+ android:id="@+id/alert"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingVertical="@dimen/notification_2025_importance_button_padding_vertical"
+ android:paddingHorizontal="@dimen/notification_2025_importance_button_padding_horizontal"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ android:focusable="true"
+ android:background="@drawable/notification_2025_guts_priority_button_bg"
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/alert_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@*android:dimen/notification_2025_margin"
+ android:src="@drawable/ic_notifications_alert"
+ android:background="@android:color/transparent"
+ android:tint="@color/notification_guts_priority_contents"
+ android:clickable="false"
+ android:focusable="false"/>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center"
+ >
+ <TextView
+ android:id="@+id/alert_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:ellipsize="end"
+ android:maxLines="1"
+ android:clickable="false"
+ android:focusable="false"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceButton"
+ android:text="@string/notification_alert_title"/>
+ <TextView
+ android:id="@+id/alert_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/notification_channel_summary_default"
+ android:clickable="false"
+ android:focusable="false"
+ android:ellipsize="end"
+ android:maxLines="2"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
+ </LinearLayout>
+ </com.android.systemui.statusbar.notification.row.ButtonLinearLayout>
+
+ <com.android.systemui.statusbar.notification.row.ButtonLinearLayout
+ android:id="@+id/silence"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/notification_importance_button_separation"
+ android:paddingVertical="@dimen/notification_2025_importance_button_padding_vertical"
+ android:paddingHorizontal="@dimen/notification_2025_importance_button_padding_horizontal"
+ android:gravity="center_vertical"
+ android:clickable="true"
+ android:focusable="true"
+ android:background="@drawable/notification_2025_guts_priority_button_bg"
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/silence_icon"
+ android:src="@drawable/ic_notifications_silence"
+ android:background="@android:color/transparent"
+ android:tint="@color/notification_guts_priority_contents"
+ android:layout_gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@*android:dimen/notification_2025_margin"
+ android:clickable="false"
+ android:focusable="false"/>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center"
+ >
+ <TextView
+ android:id="@+id/silence_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:maxLines="1"
+ android:clickable="false"
+ android:focusable="false"
+ android:layout_toEndOf="@id/silence_icon"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceButton"
+ android:text="@string/notification_silence_title"/>
+ <TextView
+ android:id="@+id/silence_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/notification_channel_summary_low"
+ android:clickable="false"
+ android:focusable="false"
+ android:ellipsize="end"
+ android:maxLines="2"
+ android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
+ </LinearLayout>
+ </com.android.systemui.statusbar.notification.row.ButtonLinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/bottom_buttons"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@*android:dimen/notification_2025_margin"
+ android:minHeight="@dimen/notification_2025_guts_button_size"
+ android:gravity="center_vertical"
+ >
+ <TextView
+ android:id="@+id/turn_off_notifications"
+ android:text="@string/inline_turn_off_notifications"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="32dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="@*android:dimen/notification_2025_margin"
+ android:gravity="center"
+ android:minWidth="@dimen/notification_2025_min_tap_target_size"
+ android:minHeight="@dimen/notification_2025_min_tap_target_size"
+ android:maxWidth="200dp"
+ style="@style/TextAppearance.NotificationInfo.Button"
+ android:textSize="@*android:dimen/notification_2025_action_text_size"/>
+ <TextView
+ android:id="@+id/done"
+ android:text="@string/inline_ok_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingBottom="@*android:dimen/notification_2025_margin"
+ android:gravity="center"
+ android:minWidth="@dimen/notification_2025_min_tap_target_size"
+ android:minHeight="@dimen/notification_2025_min_tap_target_size"
+ android:maxWidth="125dp"
+ style="@style/TextAppearance.NotificationInfo.Button"
+ android:textSize="@*android:dimen/notification_2025_action_text_size"/>
+ </LinearLayout>
+ </LinearLayout>
+</com.android.systemui.statusbar.notification.row.NotificationInfo>
diff --git a/packages/SystemUI/res/layout/volume_dialog_top_section.xml b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
index 4fc20e2..29f5248 100644
--- a/packages/SystemUI/res/layout/volume_dialog_top_section.xml
+++ b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
@@ -22,7 +22,6 @@
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
- android:layoutDirection="ltr"
android:paddingEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin"
app:layoutDescription="@xml/volume_dialog_ringer_drawer_motion_scene">
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index d9a28a6..d8e08fc 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth gekoppel."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-toestelikoon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik om toestelbesonderhede op te stel."</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Stel toestelbesonderhede op"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Sien alle toestelle"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Bind nuwe toestel saam"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batterypersentasie is onbekend."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Gekoppel aan <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Gekoppel aan <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Vou groep uit."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Maak app oop."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nie gekoppel nie."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Swerwing"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Gehoortoestelle"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Skakel tans aan …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan nie helderheid verstel nie omdat dit deur die topapp beheer word"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Outodraai"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Outodraai skerm"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ligging"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Verrigting van veelvuldige take"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gebruik verdeelde skerm met app aan die regterkant"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gebruik verdeelde skerm met app aan die linkerkant"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Gebruik volskerm"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Gebruik rekenaaraansig"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skakel oor na app regs of onder terwyl jy verdeelde skerm gebruik"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skakel oor na app links of bo terwyl jy verdeelde skerm gebruik"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tydens verdeelde skerm: verplaas ’n app van een skerm na ’n ander"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Bekyk onlangse apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Wissel apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klaar"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Volgende"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Probeer weer!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gaan terug"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swiep links of regs met drie vingers op jou raakpaneel"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index ba1c3ed..ea51f00 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ብሉቱዝ ተያይዟል።"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"የብሉቱዝ መሣሪያ አዶ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"የመሣሪያ ዝርዝርን ለማዋቀር ጠቅ ያድርጉ"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>። የመሣሪያ ዝርዝር ያዋቅሩ"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ሁሉንም መሣሪያዎች ይመልከቱ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"አዲስ መሣሪያ ያጣምሩ"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"የባትሪ መቶኛ አይታወቅም።"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"ከ<xliff:g id="BLUETOOTH">%s</xliff:g> ጋር ተገናኝቷል።"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"ከ<xliff:g id="CAST">%s</xliff:g> ጋር ተገናኝቷል።"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ቡድንን ዘርጋ።"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"መተግበሪያ ክፈት።"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"አልተገናኘም።"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"በማዛወር ላይ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ግቤት"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"መስሚያ አጋዥ መሣሪያዎች"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"በማብራት ላይ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ከላይ ባለው መተግበሪያ ቁጥጥር ላይ ስለሆነ ብሩህነትን ማስተካከል አልተቻለም"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"በራስ ሰር አሽከርክር"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ማያ ገጽን በራስ-አሽከርክር"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"አካባቢ"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ብዙ ተግባራትን በተመሳሳይ ጊዜ ማከናወን"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"መተግበሪያ በስተቀኝ ላይ ሆኖ የተከፈለ ማያ ገፅን ይጠቀሙ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"መተግበሪያ በስተግራ ላይ ሆኖ የተከፈለ ማያ ገፅን ይጠቀሙ"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ሙሉ ገፅ ዕይታን ይጠቀሙ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"የዴስክቶፕ ዕይታ ይጠቀሙ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"የተከፈለ ማያ ገጽን ሲጠቀሙ በቀኝ ወይም ከታች ወዳለ መተግበሪያ ይቀይሩ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"የተከፈለ ማያ ገጽን ሲጠቀሙ በቀኝ ወይም ከላይ ወዳለ መተግበሪያ ይቀይሩ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"በተከፈለ ማያ ገጽ ወቅት፡- መተግበሪያን ከአንዱ ወደ ሌላው ተካ"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"የቅርብ ጊዜ መተግበሪያዎችን አሳይ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"መተግበሪያዎችን ይቀያይሩ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ተከናውኗል"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ቀጣይ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"እንደገና ይሞክሩ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ወደኋላ ተመለስ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"የመዳሰሻ ሰሌዳዎ ላይ ሦስት ጣቶችን በመጠቀም ወደ ግራ ወይም ወደ ቀኝ ያንሸራትቱ"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 905183c..99c156b 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -255,6 +255,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"متصل بـ <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"تم الاتصال بـ <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"سيتم توسيع المجموعة."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"سيتم فتح التطبيق."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"غير متصل."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"التجوال"</string>
@@ -332,7 +336,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"الإدخال"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعات الأذن الطبية"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"جارٍ التفعيل…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"لا يمكن ضبط مستوى السطوع لأنّ التطبيق الأول يتحكّم فيه"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"التدوير التلقائي"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"التدوير التلقائي للشاشة"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"الموقع الجغرافي"</string>
@@ -586,7 +591,7 @@
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"سيتم بث كل المحتوى المعروض على شاشتك، لذا يُرجى توخي الحذر بشأن المعلومات الظاهرة، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور والمقاطع الصوتية والفيديوهات."</string>
<string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"سيتم بث كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات الظاهرة، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور والمقاطع الصوتية والفيديوهات."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"بث محتوى الشاشة"</string>
- <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"اختيار تطبيق لبث محتواه"</string>
+ <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"يُرجى اختيار تطبيق لبث محتواه"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"هل تريد بدء المشاركة؟"</string>
<string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"أثناء المشاركة أو التسجيل أو البثّ، يمكن لنظام Android الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
<string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"أثناء مشاركة محتوى تطبيق أو تسجيله أو بثّه، يمكن لنظام Android الوصول إلى كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
@@ -991,8 +996,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"إظهار رموز الإشعارات ذات الأولوية المنخفضة"</string>
<string name="other" msgid="429768510980739978">"غير ذلك"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"تبديل حجم المربّع"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"إزالة بطاقة"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"إضافة مربّع إلى الموضع الأخير"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"نقل بطاقة"</string>
@@ -1546,10 +1550,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"لعرض التطبيقات المستخدَمة مؤخرًا، مرِّر سريعًا للأعلى مع استمرار الضغط على لوحة اللمس باستخدام 3 أصابع"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"لعرض جميع التطبيقات، اضغط على مفتاح الإجراء في لوحة المفاتيح"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"إشعار مخفي"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"يُرجى فتح القفل لعرض المعلومات"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"يُرجى فتح القفل لعرض الرمز"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"التعليم السياقي"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"استخدِم لوحة اللمس للرجوع"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"مرِّر سريعًا لليمين أو لليسار باستخدام 3 أصابع. انقر للتعرّف على المزيد من الإيماءات."</string>
diff --git a/packages/SystemUI/res/values-ar/tiles_states_strings.xml b/packages/SystemUI/res/values-ar/tiles_states_strings.xml
index abb0d85..aac5a35 100644
--- a/packages/SystemUI/res/values-ar/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ar/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"متوقّفة"</item>
<item msgid="5908720590832378783">"مفعّلة"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"غير متوفّر"</item>
+ <item msgid="6641673879029894995">"غير مفعَّل"</item>
+ <item msgid="5806682401126108403">"مفعَّل"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 784dfee..17d24da 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ব্লুটুথ সংযোগ হ’ল।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ব্লুটুথ ডিভাইচৰ চিহ্ন"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ডিভাইচৰ সবিশেষ কনফিগাৰ কৰিবলৈ ক্লিক কৰক"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>। ডিভাইচৰ সবিশেষ কনফিগাৰ কৰক"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"আটাইবোৰ ডিভাইচ চাওক"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"নতুন ডিভাইচ পেয়াৰ কৰক"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"বেটাৰীৰ চাৰ্জৰ শতাংশ অজ্ঞাত।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>ৰ লগত সংযোগ কৰা হ’ল।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>ত সংযোগ হ’ল।"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"গোট বিস্তাৰ কৰক।"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"এপ্লিকেশ্বনটো খোলক।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"সংযোগ হৈ থকা নাই।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ৰ\'মিং"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ইনপুট"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"শ্ৰৱণ যন্ত্ৰ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"অন কৰি থকা হৈছে…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"উজ্জ্বলতা মিলাব নোৱাৰি কাৰণ সেয়া\n শীৰ্ষৰ এপটোৱে নিয়ন্ত্ৰণ কৰি আছে"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"স্বয়ং-ঘূৰ্ণন"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"স্বয়ং-ঘূৰ্ণন স্ক্ৰীন"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"অৱস্থান"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"মাল্টিটাস্কিং"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"সোঁফালে থকা এপ্টোৰ সৈতে বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰক"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"বাওঁফালে থকা এপ্টোৰ সৈতে বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰক"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"পূৰ্ণ স্ক্ৰীন ব্যৱহাৰ কৰক"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ডেস্কটপ ভিউ ব্যৱহাৰ কৰক"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰাৰ সময়ত সোঁফালে অথবা তলত থকা এপলৈ সলনি কৰক"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰাৰ সময়ত বাওঁফালে অথবা ওপৰত থকা এপলৈ সলনি কৰক"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"বিভাজিত স্ক্ৰীনৰ ব্যৱহাৰ কৰাৰ সময়ত: কোনো এপ্ এখন স্ক্ৰীনৰ পৰা আনখনলৈ নিয়ক"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"শেহতীয়া এপ্সমূহ চাওক"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"এপ্সমূহ সলনি কৰক"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"হ’ল"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"পৰৱৰ্তী"</string>
<string name="gesture_error_title" msgid="469064941635578511">"পুনৰ চেষ্টা কৰক!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"উভতি যাওক"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"আপোনাৰ টাচ্চপেডত তিনিটা আঙুলি ব্যৱহাৰ কৰি বাওঁফাললৈ বা সোঁফাললৈ ছোৱাইপ কৰক"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 20f3e37..a0eecd1 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth qoşulub."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth cihazı ikonası"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cihaz təfərrüatlarını konfiqurasiya etmək üçün klikləyin"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Cihaz detallarını konfiqurasiya edin"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Bütün cihazlara baxın"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Yeni cihaz birləşdirin"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batareyanın faizi naməlumdur."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> üzərindən qoşuldu."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> cihazına qoşulub."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Qrupu genişləndirin."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Tətbiqi açın."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Qoşulu deyil."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Rouminq"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eşitmə aparatları"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiv edilir..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yuxarıdakı tətbiq tərəfindən idarə olunduğu üçün parlaqlığı tənzimləmək mümkün deyil"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avtodönüş"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranın avtomatik dönməsi"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Məkan"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Çoxsaylı tapşırıq icrası"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Tətbiq sağda olmaqla bölünmüş ekranı istifadə edin"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Tətbiq solda olmaqla bölünmüş ekranı istifadə edin"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Tam ekrandan istifadə edin"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Masaüstü görünüşdən istifadə edin"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bölünmüş ekran istifadə edərkən sağda və ya aşağıda tətbiqə keçin"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bölünmüş ekran istifadə edərkən solda və ya yuxarıda tətbiqə keçin"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Bölünmüş ekran rejimində: tətbiqi birindən digərinə dəyişin"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Son tətbiqlərə baxın"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Başqa tətbiqə keçin"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hazırdır"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Növbəti"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Yenidən cəhd edin!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Geri qayıdın"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Taçpeddə üç barmaqla sola və ya sağa sürüşdürün"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 69ebc70..8921eff 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezani ste sa <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezani smo sa uređajem <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Proširite grupu."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otvorite aplikaciju."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nije povezano."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roming"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključuje se..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ne možete da prilagodite osvetljenost jer je kontroliše aplikacija u vrhu"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatska rotacija"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obaveštenja niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Drugo"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"uključivanje ili isključivanje veličine pločice"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklonili pločicu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodali pločicu na poslednju poziciju"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Premestite pločicu"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Da biste pregledali nedavne aplikacije, prevucite nagore i zadržite sa tri prsta na tačpedu"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Da biste pogledali sve aplikacije, pritisnite taster radnji na tastaturi"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redigovano"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Otključajte za prikaz"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Otključajte da biste videli kôd"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Koristite tačped za vraćanje nazad"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prevucite ulevo ili udesno sa tri prsta. Dodirnite da biste videli više pokreta."</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 7c7c364..3568586 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Падлучаны да <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ёсць падключэнне да <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Разгарнуць групу."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Адкрыць праграму."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Няма падключэння."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роўмінг"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Увод"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слыхавыя апараты"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Уключэнне…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не ўдаецца адрэгуляваць яркасць, бо янакантралюецца асноўнай праграмай"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аўтапаварот"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аўтаматычны паварот экрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Месцазнаходжанне"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 0f2ab17..9d6be13 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth е включен."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Икона за устройство с Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Кликнете, за да конфигурирате подробностите за устройството"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Конфигуриране на подробностите за устройството"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Вижте всички устройства"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Сдвояване на ново устройство"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Процентът на батерията е неизвестен."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Има връзка с <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Установена е връзка с/ъс <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Разгъване на групата."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Отваряне на приложението."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Няма връзка."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Вход"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухови апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включва се..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Яркостта не може да се коригира, защото се контролира от приложението на екрана"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авт. ориентация"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично завъртане на екрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Местоположение"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Няколко задачи едновременно"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Използване на разделен екран с приложението вдясно"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Използване на разделен екран с приложението вляво"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Използване режима на цял екран"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Използване на изгледа за настолни компютри"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Превключване към приложението вдясно/отдолу в режима на разделен екран"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Превключване към приложението вляво/отгоре в режима на разделен екран"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"При разделен екран: замяна на дадено приложение с друго"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Показване на иконите за известията с нисък приоритет"</string>
<string name="other" msgid="429768510980739978">"Друго"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"превключване на размера на панела"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"премахване на панел"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"добавяне на панела на последната позиция"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Преместване на панел"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Преглед на скорошните приложения"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Превключване на приложенията"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Напред"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Опитайте отново!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Плъзнете три пръста наляво или надясно по сензорния панел"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"За да прегледате скорошните приложения, плъзнете нагоре по сензорния панел с три пръста и задръжте"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"За да прегледате всичките си приложения, натиснете клавиша за действия на клавиатурата си"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Скрито"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Отключете за преглед"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Отключете, за да прегледате кода"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстуално обучение"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Използвайте сензорния панел, за да се върнете назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Плъзнете три пръста наляво или надясно. Докоснете, за да научите повече жестове."</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 10a1fd6..636d4f2 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ব্লুটুথ সংযুক্ত হয়েছে৷"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ব্লুটুথ ডিভাইসের আইকন"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ডিভাইসের বিবরণ কনফিগার করতে ক্লিক করুন"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>। ডিভাইসের বিবরণ কনফিগার করুন"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"সব ডিভাইস দেখুন"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"নতুন ডিভাইস পেয়ার করুন"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ব্যাটারি কত শতাংশ আছে তা জানা যায়নি।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>এ সংযুক্ত হয়ে আছে।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> এর সাথে সংযুক্ত৷"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"গ্রুপ বড় করুন।"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"অ্যাপ্লিকেশন খুলুন।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"সংযুক্ত নয়৷"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"রোমিং"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ইনপুট"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"হিয়ারিং এড"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"চালু করা হচ্ছে…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"উজ্জ্বলতা টপ অ্যাপ নিয়ন্ত্রণ করায় এটিকে অ্যাডজাস্ট করা যাচ্ছে না"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"নিজে থেকে ঘুরবে"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"অটো-রোটেট স্ক্রিন"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"লোকেশন"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"মাল্টিটাস্কিং"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ডানদিকে বর্তমান অ্যাপে স্প্লিট স্ক্রিন ব্যবহার করুন"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"বাঁদিকে বর্তমান অ্যাপে স্প্লিট স্ক্রিন ব্যবহার করুন"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ফুল-স্ক্রিন মোড ব্যবহার করুন"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ডেস্কটপ ভিউ ব্যবহার করুন"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"স্প্লিট স্ক্রিন ব্যবহার করার সময় ডানদিকের বা নিচের অ্যাপে পাল্টে নিন"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"স্প্লিট স্ক্রিন ব্যবহার করার সময় বাঁদিকের বা উপরের অ্যাপে পাল্টে নিন"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"\'স্প্লিট স্ক্রিন\' থাকাকালীন: একটি অ্যাপ থেকে অন্যটিতে পাল্টান"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"সম্প্রতি ব্যবহার করা হয়েছে এমন অ্যাপ দেখুন"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"অ্যাপ পরিবর্তন করুন"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"হয়ে গেছে"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"এরপর"</string>
<string name="gesture_error_title" msgid="469064941635578511">"আবার চেষ্টা করুন!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ফিরে যান"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"আপনার টাচপ্যাডে তিনটি আঙুল ব্যবহার করে বাঁদিকে বা ডানদিকে সোয়াইপ করুন"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 8eadd4d..331bac2 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -245,13 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth je povezan."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona Bluetooth uređaja"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknite da konfigurirate detalje uređaja"</string>
- <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurirajte pojedinosti o uređaju"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Pogledajte sve uređaje"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Upari novi uređaj"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfiguracija detalja o uređaju"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Prikaz svih uređaja"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Uparivanje novog uređaja"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Postotak napunjenosti baterije nije poznat"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezan na <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezan na <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Proširivanje grupe."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otvaranje aplikacije."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nije povezano."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roming"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ulaz"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nije moguće podesiti osvijetljenost jer njome upravlja aplikacija pri vrhu"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko rotiranje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -898,8 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Korištenje podijeljenog ekrana s aplikacijom na desnoj strani"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Korištenje podijeljenog ekrana s aplikacijom na lijevoj strani"</string>
- <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Upotreba prikaza na cijelom zaslonu"</string>
- <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Upotreba prikaza na računalu"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Korištenje prikaza preko cijelog ekrana"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Korištenje prikaza na računaru"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prelazak u aplikaciju desno ili ispod uz podijeljeni ekran"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Pređite u aplikaciju lijevo ili iznad dok koristite podijeljeni ekran"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Za vrijeme podijeljenog ekrana: zamjena jedne aplikacije drugom"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obavještenja niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Ostalo"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"promjenu veličine pločice"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklanjanje kartice"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodavanje kartice na posljednji položaj"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Pomjeranje kartice"</string>
@@ -1502,7 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Prikaži nedavne aplikacije"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Promijenite aplikaciju"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotovo"</string>
- <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Dalje"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Naprijed"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Pokušajte ponovo!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Nazad"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Prevucite ulijevo ili udesno s tri prsta na dodirnoj podlozi"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Da pregledate nedavne aplikacije, prevucite nagore i zadržite s tri prsta na dodirnoj podlozi"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Da pregledate sve aplikacije, pritisnite tipku radnji na tastaturi"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redigovano"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Otključajte za prikaz"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Otključajte za prikaz koda"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Koristite dodirnu podlogu da se vratite"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prevucite ulijevo ili udesno s tri prsta. Dodirnite da naučite više pokreta."</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 8e4da1d..01d7692 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connectat."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icona de dispositiu Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Fes clic per configurar els detalls del dispositiu"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configura els detalls del dispositiu"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Mostra tots els dispositius"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Vincula un dispositiu nou"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Es desconeix el percentatge de bateria."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"S\'ha connectat a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Està connectat amb <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Desplega el grup."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Obre l\'aplicació."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Sense connexió."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinerància"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiòfons"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"S\'està activant…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No es pot ajustar la brillantor perquè està controlada per l\'aplicació superior"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Gira automàticament"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Gira la pantalla automàticament"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicació"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasca"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utilitzar la pantalla dividida amb l\'aplicació a la dreta"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utilitzar la pantalla dividida amb l\'aplicació a l\'esquerra"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Utilitza la pantalla completa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Utilitza la visualització per a ordinadors"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Canvia a l\'aplicació de la dreta o de sota amb la pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Canvia a l\'aplicació de l\'esquerra o de dalt amb la pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Durant el mode de pantalla dividida: substitueix una app per una altra"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostra les icones de notificació amb prioritat baixa"</string>
<string name="other" msgid="429768510980739978">"Altres"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"commutar la mida de la icona"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"suprimir el mosaic"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"afegir una icona a la darrera posició"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mou el mosaic"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Mostra les aplicacions recents"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Canviar d\'aplicació"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Fet"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Següent"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Torna-ho a provar"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Torna"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Llisca cap a l\'esquerra o cap a la dreta amb tres dits al ratolí tàctil"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Per veure les aplicacions recents, llisca cap amunt amb tres dits i mantén premut al ratolí tàctil"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Per veure totes les aplicacions, prem la tecla d\'acció al teclat"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Emmascarat"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Desbloqueja per veure"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Desbloqueja per veure el codi"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educació contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Utilitza el ratolí tàctil per tornar enrere"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Fes lliscar tres dits cap a l\'esquerra o cap a la dreta. Toca per aprendre més gestos."</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 6d38055..15e4703c 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Rozhraní Bluetooth je připojeno."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona zařízení Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknutím nakonfigurujete podrobnosti o zařízení"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurovat podrobnosti o zařízení"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Zobrazit všechna zařízení"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Spárovat nové zařízení"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Procento baterie není známé."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Připojeno k zařízení <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Jste připojeni k zařízení <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Rozbalit skupinu."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otevřít aplikaci."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nepřipojeno."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Naslouchátka"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapínání…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas nelze upravit, protože ho řídí hlavní aplikace"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. otáčení"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáčení obrazovky"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Použít rozdělenou obrazovku s aplikací vpravo"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Použít rozdělenou obrazovku s aplikací vlevo"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Použít celou obrazovku"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Použít zobrazení na počítači"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Přepnout na aplikaci vpravo nebo dole v režimu rozdělené obrazovky"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Přepnout na aplikaci vlevo nebo nahoře v režimu rozdělené obrazovky"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"V režimu rozdělené obrazovky: nahradit jednu aplikaci druhou"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Zobrazit nedávné aplikace"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Přepnout aplikace"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hotovo"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Další"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Zkuste to znovu."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Zpět"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Přejeďte po touchpadu třemi prsty doleva nebo doprava"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index a5801cb..ab87c46 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth tilsluttet."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon for Bluetooth-enhed"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik for at konfigurere enhedsoplysninger"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurer enhedsoplysninger"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Se alle enheder"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Par ny enhed"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batteriniveauet er ukendt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Forbundet med <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Forbundet til <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Udvid gruppe."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Åbn app."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ikke tilsluttet."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverer…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Lysstyrken kan ikke justeres, fordi den styres af den øverste app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Roter automatisk"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Roter skærmen automatisk"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokation"</string>
@@ -586,7 +588,7 @@
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"Når du caster hele din skærm, er alt på skærmen synligt. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
<string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"Når du caster en app, er alt, der vises eller afspilles i appen, synligt. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"Cast skærm"</string>
- <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Vælg den app, du vil caste fra"</string>
+ <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Vælg den app, du caste"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vil du begynde at dele?"</string>
<string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Når du deler, optager eller caster, har Android adgang til alt, der er synligt på din skærm eller afspilles på din enhed. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
<string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Når du deler, optager eller caster en app, har Android adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Brug opdelt skærm med appen til højre"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Brug opdelt skærm med appen til venstre"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Brug fuld skærm"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Brug computervenlig visning"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skift til en app til højre eller nedenfor, når du bruger opdelt skærm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skift til en app til venstre eller ovenfor, når du bruger opdelt skærm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ved opdelt skærm: Udskift én app med en anden"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se seneste apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Skift mellem apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Udfør"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Næste"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Prøv igen!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gå tilbage"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Stryg til venstre eller højre med tre fingre på touchpladen"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 132de74..99e32ec 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Mit Bluetooth verbunden"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Symbol des Bluetooth-Geräts"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klicke, um das Gerätedetail zu konfigurieren"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Gerätedetail konfigurieren."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Alle Geräte anzeigen"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Neues Gerät koppeln"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akkustand unbekannt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Mit <xliff:g id="BLUETOOTH">%s</xliff:g> verbunden"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Verbunden mit <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Gruppe erweitern."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Anwendung öffnen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nicht verbunden"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Eingabe"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörgerät"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Wird aktiviert…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Die Helligkeit kann nicht angepasst werden, weil sie von der obersten App gesteuert wird"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. drehen"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Bildschirm automatisch drehen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Standort"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Splitscreen mit der App auf der rechten Seite nutzen"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Splitscreen mit der App auf der linken Seite nutzen"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Vollbildmodus verwenden"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Desktop-Ansicht verwenden"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Im Splitscreen-Modus zu einer App rechts oder unten wechseln"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Im Splitscreen-Modus zu einer App links oder oben wechseln"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Im Splitscreen: eine App durch eine andere ersetzen"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Letzte Apps aufrufen"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Zwischen Apps wechseln"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Fertig"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Weiter"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Noch einmal versuchen"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Zurück"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Wische mit drei Fingern auf dem Touchpad nach links oder rechts"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index a628e21..d3bfc99 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Το Bluetooth είναι συνδεδεμένο."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Εικονίδιο συσκευής Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Κάντε κλικ για να διαμορφώσετε τις λεπτομέρειες συσκευής"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Διαμόρφωση λεπτομερειών συσκευής"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Εμφάνιση όλων των συσκευών"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Σύζευξη νέας συσκευής"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Άγνωστο ποσοστό μπαταρίας."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Συνδέθηκε στο <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Συνδέθηκε σε <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Αναπτύξτε την ομάδα."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Ανοίξτε την εφαρμογή."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Μη συνδεδεμένο"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Περιαγωγή"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Είσοδος"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Βοηθήματα ακοής"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ενεργοποίηση…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Δεν είναι δυνατή η προσαρμογή της φωτεινότητας, επειδή ελέγχεται από την εφαρμογή στην κορυφή"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Αυτόματη περιστροφή"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Αυτόματη περιστροφή οθόνης"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Τοποθεσία"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Πολυδιεργασία"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Χρήση διαχωρισμού οθόνης με την εφαρμογή στα δεξιά"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Χρήση διαχωρισμού οθόνης με την εφαρμογή στα αριστερά"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Χρήση πλήρους οθόνης"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Χρήση προβολής για υπολογιστές"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Εναλλαγή στην εφαρμογή δεξιά ή κάτω κατά τη χρήση διαχωρισμού οθόνης"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Εναλλαγή σε εφαρμογή αριστερά ή επάνω κατά τη χρήση διαχωρισμού οθόνης"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Κατά τον διαχωρισμό οθόνης: αντικατάσταση μιας εφαρμογής με άλλη"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Εμφάνιση εικονιδίων ειδοποιήσεων χαμηλής προτεραιότητας"</string>
<string name="other" msgid="429768510980739978">"Άλλο"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"εναλλαγή μεγέθους για το πλακάκι"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"κατάργηση πλακιδίου"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"προσθήκη πλακιδίου στην τελευταία θέση"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Μετακίνηση πλακιδίου"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Προβολή πρόσφατων εφαρμογών"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Εναλλαγή μεταξύ εφαρμογών"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Τέλος"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Επόμενο"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Δοκιμάστε ξανά!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Επιστροφή"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Σύρετε προς τα αριστερά ή τα δεξιά με τρία δάχτυλα στην επιφάνεια αφής"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Για πρόσφατες εφαρμογές, σαρώστε προς τα πάνω με τρία δάχτυλα και κρατήστε τα στην επιφάνεια αφής"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Για να δείτε όλες τις εφαρμογές, πιέστε το πλήκτρο ενέργειας στο πληκτρολόγιό σας"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Αποκρύφτηκε"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Ξεκλειδώστε για προβολή"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Ξεκλειδώστε για προβολή κωδικού"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Εκπαίδευση με βάση τα συμφραζόμενα"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Χρήση της επιφάνειας αφής για επιστροφή"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Σύρετε προς τα αριστερά ή τα δεξιά με τρία δάχτυλα. Πατήστε για να μάθετε περισσότερες κινήσεις."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 1b36a7c..c253711 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configure device detail"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"See all devices"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Pair new device"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Use fullscreen"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Use desktop view"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Next"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index c6ba039..92e9d8d 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -252,6 +252,8 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <string name="accessibility_add_device_to_group" msgid="5446422960697860806">"Add device to group."</string>
+ <string name="accessibility_remove_device_from_group" msgid="3114694270949142228">"Remove device from group."</string>
<string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -329,7 +331,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="4124028416057617517">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 1b36a7c..c253711 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configure device detail"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"See all devices"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Pair new device"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Use fullscreen"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Use desktop view"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Next"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 1b36a7c..c253711 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configure device detail"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"See all devices"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Pair new device"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Use fullscreen"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Use desktop view"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Next"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index fbf01b8..7f09671 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícono de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Haz clic para configurar los detalles del dispositivo"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>; configura los detalles del dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ver todos los dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Vincular dispositivo nuevo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Se desconoce el porcentaje de la batería."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Conectado a <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expandir grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abrir aplicación."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"No conectado"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"La app superior controla el brillo,por lo que no se puede ajustar"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar la pantalla automáticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Tareas múltiples"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar la pantalla dividida con la app a la derecha"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar la pantalla dividida con la app a la izquierda"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Usar la pantalla completa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Usar la vista para computadoras de escritorio"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Ubicar la app a la derecha o abajo cuando usas la pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Ubicar la app a la izquierda o arriba cuando usas la pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Durante pantalla dividida: Reemplaza una app con otra"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar íconos de notificaciones con prioridad baja"</string>
<string name="other" msgid="429768510980739978">"Otros"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"alternar el tamaño del mosaico"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"quitar tarjeta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"agregar tarjeta a la última posición"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover la tarjeta"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver apps recientes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Listo"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Siguiente"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Vuelve a intentarlo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atrás"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Desliza hacia la izquierda o la derecha con tres dedos en el panel táctil"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver las apps recientes, desliza hacia arriba con tres dedos y mantén presionado el panel táctil"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas las apps, presiona la tecla de acción en el teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Oculto"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Desbloquea el dispositivo para ver"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Desbloquea el dispositivo para ver el código"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educación contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa el panel táctil para ir hacia atrás"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Desliza hacia la izquierda o la derecha con tres dedos. Presiona para aprender más gestos."</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 0af9fbf..531d1df 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icono de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Haz clic para configurar la información del dispositivo"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configura los detalles del dispositivo."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Consultar todos los dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Emparejar nuevo dispositivo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentaje de batería desconocido."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Conectado a <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Mostrar grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abrir aplicación."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"No conectado."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No se puede ajustar el brillo porque la aplicación superior lo está controlando"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar pantalla automáticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarea"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar la pantalla dividida con la aplicación a la derecha"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar la pantalla dividida con la aplicación a la izquierda"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Usar pantalla completa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Usar vista para ordenador"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Cambiar a la aplicación de la derecha o de abajo en pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Cambiar a la app de la izquierda o de arriba en pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Con pantalla dividida: reemplazar una aplicación por otra"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver aplicaciones recientes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de aplicación"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hecho"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Siguiente"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Vuelve a intentarlo."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atrás"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Desliza hacia la izquierda o la derecha con tres dedos en el panel táctil"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index bb77e96..30b93b0 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth on ühendatud."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-seadme ikoon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klõpsake seadme üksikasjade konfigureerimiseks"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Seadme üksikasjade seadistamine"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Kõigi seadmete kuvamine"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Uue seadme sidumine"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Aku laetuse protsent on teadmata."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ühendatud: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ühendatud ülekandega <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Grupi laiendamine."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Rakenduse avamine."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ühendus puudub."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Rändlus"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sisend"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuuldeaparaadid"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Sisselülitamine …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Heledust ei saa reguleerida, kuna seda juhib ülemine rakendus"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. pööramine"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Kuva automaatne pööramine"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Asukoht"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitegumtöö"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Jagatud ekraanikuva kasutamine, rakendus kuvatakse paremal"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Jagatud ekraanikuva kasutamine, rakendus kuvatakse vasakul"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Lülita täisekraanile"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Kasuta arvutivaadet"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Paremale või alumisele rakendusele lülitamine jagatud ekraani ajal"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Vasakule või ülemisele rakendusele lülitamine jagatud ekraani ajal"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ekraanikuva jagamise ajal: ühe rakenduse asendamine teisega"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Hiljutiste rakenduste vaatamine"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Rakenduste vahetamine"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Valmis"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Järgmine"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Proovige uuesti!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Tagasi"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pühkige puuteplaadil kolme sõrmega vasakule või paremale"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index cb8e034..50f8750 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetootha konektatuta."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth bidezko gailuaren ikonoa"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Gailuaren xehetasuna konfiguratzeko, sakatu hau"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfiguratu gailuaren xehetasunak."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ikusi gailu guztiak"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Parekatu beste gailu bat"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Bateriaren ehunekoa ezezaguna da."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> gailura konektatuta."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Hona konektatuta: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Zabaldu taldea."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Ireki aplikazioa."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Konektatu gabe."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Ibiltaritza"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sarrera"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audifonoak"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktibatzen…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ezin da doitu argitasuna,gaineko aplikazioak kontrolatzen duelako"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Biratze automatikoa"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Biratu pantaila automatikoki"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Kokapena"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Zeregin bat baino gehiago aldi berean exekutatzea"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Erabili pantaila zatitua eta ezarri aplikazio hau eskuinean"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Erabili pantaila zatitua eta ezarri aplikazio hau ezkerrean"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Erabili pantaila osoa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Erabili ordenagailuetarako ikuspegia"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Aldatu eskuineko edo beheko aplikaziora pantaila zatitua erabiltzean"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Aldatu ezkerreko edo goiko aplikaziora pantaila zatitua erabiltzean"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Pantaila zatituan zaudela, ordeztu aplikazio bat beste batekin"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ikusi azkenaldiko aplikazioak"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Aldatu aplikazioa"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Eginda"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Hurrengoa"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Saiatu berriro!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Egin atzera"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pasatu 3 hatz ezkerrera edo eskuinera ukipen-panelean"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 7fd5551..d53805d 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"بلوتوث متصل است."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"نماد دستگاه بلوتوث"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"برای پیکربندی جزئیات دستگاه کلیک کنید"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. پیکربندی جزئیات دستگاه"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"دیدن تمام دستگاهها"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"جفت کردن دستگاه جدید"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"درصد شارژ باتری مشخص نیست."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"به <xliff:g id="BLUETOOTH">%s</xliff:g> متصل شد."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"به <xliff:g id="CAST">%s</xliff:g> متصل شد."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"گروه را از هم باز میکند."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"برنامه را باز میکند."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"متصل نیست."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"فراگردی"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ورودی"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سمعک"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"روشن کردن…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"نمیتوان روشنایی را تنظیم کرد زیرا برنامه بالایی آن را کنترل میکند"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"چرخش خودکار"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"چرخش خودکار صفحهنمایش"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"مکان"</string>
@@ -614,7 +616,7 @@
<string name="media_projection_action_text" msgid="3634906766918186440">"اکنون شروع کنید"</string>
<string name="empty_shade_text" msgid="8935967157319717412">"اعلانی موجود نیست"</string>
<string name="no_unseen_notif_text" msgid="395512586119868682">"اعلان جدیدی وجود ندارد"</string>
- <string name="adaptive_notification_edu_hun_title" msgid="2594042455998795122">"«استراحت اعلانها» اکنون روشن است"</string>
+ <string name="adaptive_notification_edu_hun_title" msgid="2594042455998795122">"«آرامسازی اعلانها» اکنون روشن است"</string>
<string name="adaptive_notification_edu_hun_text" msgid="7743367744129536610">"وقتی بهطور همزمان تعداد بسیار زیادی اعلان دریافت کنید، میزان صدای دستگاه و هشدارها بهطور خودکار تا ۲ دقیقه کاهش مییابد."</string>
<string name="go_to_adaptive_notification_settings" msgid="2423690125178298479">"خاموش کردن"</string>
<string name="unlock_to_see_notif_text" msgid="7439033907167561227">"برای دیدن اعلانهای قبلی قفل را باز کنید"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"چندوظیفگی"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"استفاده از صفحهٔ دونیمه با قرار گرفتن برنامه در سمت راست"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"استفاده از صفحهٔ دونیمه با قرار گرفتن برنامه در سمت چپ"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"استفاده از حالت تمامصفحه"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"استفاده از نمای ویژه رایانه رومیزی"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"رفتن به برنامه سمت راست یا پایین درحین استفاده از صفحهٔ دونیمه"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"رفتن به برنامه سمت چپ یا بالا درحین استفاده از صفحهٔ دونیمه"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"درحین صفحهٔ دونیمه: برنامهای را با دیگری جابهجا میکند"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"نمایش نمادهای اعلان کماهمیت"</string>
<string name="other" msgid="429768510980739978">"موارد دیگر"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"تغییر اندازه کاشی"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"برداشتن کاشی"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"افزودن کاشی به آخرین جایگاه"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"انتقال کاشی"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"مشاهده برنامههای اخیر"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"جابهجایی بین برنامهها"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"تمام"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"بعدی"</string>
<string name="gesture_error_title" msgid="469064941635578511">"دوباره امتحان کنید!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"برگشتن"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"با سه انگشت روی صفحه لمسی تند به چپ یا راست بکشید."</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"برای مشاهده برنامههای اخیر، در صفحه لمسی با سه انگشت تند بهبالا بکشید و نگه دارید"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"برای مشاهده همه برنامهها، دکمه کنش در صفحهکلید را فشار دهید"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"محوشده"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"برای مشاهده، قفل دستگاه را باز کنید"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"برای مشاهده کد، قفل دستگاه را باز کنید"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"آموزش زمینهای"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"برای برگشتن از صفحه لمسی استفاده کنید"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"با سه انگشت تند بهچپ یا راست بکشید. برای آشنایی با اشارههای بیشتر، تکضرب بزنید."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 647134f..fa9468d 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -247,16 +247,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth yhdistetty."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-laitekuvake"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Määritä laitteen asetukset klikkaamalla"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Määritä laitteen tiedot"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Katso kaikki laitteet"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Muodosta uusi laitepari"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akun varaustaso ei tiedossa."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Yhteys: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Yhdistetty kohteeseen <xliff:g id="CAST">%s</xliff:g>"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Laajenna ryhmä."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Avaa sovellus."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ei yhteyttä."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -334,7 +335,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Syöttölaite"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuulolaitteet"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Otetaan käyttöön…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kirkkautta ei voi säätää, koska ensisijainen sovellus ohjaa sitä"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automaattinen kääntö"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Käännä näyttöä automaattisesti."</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Sijainti"</string>
@@ -903,10 +905,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitaskaus"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Käytä jaettua näyttöä niin, että sovellus on oikealla"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Käytä jaettua näyttöä niin, että sovellus on vasemmalla"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Käytä koko näytön tilaa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Käytä tietokonenäkymää"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Vaihda sovellukseen oikealla tai alapuolella jaetussa näytössä"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Vaihda sovellukseen vasemmalla tai yläpuolella jaetussa näytössä"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Jaetun näytön aikana: korvaa sovellus toisella"</string>
@@ -1509,8 +1509,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Katso viimeisimmät sovellukset"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Vaihda sovellusta"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Valmis"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Seuraava"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Yritä uudelleen."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Takaisin"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pyyhkäise kosketuslevyllä vasemmalle tai oikealle kolmella sormella"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 299f5a5..97702f0 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connecté"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icône de l\'appareil Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cliquez pour configurer les détails de l\'appareil"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configurer les détails de l\'appareil"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Voir tous les appareils"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Associer un nouvel appareil"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Pourcentage de la pile inconnu."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connecté à : <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connecté à <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Développer le groupe."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Ouvrir l\'appli."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non connecté"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinérance"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Prothèses auditives"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation en cours…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible de régler la luminosité, car elle est contrôlée par l\'appli principale"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation auto"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotation automatique de l\'écran"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localisation"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitâche"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utiliser l\'Écran divisé avec l\'appli à droite"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utiliser l\'Écran divisé avec l\'appli à gauche"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Utiliser le mode plein écran"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Utiliser l\'affichage sur ordinateur de bureau"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Passer à l\'appli à droite ou en dessous avec l\'Écran divisé"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Passer à l\'appli à gauche ou au-dessus avec l\'Écran divisé"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"En mode d\'écran divisé : remplacer une appli par une autre"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Afficher les applis récentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Changer d\'appli"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"OK"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Suivant"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Réessayez!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Retour"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Balayez votre pavé tactile vers la gauche ou vers la droite avec trois doigts"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index a4fa4d0..1fefa2d 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connecté à : <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connecté à <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Développer le groupe."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Ouvrir l\'application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non connecté"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinérance"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Appareils auditifs"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible d\'ajuster la luminosité, car celle-ci est contrôlée par l\'appli principale"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation auto"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotation automatique de l\'écran"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localisation"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Afficher les icônes de notification à faible priorité"</string>
<string name="other" msgid="429768510980739978">"Autre"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"activer/désactiver la taille du bloc"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"supprimer le bloc"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ajouter le bloc à la dernière position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Déplacer le bloc"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Pour afficher les applis récentes, balayez vers le haut avec trois doigts sur le pavé tactile et maintenez-les."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Pour afficher toutes vos applis, appuyez sur la touche d\'action de votre clavier"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Masqué"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Déverrouiller pour afficher"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Déverrouiller pour afficher le code"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Éducation contextuelle"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Utilisez votre pavé tactile pour revenir en arrière"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Balayez vers la gauche ou la droite en utilisant trois doigts. Appuyez pour apprendre d\'autres gestes."</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 82ba5dc..d9a991e 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icona do dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Facer clic para configurar os detalles do dispositivo"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configura o detalle do dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Mira todos os dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Vincula un dispositivo novo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Descoñécese a porcentaxe da batería."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Dispositivo conectado: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Despregar o grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abrir a aplicación."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non conectada"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinerancia"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiófonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Non se pode axustar o brillo porque o controla a aplicación principal"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Xirar automaticamente"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Xirar pantalla automaticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localización"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefa"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar pantalla dividida coa aplicación na dereita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar pantalla dividida coa aplicación na esquerda"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Usar a pantalla completa"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Usar a vista para ordenadores"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Cambiar á aplicación da dereita ou de abaixo coa pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Cambiar á aplicación da esquerda ou de arriba coa pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"En modo de pantalla dividida: Substituír unha aplicación por outra"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar iconas das notificacións que teñan baixa prioridade"</string>
<string name="other" msgid="429768510980739978">"Outros"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"activar/desactivar o tamaño do recadro"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"quitar tarxeta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"engadir o atallo á última posición"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover tarxeta"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Consultar aplicacións recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de aplicación"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Feito"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Seguinte"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Téntao de novo."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Volver"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pasa tres dedos cara á esquerda ou cara á dereita no panel táctil"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver as aplicacións recentes, pasa tres dedos cara arriba no panel táctil e mantenos premidos"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas as aplicacións, preme a tecla de acción do teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Contido ocultado"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Desbloquea para ver a información"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Desbloquea para ver o código"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Información contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa o panel táctil para volver"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Pasa tres dedos cara á esquerda ou cara á dereita. Toca para obter máis información sobre os xestos."</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 1fa46e6..55f6e94 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"બ્લૂટૂથ કનેક્ટ થયું."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"બ્લૂટૂથ ડિવાઇસનું આઇકન"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ડિવાઇસની વિગત ગોઠવવા માટે ક્લિક કરો"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. ડિવાઇસની વિગત ગોઠવો"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"બધા ડિવાઇસ જુઓ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"નવા ડિવાઇસ સાથે જોડાણ કરો"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"બૅટરીની ટકાવારી અજાણ છે."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> થી કનેક્ટ થયાં."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> થી કનેક્ટ કરેલ."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ગ્રૂપને મોટું કરો."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ઍપ્લિકેશન ખોલો."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"કનેક્ટ થયેલું નથી."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"રોમિંગ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ઇનપુટ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"સાંભળવામાં મદદ આપતા યંત્રો"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ચાલુ કરી રહ્યાં છીએ…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"બ્રાઇટનેસ ગોઠવી શકતા નથી કારણ કે તે લોકપ્રિય ઍપ દ્વારા નિયંત્રિત કરવામાં આવી રહી છે"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ઑટો રોટેટ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ઑટો રોટેટ સ્ક્રીન"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"લોકેશન"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"એકસાથે એકથી વધુ કાર્યો કરવા"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"હાલની ઍપને જમણી બાજુએ રાખીને વિભાજિત સ્ક્રીનનો ઉપયોગ કરો"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"હાલની ઍપને ડાબી બાજુએ રાખીને વિભાજિત સ્ક્રીનનો ઉપયોગ કરો"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"પૂર્ણ સ્ક્રીનનો ઉપયોગ કરો"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ડેસ્કટૉપ વ્યૂનો ઉપયોગ કરો"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરતી વખતે જમણી બાજુ કે નીચેની ઍપ પર સ્વિચ કરો"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરતી વખતે ડાબી બાજુની કે ઉપરની ઍપ પર સ્વિચ કરો"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"વિભાજિત સ્ક્રીન દરમિયાન: એક ઍપને બીજી ઍપમાં બદલો"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"તાજેતરની ઍપ જુઓ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ઍપ સ્વિચ કરો"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"થઈ ગયું"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"આગળ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ફરી પ્રયાસ કરો!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"પાછા જાઓ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"તમારા ટચપૅડ પર ત્રણ આંગળીનો ઉપયોગ કરીને ડાબે કે જમણે સ્વાઇપ કરો"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index be1ca7d..8878c14 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -155,7 +155,7 @@
<string name="cast_to_other_device_stop_dialog_message_generic_with_device" msgid="9213582497852420203">"फ़िलहाल, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> पर कास्ट किया जा रहा है"</string>
<string name="cast_to_other_device_stop_dialog_message_generic" msgid="4100272100480415076">"फ़िलहाल, आस-पास मौजूद किसी डिवाइस पर कास्ट किया जा रहा है"</string>
<string name="cast_to_other_device_stop_dialog_button" msgid="6420183747435521834">"कास्ट करना बंद करें"</string>
- <string name="close_dialog_button" msgid="4749497706540104133">"बंद करें"</string>
+ <string name="close_dialog_button" msgid="4749497706540104133">"अभी नहीं"</string>
<string name="issuerecord_title" msgid="286627115110121849">"समस्या रिकॉर्ड करने वाला टूल"</string>
<string name="issuerecord_background_processing_label" msgid="1666840264959336876">"समस्या का डेटा प्रोसेस हो रहा"</string>
<string name="issuerecord_channel_description" msgid="6142326363431474632">"समस्या का डेटा इकट्ठा करने के लिए बैकग्राउंड में जारी गतिविधि की सूचना"</string>
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> से कनेक्ट किया गया."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> से कनेक्ट है."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ग्रुप को बड़ा करें."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ऐप्लिकेशन खोलें."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"कनेक्ट नहीं है."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिंग"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"कान की मशीनें"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ब्लूटूथ चालू हो रहा है…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"स्क्रीन की रोशनी को एडजस्ट नहीं किया जा सकता, क्योंकि इसे टॉप ऐप्लिकेशन कंट्रोल कर रहा है"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रीन का अपने-आप दिशा बदलना (ऑटो-रोटेट)"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"जगह की जानकारी"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 5c7ee24..054f394 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Spojen na <xliff:g id="BLUETOOTH">%s</xliff:g> ."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezani ste sa sljedećim uređajem: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Proširite grupu."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otvorite aplikaciju."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nije povezano."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušna pomagala"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svjetlina se ne može prilagoditi jer njome upravlja aplikacija pri vrhu"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko zakretanje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko zakretanje zaslona"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obavijesti niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Ostalo"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"promjenu veličine pločice"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklanjanje kartice"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodavanje kartice na posljednji položaj"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Premještanje kartice"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Za prikaz nedavnih aplikacija prijeđite prema gore trima prstima i zadržite pritisak na dodirnoj podlozi"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Za prikaz svojih svih aplikacija pritisnite tipku za radnju na tipkovnici"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redaktirano"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Otključajte za prikaz"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Otključajte za prikaz koda"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Upotrijebite dodirnu podlogu za povratak"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prijeđite ulijevo ili udesno trima prstima. Dodirnite da biste naučili više pokreta."</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 421570c..03f1bc6 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth csatlakoztatva."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-eszköz ikon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kattintson az eszköz beállításainak megadásához"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Eszközadatok konfigurálása"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Az összes eszköz megjelenítése"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Új eszköz párosítása"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Az akkumulátor töltöttségi szintje ismeretlen."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Csatlakoztatva a következőhöz: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Csatlakozva a következőhöz: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Csoport kibontása."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Alkalmazás megnyitása."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nincs csatlakozva."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Bevitel"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hallókészülék"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Bekapcsolás…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nem lehet módosítani a fényerőt, mert a felső alkalmazás vezérli"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatikus elforgatás"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatikus képernyőforgatás"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Tartózkodási hely"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Osztott képernyő használata, az alkalmazás a jobb oldalon van"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Osztott képernyő használata, az alkalmazás a bal oldalon van"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Teljes képernyő használata"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Asztali nézet használata"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Váltás a jobb oldalt, illetve lent lévő appra osztott képernyő esetén"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Váltás a bal oldalt, illetve fent lévő appra osztott képernyő esetén"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Osztott képernyőn: az egyik alkalmazás lecserélése egy másikra"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Legutóbbi alkalmazások megtekintése"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Váltás az alkalmazások között"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Kész"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Következő"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Próbálja újra"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Vissza"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Csúsztassa gyorsan három ujját balra vagy jobbra az érintőpadon."</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index aaedf56..e1b6639 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-ը միացված է:"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth սարքի պատկերակ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Սեղմեք՝ սարքի մանրամասները կազմաձևելու համար"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>։ Կարգավորեք սարքի տվյալները"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Տեսնել բոլոր սարքերը"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Նոր սարքի զուգակցում"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Մարտկոցի լիցքի մակարդակն անհայտ է։"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Միացված է <xliff:g id="BLUETOOTH">%s</xliff:g>-ին:"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Միացված է <xliff:g id="CAST">%s</xliff:g>-ին:"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Ծավալել խումբը։"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Բացել հավելվածը։"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Միացված չէ:"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Ռոումինգ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Մուտքագրում"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Լսողական սարք"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Միացում…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Հնարավոր չէ կարգավորել պայծառությունը, քանի որ այն կառավարվում է գլխավոր հավելվածի կողմից"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ինքնապտտում"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ավտոմատ պտտել էկրանը"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Տեղորոշում"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Բազմախնդրություն"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Տրոհել էկրանը և տեղավորել այս հավելվածը աջ կողմում"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Տրոհել էկրանը և տեղավորել այս հավելվածը ձախ կողմում"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Օգտագործեք լիաէկրան ռեժիմը"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Օգտագործեք համակարգչային տարբերակը"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Անցեք աջ կողմի կամ ներքևի հավելվածին տրոհված էկրանի միջոցով"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Անցեք աջ կողմի կամ վերևի հավելվածին տրոհված էկրանի միջոցով"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Տրոհված էկրանի ռեժիմում մեկ հավելվածը փոխարինել մյուսով"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Ցուցադրել ցածր առաջնահերթության ծանուցումների պատկերակները"</string>
<string name="other" msgid="429768510980739978">"Այլ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"փոխեք սալիկի չափը"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"հեռացնել սալիկը"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ավելացնել սալիկը վերջին դիրքում"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Տեղափոխել սալիկը"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Դիտել վերջին հավելվածները"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Անցում մեկ հավելվածից մյուսին"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Պատրաստ է"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Հաջորդը"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Նորից փորձեք։"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Հետ գնալ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Հպահարթակի վրա երեք մատով սահեցրեք ձախ կամ աջ"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Վերջերս օգտագործված հավելվածները դիտելու համար երեք մատը սահեցրեք վերև և սեղմած պահեք"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Բոլոր հավելվածները դիտելու համար սեղմեք գործողության ստեղնը ստեղնաշարի վրա"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Կոդավորված"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Ապակողպել դիտելու համար"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Ապակողպել կոդը դիտելու համար"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Համատեքստային ուսուցում"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Օգտագործեք ձեր հպահարթակը՝ վերադառնալու համար"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Երեք մատը սահեցրեք ձախ կամ աջ։ Հպեք՝ ավելի շատ ժեստերի ծանոթանալու համար։"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 4990774..6ef3cdc 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth terhubung."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon perangkat Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik untuk mengonfigurasi detail perangkat"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurasi detail perangkat"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Lihat semua perangkat"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Sambungkan perangkat baru"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Persentase baterai tidak diketahui."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Terhubung ke <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Terhubung ke <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Luaskan grup."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Buka aplikasi."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Tidak terhubung."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu dengar"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Mengaktifkan…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat menyesuaikan kecerahan karena sedang dikontrol oleh aplikasi atas"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Putar Otomatis"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Putar layar otomatis"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gunakan layar terpisah dengan aplikasi di sebelah kanan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gunakan layar terpisah dengan aplikasi di sebelah kiri"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Gunakan layar penuh"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Gunakan tampilan desktop"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Beralih ke aplikasi di bagian kanan atau bawah saat menggunakan layar terpisah"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Beralih ke aplikasi di bagian kiri atau atas saat menggunakan layar terpisah"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Dalam layar terpisah: ganti salah satu aplikasi dengan yang lain"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Lihat aplikasi terbaru"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Beralih aplikasi"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Selesai"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Berikutnya"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Coba lagi"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kembali"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Geser ke kiri atau kanan menggunakan tiga jari di touchpad"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 3f8492a..2b8a5cc 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth tengt."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Tákn Bluetooth-tækis"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Smelltu til að stilla tækjaupplýsingar"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Upplýsingar um grunnstillingu tækis."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Sjá öll tæki"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Para nýtt tæki"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Staða rafhlöðu óþekkt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Tengt við <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Tengt við <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Stækka hóp."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Opna forrit."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Engin tenging."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Reiki"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Inntak"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Heyrnartæki"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Kveikir…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ekki er hægt að breyta birtustiginu vegna þess að efsta forritið stjórnar því"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Sjálfvirkur snúningur"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Snúa skjá sjálfkrafa"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Staðsetning"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Fjölvinnsla"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Notaðu skjáskiptingu fyrir forritið til hægri"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Notaðu skjáskiptingu fyrir forritið til vinstri"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Nota allan skjáinn"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Nota tölvuútgáfu"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skiptu í forrit til hægri eða fyrir neðan þegar skjáskipting er notuð"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skiptu í forrit til vinstri eða fyrir ofan þegar skjáskipting er notuð"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Í skjáskiptingu: Skipta forriti út fyrir annað forrit"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Sýna tákn fyrir tilkynningar með litlum forgangi"</string>
<string name="other" msgid="429768510980739978">"Annað"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"breyta stærð reitsins"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"fjarlægja flís"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"bæta reit við síðustu stöðu"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Færa flís"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Sjá nýleg forrit"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Að skipta á milli forrita"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Lokið"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Áfram"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Reyndu aftur!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Til baka"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Strjúktu til hægri eða vinstri á snertifletinum með þremur fingrum"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Strjúktu upp og haltu með þremur fingrum á snertifletinum til að sjá nýleg forrit"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Ýttu á aðgerðalykilinn á lyklaborðinu til að sjá öll forritin þín"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Ritskoðað"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Taktu úr lás til að skoða"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Taka úr lás til að sjá kóða"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Samhengismiðuð menntun"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Notaðu snertiflötinn til að fara til baka"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Strjúktu til vinstri eða hægri með þremur fingrum. Ýttu til að læra fleiri bendingar."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index bb7202b..87507d6 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connesso a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connesso a: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Espandi il gruppo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Apri l\'applicazione."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non connesso."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingresso"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Apparecchi acustici"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Attivazione…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossibile regolare la luminosità perché è controllata dall\'app in primo piano"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotazione automatica"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotazione automatica dello schermo"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Posizione"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostra icone di notifiche con priorità bassa"</string>
<string name="other" msgid="429768510980739978">"Altro"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"attivare/disattivare le dimensioni del riquadro"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"rimuovere il riquadro"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"aggiungere il riquadro all\'ultima posizione"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Sposta riquadro"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Per visualizzare le app recenti, scorri verso l\'alto e tieni premuto con tre dita sul touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Per visualizzare tutte le tue app, premi il tasto azione sulla tastiera"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Oscurata"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Sblocca per visualizzare"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Sblocca per visualizzare il codice"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Istruzione contestuale"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa il touchpad per tornare indietro"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Scorri verso sinistra o destra con tre dita. Tocca per scoprire altri gesti."</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 92fc203..8a687af 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -255,6 +255,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"התבצע חיבור אל <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"מחובר אל <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"הרחבת הקבוצה."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"פתיחת האפליקציה."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"אין חיבור."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"נדידה"</string>
@@ -332,7 +336,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"קלט"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"מכשירי שמיעה"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ההפעלה מתבצעת…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"לא ניתן להתאים את הבהירות כי היא נשלטת על ידי האפליקציה העליונה"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"סיבוב אוטומטי"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"סיבוב אוטומטי של המסך"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"מיקום"</string>
diff --git a/packages/SystemUI/res/values-iw/tiles_states_strings.xml b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
index 2f8ec0a..d1bd612a 100644
--- a/packages/SystemUI/res/values-iw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"מושבת"</item>
<item msgid="5908720590832378783">"מצב פעיל"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"לא זמין"</item>
+ <item msgid="6641673879029894995">"מושבת"</item>
+ <item msgid="5806682401126108403">"מופעל"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 3512271..29f93cc 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>に接続しました。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>に接続されています。"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"グループを開きます。"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"アプリを開きます。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"接続されていません。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ローミング"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"入力"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"補聴器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ON にしています…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"明るさはトップ アプリによって制御されているため、調整できません"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動回転"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"画面を自動回転します"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置情報"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"優先度の低い通知アイコンを表示"</string>
<string name="other" msgid="429768510980739978">"その他"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"タイルのサイズを切り替えます"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"タイルを削除"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"タイルを最後の位置に追加する"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"タイルを移動"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"最近使ったアプリを表示するには、3 本の指でタッチパッドを上にスワイプして長押しします"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"すべてのアプリを表示するには、キーボードのアクションキーを押してください"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"削除済み"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"表示するにはロックを解除してください"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"コードを表示するにはロックを解除してください"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"コンテキスト メニューに関する説明"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"タッチパッドを使用して、前の画面に戻る"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"3 本の指で左または右にスワイプします。ジェスチャーの詳細を確認するにはタップしてください。"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 3877fe7..d9a5824 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"დაკავშირებულია <xliff:g id="BLUETOOTH">%s</xliff:g>-თან."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"დაკავშირებულია მოწყობილობასთან: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ჯგუფის გაფართოება."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"აპლიკაციის გახსნა."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"არ არის დაკავშირებული."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"როუმინგი"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"შეყვანა"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"სმენის მოწყობილობები"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ირთვება…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"სიკაშკაშის კორექტირება ვერ ხერხდება, რადგან ის\n იმართება გახსნილი აპის მიერ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ავტოროტაცია"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ეკრანის ავტომატური შეტრიალება"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"მდებარეობა"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"დაბალი პრიორიტეტის მქონე შეტყობინებების ხატულების ჩვენება"</string>
<string name="other" msgid="429768510980739978">"სხვა"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"მოზაიკის ფილის ზომის გადასართავად"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"მოზაიკის ფილის წაშლა"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"მოზაიკის ფილის ბოლო პოზიციაზე დამატება"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"მოზაიკის გადატანა"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ბოლო აპების სანახავად სენსორულ პანელზე სამი თითით გადაფურცლეთ ზემოთ და მოიცადეთ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ყველა აპის სანახავად დააჭირეთ მოქმედების კლავიშს თქვენს კლავიატურაზე"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ტექსტს ადევს ცენზურა"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"განბლოკვა სანახავად"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"განბლოკვა კოდის სანახავად"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"კონტექსტური განათლება"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"უკან დასაბრუნებლად გამოიყენეთ სენსორული პანელი"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"გადაფურცლეთ მარცხნივ ან მარჯვნივ სამი თითით. შეეხეთ მეტი ჟესტის შესასწავლად."</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 506ce8b..141e99c 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth қосылған."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth құрылғысы белгішесі"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Құрылғы деректерін конфигурациялау үшін басыңыз."</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Құрылғы мәліметтерін конфигурациялау"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Барлық құрылғыны көру"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Жаңа құрылғыны жұптау"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батарея зарядының мөлшері белгісіз."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> қосылған."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> трансляциясына қосылды."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Топты жайыңыз."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Қолданбаны ашыңыз."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Жалғанбаған."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Кіріс"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Есту аппараттары"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Қосылып жатыр…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарықтықты реттеу мүмкін емес, себебі ол жетекші қолданба арқылы басқарылады."</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматты түрде бұру"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматты айналатын экран"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локация"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Мультитаскинг"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Қолданбаны бөлінген экранның оң жағынан пайдалану"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Қолданбаны бөлінген экранның сол жағынан пайдалану"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Толық экранды пайдалану"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Компьютерлік нұсқаны пайдалану"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Бөлінген экранда оң не төмен жақтағы қолданбаға ауысу"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Бөлінген экранда сол не жоғары жақтағы қолданбаға ауысу"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Экранды бөлу кезінде: бір қолданбаны басқасымен алмастыру"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Соңғы қолданбаларды көру"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Қолданба ауыстыру"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Дайын"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Келесі"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Қайталап көріңіз"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Артқа"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Сенсорлық тақтада үш саусақпен оңға немесе солға сырғытыңыз."</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 1fa0acb..9323308 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"បានតភ្ជាប់ប៊្លូធូស។"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"រូបឧបករណ៍ប៊្លូធូស"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ចុចដើម្បីកំណត់រចនាសម្ព័ន្ធព័ត៌មានលម្អិតអំពីឧបករណ៍"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. កំណត់រចនាសម្ព័ន្ធព័ត៌មានលម្អិតឧបករណ៍"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"មើលឧបករណ៍ទាំងអស់"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ផ្គូផ្គងឧបករណ៍ថ្មី"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"មិនដឹងអំពីភាគរយថ្មទេ។"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"បានភ្ជាប់ទៅ <xliff:g id="BLUETOOTH">%s</xliff:g> ។"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"បានភ្ជាប់ទៅ <xliff:g id="CAST">%s</xliff:g>"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ពង្រីកក្រុម។"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"បើកកម្មវិធី។"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"មិនបានតភ្ជាប់។"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"រ៉ូមីង"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"បញ្ចូល"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"កំពុងបើក..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"មិនអាចកែតម្រូវកម្រិតពន្លឺបានទេ ដោយសារវាកំពុងស្ថិតក្រោមការគ្រប់គ្រងរបស់កម្មវិធីខាងលើគេ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"បង្វិលស្វ័យប្រវត្តិ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"បង្វិលអេក្រង់ស្វ័យប្រវត្តិ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ទីតាំង"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ការដំណើរការបានច្រើន"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ប្រើមុខងារបំបែកអេក្រង់ជាមួយកម្មវិធីនៅខាងស្ដាំ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ប្រើមុខងារបំបែកអេក្រង់ជាមួយកម្មវិធីនៅខាងឆ្វេង"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ប្រើអេក្រង់ពេញ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ប្រើទិដ្ឋភាពលើកុំព្យូទ័រ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ប្ដូរទៅកម្មវិធីនៅខាងស្ដាំ ឬខាងក្រោម ពេលកំពុងប្រើមុខងារបំបែកអេក្រង់"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ប្ដូរទៅកម្មវិធីនៅខាងឆ្វេង ឬខាងលើ ពេលកំពុងប្រើមុខងារបំបែកអេក្រង់"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ក្នុងអំឡុងពេលប្រើមុខងារបំបែកអេក្រង់៖ ជំនួសកម្មវិធីពីមួយទៅមួយទៀត"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"បង្ហាញរូបការជូនដំណឹងដែលមានអាទិភាពទាប"</string>
<string name="other" msgid="429768510980739978">"ផ្សេងៗ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"បិទ/បើកទំហំរបស់ប្រអប់"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ដកប្រអប់ចេញ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"បញ្ចូលប្រអប់ទៅទីតាំងចុងក្រោយ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ផ្លាស់ទីប្រអប់"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"មើលកម្មវិធីថ្មីៗ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ប្ដូរកម្មវិធី"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"រួចរាល់"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"បន្ទាប់"</string>
<string name="gesture_error_title" msgid="469064941635578511">"សូមព្យាយាមម្ដងទៀត!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ថយក្រោយ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"អូសទៅឆ្វេង ឬស្ដាំដោយប្រើម្រាមដៃបីនៅលើផ្ទាំងប៉ះរបស់អ្នក"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ដើម្បីមើលកម្មវិធីថ្មីៗ សូមអូសឡើងលើ ហើយសង្កត់ឱ្យជាប់ដោយប្រើម្រាមដៃបីនៅលើផ្ទាំងប៉ះ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ដើម្បីមើលកម្មវិធីទាំងអស់របស់អ្នក សូមចុចគ្រាប់ចុចសកម្មភាពនៅលើក្ដារចុចរបស់អ្នក"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"បានកែលម្អពាក្យពេចន៍"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"ដោះសោដើម្បីមើល"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"ដោះសោដើម្បីមើលកូដ"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ការអប់រំតាមបរិបទ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ប្រើផ្ទាំងប៉ះរបស់អ្នក ដើម្បីថយក្រោយ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"អូសទៅឆ្វេង ឬស្ដាំដោយប្រើម្រាមដៃបី។ ចុច ដើម្បីស្វែងយល់បន្ថែមអំពីចលនា។"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 5363c62..d7f8b89 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ಬ್ಲೂಟೂತ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ಬ್ಲೂಟೂತ್ ಸಾಧನ ಐಕಾನ್"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ಸಾಧನದ ವಿವರಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. ಸಾಧನದ ವಿವರಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ನೋಡಿ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ಹೊಸ ಸಾಧನವನ್ನು ಪೇರ್ ಮಾಡಿ"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ಬ್ಯಾಟರಿ ಶೇಕಡಾವಾರು ತಿಳಿದಿಲ್ಲ."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ಗುಂಪು ವಿಸ್ತರಿಸಿ."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಿರಿ."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ಸಂಪರ್ಕಗೊಂಡಿಲ್ಲ."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ರೋಮಿಂಗ್"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ಇನ್ಪುಟ್"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ಆನ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ಬ್ರೈಟ್ನೆಸ್ ಅನ್ನು ಅಡ್ಜಸ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಅದನ್ನು ಟಾಪ್ ಆ್ಯಪ್ ನಿಯಂತ್ರಿಸುತ್ತಿದೆ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ಸ್ವಯಂ-ತಿರುಗುವಿಕೆ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ಪರದೆಯನ್ನು ಸ್ವಯಂ-ತಿರುಗಿಸಿ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ಸ್ಥಳ"</string>
@@ -580,11 +582,11 @@
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"ಸ್ಕ್ರೀನ್ ಹಂಚಿಕೊಳ್ಳಿ"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಈ ಆಯ್ಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದೆ"</string>
<string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"ಹಂಚಿಕೊಳ್ಳಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಕಾಸ್ಟ್ ಮಾಡಬೇಕೆ?"</string>
- <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ಒಂದು ಆ್ಯಪ್ ಅನ್ನು ಕಾಸ್ಟ್ ಮಾಡಿ"</string>
+ <string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಿತ್ತರಿಸಬೇಕೇ?"</string>
+ <string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ಒಂದು ಆ್ಯಪ್ ಅನ್ನು ಬಿತ್ತರಿಸಿ"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಕ್ಯಾಸ್ಟ್ ಮಾಡಿ"</string>
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನೀವು ಕ್ಯಾಸ್ಟ್ ಮಾಡುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಏನಾದರೂ ಗೋಚರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್ವರ್ಡ್ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
- <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್ನಲ್ಲಿ ತೋರಿಸಿರುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡಿರುವುದು ಗೋಚರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್ವರ್ಡ್ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+ <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಬಿತ್ತರಿಸುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್ನಲ್ಲಿ ತೋರಿಸಿರುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡಿರುವುದು ಗೋಚರಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್ವರ್ಡ್ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಿತ್ತರಿಸಿ"</string>
<string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"ಬಿತ್ತರಿಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ಹಂಚಿಕೊಳ್ಳಲು ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ಮಲ್ಟಿಟಾಸ್ಕಿಂಗ್"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ಬಲಭಾಗದಲ್ಲಿ ಆ್ಯಪ್ ಮೂಲಕ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಬಳಸಿ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ಎಡಭಾಗದಲ್ಲಿ ಆ್ಯಪ್ ಮೂಲಕ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಬಳಸಿ"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ಫುಲ್ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಳಸಿ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ಡೆಸ್ಕ್ಟಾಪ್ ವೀಕ್ಷಣೆಯನ್ನು ಬಳಸಿ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸಿ ಮೋಡ್ ಬಳಸುವಾಗ ಬಲಭಾಗ ಅಥವಾ ಕೆಳಭಾಗದಲ್ಲಿರುವ ಆ್ಯಪ್ಗೆ ಬದಲಿಸಿ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸಿ ಮೋಡ್ ಬಳಸುವಾಗ ಎಡಭಾಗ ಅಥವಾ ಮೇಲ್ಭಾಗದಲ್ಲಿರುವ ಆ್ಯಪ್ಗೆ ಬದಲಿಸಿ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸುವ ಸಮಯದಲ್ಲಿ: ಒಂದು ಆ್ಯಪ್ನಿಂದ ಮತ್ತೊಂದು ಆ್ಯಪ್ಗೆ ಬದಲಿಸಿ"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ಕಡಿಮೆ-ಆದ್ಯತೆ ಸೂಚನೆಯ ಐಕಾನ್ಗಳನ್ನು ತೋರಿಸಿ"</string>
<string name="other" msgid="429768510980739978">"ಇತರ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ಟೈಲ್ ನ ಗಾತ್ರವನ್ನು ಟಾಗಲ್ ಮಾಡಿ"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ಟೈಲ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ಕೊನೆಯ ಸ್ಥಾನಕ್ಕೆ ಟೈಲ್ ಅನ್ನು ಸೇರಿಸಿ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ಟೈಲ್ ಸರಿಸಿ"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ಆ್ಯಪ್ಗಳನ್ನು ಬದಲಿಸಿ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ಮುಗಿದಿದೆ"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ಮುಂದಿನದು"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ಹಿಂತಿರುಗಿ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ನಿಮ್ಮ ಟಚ್ಪ್ಯಾಡ್ನಲ್ಲಿ ಮೂರು ಬೆರಳುಗಳನ್ನು ಬಳಸಿ ಎಡ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್ಗಳನ್ನು ನೋಡಲು, ಟಚ್ಪ್ಯಾಡ್ನಲ್ಲಿ ಮೂರು ಬೆರಳುಗಳಿಂದ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ ಹಾಗೂ ಹೋಲ್ಡ್ ಮಾಡಿ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ನಿಮ್ಮ ಎಲ್ಲಾ ಆ್ಯಪ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು, ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ನಲ್ಲಿರುವ ಆ್ಯಕ್ಷನ್ ಕೀಯನ್ನು ಒತ್ತಿರಿ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ಅರ್ಥಬದ್ಧವಾಗಿಸಲಾಗಿದೆ"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"ನೋಡಲು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"ಕೋಡ್ ವೀಕ್ಷಿಸಲು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ಸಂದರ್ಭೋಚಿತ ಶಿಕ್ಷಣ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ಹಿಂತಿರುಗಲು ನಿಮ್ಮ ಟಚ್ಪ್ಯಾಡ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ಮೂರು ಬೆರಳುಗಳಿಂದ ಎಡಕ್ಕೆ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ. ಇನ್ನಷ್ಟು ಗೆಸ್ಚರ್ಗಳನ್ನು ತಿಳಿಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 931daa0..0c43ea1 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"블루투스가 연결되었습니다."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"블루투스 기기 아이콘"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"기기 세부정보를 구성하려면 클릭하세요."</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. 기기 세부정보 구성"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"모든 기기 보기"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"새 기기와 페어링"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"배터리 잔량을 알 수 없습니다."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>에 연결되었습니다."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>에 연결됨"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"그룹을 펼칩니다."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"애플리케이션을 엽니다."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"연결되지 않았습니다."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"로밍"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"입력"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"보청기"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"켜는 중..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"상위 앱에서 밝기를 제어하고 있으므로 밝기를 조절할 수 없습니다."</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"자동 회전"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"화면 자동 회전"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"위치"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"멀티태스킹"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"앱이 오른쪽에 오도록 화면 분할 사용"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"앱이 왼쪽에 오도록 화면 분할 사용"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"전체 화면 사용"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"데스크톱 뷰 사용"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"화면 분할을 사용하는 중에 오른쪽 또는 아래쪽에 있는 앱으로 전환"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"화면 분할을 사용하는 중에 왼쪽 또는 위쪽에 있는 앱으로 전환하기"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"화면 분할 중: 다른 앱으로 바꾸기"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"최근 앱 보기"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"앱 전환"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"완료"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"다음"</string>
<string name="gesture_error_title" msgid="469064941635578511">"다시 시도해 보세요"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"뒤로"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"세 손가락을 사용해 터치패드에서 왼쪽 또는 오른쪽으로 스와이프하세요."</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index f1c4eef..b411bdc 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth байланышта"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth түзмөгүнүн сүрөтчөсү"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Түзмөктүн чоо-жайын конфигурациялоо үчүн чыкылдатыңыз"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Түзмөктүн чоо-жайын конфигурациялаңыз"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Бардык түзмөктөрдү көрүү"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Жаңы түзмөк кошуу"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батареянын деңгээли белгисиз."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> менен туташкан."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> менен туташты."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Топту жайып көрсөтүү."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Колдонмону ачуу."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Интернет жок."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Киргизүү"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Угуу аппараттары"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Күйгүзүлүүдө…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарыктыкты тууралоого болбойт, анткени аны жогорку колдонмо көзөмөлдөйт"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авто буруу"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Экранды авто буруу"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Жайгашкан жер"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Бир нече тапшырма аткаруу"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Колдонмону оңго жылдырып, экранды бөлүү"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Колдонмону солго жылдырып, экранды бөлүү"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Толук экранды колдонуу"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Компьютердик версияны колдонуу"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Бөлүнгөн экранда сол же төмөн жактагы колдонмого которулуу"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Бөлүнгөн экранды колдонуп жатканда сол же жогору жактагы колдонмого которулуңуз"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Экранды бөлүү режиминде бир колдонмону экинчисине алмаштыруу"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Акыркы колдонмолорду көрүү"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Колдонмолорду которуштуруу"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Бүттү"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Кийинки"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Кайталап көрүңүз!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Артка кайтуу"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Сенсордук тактаны үч манжаңыз менен солго же оңго сүрүңүз"</string>
diff --git a/packages/SystemUI/res/values-land/bools.xml b/packages/SystemUI/res/values-land/bools.xml
index c112edc..00e3e93 100644
--- a/packages/SystemUI/res/values-land/bools.xml
+++ b/packages/SystemUI/res/values-land/bools.xml
@@ -22,4 +22,6 @@
<!-- True when small screen (<sw600dp) is landscape. -->
<bool name="is_small_screen_landscape">true</bool>
+
+ <bool name="volume_dialog_ringer_drawer_should_open_to_the_side">true</bool>
</resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index de9694a..e9e585e 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ເຊື່ອມຕໍ່ Bluetooth ແລ້ວ."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ໄອຄອນອຸປະກອນ Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ຄລິກເພື່ອຕັ້ງຄ່າລາຍລະອຽດອຸປະກອນ"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. ຕັ້ງຄ່າລາຍລະອຽດອຸປະກອນ"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ເບິ່ງອຸປະກອນທັງໝົດ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ຈັບຄູ່ອຸປະກອນໃໝ່"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ບໍ່ຮູ້ເປີເຊັນແບັດເຕີຣີ."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"ເຊື່ອມຕໍ່ຫາ <xliff:g id="BLUETOOTH">%s</xliff:g> ແລ້ວ."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"ເຊື່ອມຕໍ່ຫາ <xliff:g id="CAST">%s</xliff:g> ແລ້ວ."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ຂະຫຍາຍກຸ່ມ."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ເປີດແອັບພລິເຄຊັນ."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ບໍ່ໄດ້ເຊື່ອມຕໍ່."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ໂຣມມິງ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ການປ້ອນຂໍ້ມູນ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ເຄື່ອງຊ່ວຍຟັງ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ກຳລັງເປີດ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ບໍ່ສາມາດປັບຄວາມແຈ້ງເນື່ອງຈາກມັນ ຖືກຄວບຄຸມໂດຍແອັບຍອດນິຍົມ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ໝຸນອັດຕະໂນມັດ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ສະຖານທີ່"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ການເຮັດຫຼາຍໜ້າວຽກພ້ອມກັນ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ໃຊ້ໂໝດແບ່ງໜ້າຈໍໂດຍໃຫ້ແອັບຢູ່ເບື້ອງຂວາ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ໃຊ້ໂໝດແບ່ງໜ້າຈໍໂດຍໃຫ້ແອັບຢູ່ເບື້ອງຊ້າຍ"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ໃຊ້ແບບເຕັມຈໍ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ໃຊ້ມຸມມອງເດັສທັອບ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ສະຫຼັບໄປໃຊ້ແອັບຢູ່ຂວາ ຫຼື ທາງລຸ່ມໃນຂະນະທີ່ໃຊ້ແບ່ງໜ້າຈໍ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ສະຫຼັບໄປໃຊ້ແອັບຢູ່ຊ້າຍ ຫຼື ທາງເທິງໃນຂະນະທີ່ໃຊ້ແບ່ງໜ້າຈໍ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ໃນລະຫວ່າງແບ່ງໜ້າຈໍ: ໃຫ້ປ່ຽນຈາກແອັບໜຶ່ງເປັນອີກແອັບໜຶ່ງ"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ສະແດງໄອຄອນການແຈ້ງເຕືອນຄວາມສຳຄັນຕ່ຳ"</string>
<string name="other" msgid="429768510980739978">"ອື່ນໆ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ສະຫຼັບຂະໜາດຂອງແຜ່ນ"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ລຶບແຜ່ນອອກ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ເພີ່ມແຜ່ນໃສ່ຕຳແໜ່ງສຸດທ້າຍ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ຍ້າຍແຜ່ນ"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ເບິ່ງແອັບຫຼ້າສຸດ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ສະຫຼັບແອັບ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ແລ້ວໆ"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ຕໍ່ໄປ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ກະລຸນາລອງໃໝ່!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ກັບຄືນ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ປັດຊ້າຍ ຫຼື ຂວາໂດຍໃຊ້ມືສາມນິ້ວຢູ່ແຜ່ນສໍາຜັດຂອງທ່ານ"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ເພື່ອເບິ່ງແອັບຫຼ້າສຸດ, ໃຫ້ໃຊ້ 3 ນິ້ວປັດຂຶ້ນ ແລ້ວຄ້າງໄວ້ເທິງແຜ່ນສໍາຜັດ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ເພື່ອເບິ່ງແອັບທັງໝົດຂອງທ່ານ, ໃຫ້ກົດປຸ່ມຄຳສັ່ງຢູ່ແປ້ນພິມຂອງທ່ານ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ປົກປິດໄວ້ແລ້ວ"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"ປົດລັອກເພື່ອເບິ່ງ"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"ປົດລັອກເພື່ອເບິ່ງລະຫັດ"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ການສຶກສາຕາມບໍລິບົດ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ໃຊ້ແຜ່ນສໍາຜັດຂອງທ່ານເພື່ອກັບຄືນ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ໃຊ້ 3 ນິ້ວປັດຊ້າຍ ຫຼື ຂວາ. ແຕະເພື່ອສຶກສາທ່າທາງເພີ່ມເຕີມ."</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 59f0ad34..0d4398e 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -150,7 +150,7 @@
<string name="cast_to_other_device_stop_dialog_title" msgid="7836517190930357326">"Sustabdyti perdavimą?"</string>
<string name="cast_to_other_device_stop_dialog_message_entire_screen_with_device" msgid="1474703115926205251">"Šiuo metu perduodate visą ekraną į šį įrenginį: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="cast_to_other_device_stop_dialog_message_entire_screen" msgid="8419219169553867625">"Šiuo metu perduodate visą ekraną į įrenginį netoliese"</string>
- <string name="cast_to_other_device_stop_dialog_message_specific_app_with_device" msgid="2715934698604085519">"Šiuo metu perduodate programą (<xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>) į šį įrenginį: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
+ <string name="cast_to_other_device_stop_dialog_message_specific_app_with_device" msgid="2715934698604085519">"Šiuo metu perduodate programą „<xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>“ į šį įrenginį: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="cast_to_other_device_stop_dialog_message_specific_app" msgid="8616103075630934513">"Šiuo metu į įrenginį netoliese perduodate šią programą: <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>"</string>
<string name="cast_to_other_device_stop_dialog_message_generic_with_device" msgid="9213582497852420203">"Šiuo metu perduodate į šį įrenginį: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="cast_to_other_device_stop_dialog_message_generic" msgid="4100272100480415076">"Šiuo metu perduodate į įrenginį netoliese"</string>
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Prisijungta prie „<xliff:g id="BLUETOOTH">%s</xliff:g>“."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Prisijungta prie <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Išskleisti grupę."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Atidaryti programą."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Neprijungta."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Tarptinklinis ryšys"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Įvestis"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Klausos aparatai"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Įjungiama…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Negalima koreguoti ryškumo, nes jį valdo viršuje esanti programa"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatinis pasukimas"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatiškai sukti ekraną"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vietovė"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Rodyti mažo prioriteto pranešimų piktogramas"</string>
<string name="other" msgid="429768510980739978">"Kita"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"perjungti išklotinės elemento dydį"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"pašalintumėte išklotinės elementą"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"pridėti išklotinės elementą paskutinėje pozicijoje"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Perkelti išklotinės elementą"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Peržiūrėkite naujausias programas, jutiklinėje dalyje perbraukę aukštyn trimis pirštais ir palaikę"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Jei norite peržiūrėti visas programas, paspauskite klaviatūros veiksmų klavišą"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Paslėpta"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Atrakinkite ir peržiūrėkite"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Atrakinkite ir peržiūrėkite kodą"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstinis švietimas"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Naudokite klaviatūrą, kad grįžtumėte atgal"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Perbraukite į kairę ar dešinę trimis pirštais. Palieskite, kad sužinotumėte daugiau gestų."</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 9962226..60e1e6f 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth savienojums ir izveidots."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth ierīces ikona"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Lai konfigurētu ierīces informāciju, noklikšķiniet"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurējiet ierīces informāciju."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Skatiet visas ierīces."</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Savienojiet pārī jaunu ierīci."</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akumulatora uzlādes līmenis procentos nav zināms."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ir izveidots savienojum ar <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Savienots ar ierīci <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Izvērst grupu."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Atvērt lietojumprogrammu."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Savienojums nav izveidots."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Viesabonēšana"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ievade"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Dzirdes aparāti"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Notiek ieslēgšana…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nevar mainīt spilgtumu, jo to kontrolē aktīvā lietotne."</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automātiska pagriešana"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automātiska ekrāna pagriešana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Atrašanās vieta"</string>
@@ -586,7 +588,7 @@
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"Apraidot visu ekrānu, ir redzams viss ekrāna saturs. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
<string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"Apraidot lietotni, ir redzams viss attiecīgajā lietotnē rādītais vai atskaņotais. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"Apraidīt ekrānu"</string>
- <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Lietotnes izvēlēšanās apraide"</string>
+ <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Lietotnes izvēle apraidei"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vai sākt kopīgošanu?"</string>
<string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kopīgošanas, ierakstīšanas vai apraides laikā Android var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
<string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Lietotnes kopīgošanas, ierakstīšanas vai apraides laikā Android var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Vairākuzdevumu režīms"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Izmantot ekrāna sadalīšanu ar lietotni labajā pusē"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Izmantot ekrāna sadalīšanu ar lietotni kreisajā pusē"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Izmantot pilnekrāna režīmu"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Izmantot skatu datorā"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Pāriet uz lietotni pa labi/lejā, kamēr izmantojat sadalīto ekrānu."</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Pāriet uz lietotni pa kreisi/augšā, kamēr izmantojat sadalīto ekrānu."</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ekrāna sadalīšanas režīmā: pārvietot lietotni no viena ekrāna uz otru"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Rādīt zemas prioritātes paziņojumu ikonas"</string>
<string name="other" msgid="429768510980739978">"Citi"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"pārslēgt elementa lielumu"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"noņemt elementu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"pievienotu elementu pēdējā pozīcijā"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Pārvietot elementu"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Skatīt nesen izmantotās lietotnes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Pārslēgties starp lietotnēm"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gatavs"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Tālāk"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Mēģiniet vēlreiz."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atpakaļ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Skārienpaliktnī ar trīs pirkstiem velciet pa kreisi vai pa labi."</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Lai skatītu nesenās lietotnes, ar trīs pirkstiem uz skārienpaliktņa velciet augšup un turiet."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Lai skatītu visas savas lietotnes, tastatūrā nospiediet darbību taustiņu."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Rediģēts"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Atbloķējiet, lai skatītu"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Atbloķējiet, lai skatītu kodu"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstuāla pamācība"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Atgriešanās, izmantojot skārienpaliktni"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Ar trīs pirkstiem velciet pa kreisi vai pa labi. Lai apgūtu citus žestus, pieskarieties šeit."</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 9d9c074..761eac1 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth е поврзан."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Икона за уред со Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Кликнете за да ги конфигурирате деталите за уредот"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Конфигурирајте ги деталите за уредот"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Погледнете ги сите уреди"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Спарете нов уред"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Процентот на батеријата е непознат."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Поврзано со <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Поврзано со <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Проширете ја групата."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Отворете ја апликацијата."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Не е поврзана"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роаминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Влез"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни помагала"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Се вклучува…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не може да се приспособи осветленоста бидејќи е контролирана од горната апликација"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматско ротирање"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматско ротирање на екранот"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локација"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Мултитаскинг"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Користете поделен екран со апликацијата оддесно"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Користете поделен екран со апликацијата одлево"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Користете цел екран"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Користете приказ на компјутер"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Префрлете се на апликацијата десно или долу при користењето поделен екран"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Префрлете се на апликацијата лево или горе при користењето поделен екран"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"При поделен екран: префрлете ги аплик. од едната на другата страна"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Прикажи ги неодамнешните апликации"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Сменете ги апликациите"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Следно"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Обидете се повторно!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Повлечете налево или надесно со три прста на допирната подлога"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 301c3da..aae5ac48 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ബ്ലൂടൂത്ത് കണക്റ്റുചെയ്തു."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth ഉപകരണ ഐക്കൺ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ഉപകരണത്തിന്റെ വിശദാംശങ്ങൾ കോൺഫിഗർ ചെയ്യാൻ ക്ലിക്ക് ചെയ്യുക"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. ഉപകരണ വിശദാംശങ്ങൾ കോൺഫിഗർ ചെയ്യുക"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"എല്ലാ ഉപകരണങ്ങളും കാണുക"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"പുതിയ ഉപകരണം ജോടിയാക്കുക"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ബാറ്ററി ശതമാനം അജ്ഞാതമാണ്."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തു."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തു."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ഗ്രൂപ്പ് വികസിപ്പിക്കുക."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ആപ്പ് തുറക്കുക."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"കണക്റ്റുചെയ്തിട്ടില്ല."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"റോമിംഗ്"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ഇൻപുട്ട്"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ശ്രവണ സഹായികൾ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ഓണാക്കുന്നു…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"തെളിച്ചം അഡ്ജസ്റ്റ് ചെയ്യാനാകില്ല, അത് നിയന്ത്രിക്കുന്നത് ഏറ്റവും മുകളിലുള്ള ആപ്പാണ്"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"സ്ക്രീൻ സ്വയമേവ തിരിയൽ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"സ്ക്രീൻ സ്വയമേവ തിരിക്കുക"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ലൊക്കേഷൻ"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"മൾട്ടിടാസ്കിംഗ്"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"വലതുവശത്തുള്ള ആപ്പിനൊപ്പം സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുക"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ഇടതുവശത്തുള്ള ആപ്പിനൊപ്പം സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുക"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"പൂർണ സ്ക്രീൻ ഉപയോഗിക്കുക"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ഡെസ്ക്ടോപ്പ് വ്യൂ ഉപയോഗിക്കുക"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുമ്പോൾ വലതുവശത്തെ/താഴത്തെ ആപ്പിലേക്ക് മാറുക"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുമ്പോൾ ഇടതുവശത്തെ/മുകളിലെ ആപ്പിലേക്ക് മാറൂ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"സ്ക്രീൻ വിഭജന മോഡിൽ: ഒരു ആപ്പിൽ നിന്ന് മറ്റൊന്നിലേക്ക് മാറുക"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"പ്രാധാന്യം കുറഞ്ഞ അറിയിപ്പ് ചിഹ്നങ്ങൾ"</string>
<string name="other" msgid="429768510980739978">"മറ്റുള്ളവ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ടൈലിന്റെ വലുപ്പം മാറ്റുക"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ടൈൽ നീക്കം ചെയ്യുക"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"അവസാന ഭാഗത്ത് ടൈൽ ചേർക്കുക"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ടൈൽ നീക്കുക"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"അടുത്തിടെയുള്ള ആപ്പുകൾ കാണുക"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ആപ്പുകൾ മാറുക"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"പൂർത്തിയായി"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"അടുത്തത്"</string>
<string name="gesture_error_title" msgid="469064941635578511">"വീണ്ടും ശ്രമിക്കുക!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"മടങ്ങുക"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ടച്ച്പാഡിൽ മൂന്ന് വിരലുകൾ കൊണ്ട് ഇടത്തേക്കോ വലത്തേക്കോ സ്വൈപ്പ് ചെയ്യുക"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"അടുത്തിടെ ഉപയോഗിച്ച ആപ്പുകൾ കാണാൻ, മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് ടച്ച്പാഡിൽ സ്വൈപ്പ് ചെയ്ത് പിടിക്കുക"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"എല്ലാ ആപ്പുകളും കാണാൻ, നിങ്ങളുടെ കീബോർഡിലെ ആക്ഷൻ കീ അമർത്തുക"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"മറച്ചത്"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"കാണാൻ, അൺലോക്ക് ചെയ്യുക"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"കോഡ് കാണാൻ അൺലോക്ക് ചെയ്യുക"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"സന്ദർഭോചിത വിദ്യാഭ്യാസം"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"തിരികെ പോകാൻ നിങ്ങളുടെ ടച്ച്പാഡ് ഉപയോഗിക്കുക"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"മൂന്ന് വിരലുകൾ കൊണ്ട് ഇടത്തേക്കോ വലത്തേക്കോ സ്വൈപ്പ് ചെയ്യൂ. കൂടുതൽ ജെസ്ച്ചറുകളറിയാൻ ടാപ്പ് ചെയ്യൂ."</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 7c2e69c..5938893 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth холбогдсон."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth төхөөрөмжийн дүрс тэмдэг"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Төхөөрөмжийн дэлгэрэнгүйг тохируулахын тулд товшино уу"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Төхөөрөмжийн дэлгэрэнгүйг тохируулна уу"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Бүх төхөөрөмжийг харах"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Шинэ төхөөрөмж хослуулах"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батарейн хувь тодорхойгүй байна."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>-тай холбогдсон."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>-д холбогдсон."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Бүлгийг дэлгэнэ үү."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Аппликейшныг нээнэ үү."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Холбогдоогүй."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Оролт"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Сонсголын төхөөрөмж"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Асааж байна…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Гэрэлтүүлгийгдавуу эрхтэй аппаас хянаж байгаа тул тохируулах боломжгүй"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматаар эргэх"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Дэлгэцийг автоматаар эргүүлэх"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Байршил"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Олон ажил зэрэг хийх"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Аппыг баруун талд байгаагаар дэлгэцийг хуваахыг ашиглах"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Аппыг зүүн талд байгаагаар дэлгэцийг хуваахыг ашиглах"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Бүтэн дэлгэцийг ашиглах"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Дэлгэц дээр харагдах байдлыг ашиглах"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Дэлгэц хуваахыг ашиглаж байхдаа баруун талд эсвэл доор байх апп руу сэлгэ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Дэлгэц хуваахыг ашиглаж байхдаа зүүн талд эсвэл дээр байх апп руу сэлгэ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Дэлгэц хуваах үеэр: аппыг нэгээс нөгөөгөөр солих"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Саяхны аппуудыг харах"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Апп сэлгэх"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Болсон"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Дараах"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Дахин оролдоно уу!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Буцах"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Мэдрэгч самбар дээрээ гурван хуруугаа ашиглан зүүн эсвэл баруун тийш шударна уу"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 6889179..c3c7160 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> शी कनेक्ट केले."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> शी कनेक्ट केले."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"गटाचा विस्तार करा."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"अॅप उघडा."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"कनेक्ट केले नाही."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिंग"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"श्रवणयंत्रे"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सुरू करत आहे…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ब्राइटनेस ॲडजस्ट करू शकत नाही, कारण तो टॉप ॲपद्वारे नियंत्रित केला जात आहे"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ऑटो-रोटेट स्क्रीन"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"स्थान"</string>
@@ -581,7 +586,7 @@
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"एक अॅप कास्ट करा"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"संपूर्ण स्क्रीन कास्ट करा"</string>
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"तुम्ही तुमची संपूर्ण स्क्रीन कास्ट करता, तेव्हा तुमच्या स्क्रीनवरील सर्व गोष्टी दृश्यमान असतात. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
- <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"तुम्ही अॅप कास्ट करता, तेव्हा त्या अॅपमध्ये दाखवल्या किंवा प्ले होणाऱ्या सर्व गोष्टी दृश्यमान असतात. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+ <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"तुम्ही अॅप कास्ट करता, तेव्हा त्या अॅपमध्ये दाखवलेल्या किंवा प्ले होणाऱ्या सर्व गोष्टी दृश्यमान असतात. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"स्क्रीन कास्ट करा"</string>
<string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"कास्ट करण्यासाठी ॲप निवडा"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"शेअर करणे सुरू करायचे आहे का?"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"कमी प्राधान्य सूचना आयकन दर्शवा"</string>
<string name="other" msgid="429768510980739978">"अन्य"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"टाइलचा आकार टॉगल करा"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"टाइल काढून टाका"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"टाइल शेवटच्या स्थानावर जोडा"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"टाइल हलवा"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"अलीकडील ॲप्स पाहण्यासाठी, टचपॅडवर तीन बोटांनी वरती स्वाइप करा आणि धरून ठेवा"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"तुमची सर्व ॲप्स पाहण्यासाठी, तुमच्या कीबोर्डवरील अॅक्शन की प्रेस करा"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"रिडॅक्ट केलेले"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"पाहण्यासाठी अनलॉक करा"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"कोड पाहण्यासाठी अनलॉक करा"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"संदर्भीय शिक्षण"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"मागे जाण्यासाठी तुमचा टचपॅड वापरा"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"तीन बोटांनी डावीकडे किंवा उजवीकडे स्वाइप करा. आणखी जेश्चर जाणून घेण्यासाठी टॅप करा."</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index b7e3153..3c96d0a 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth disambungkan."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon peranti Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik untuk mengkonfigurasi butiran peranti"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurasikan butiran peranti"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Lihat semua peranti"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Gandingkan peranti baharu"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Peratusan kuasa bateri tidak diketahui."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Disambungkan kepada <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Disambungkan ke <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Kembangkan kumpulan."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Buka aplikasi."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Tidak disambungkan."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Perayauan"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu pendengaran"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Menghidupkan…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat melaraskan kecerahan kerana peranti dikawal oleh apl popular"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoputar"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoputar skrin"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Berbilang tugas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gunakan skrin pisah dengan apl pada sebelah kanan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gunakan skrin pisah dengan apl pada sebelah kiri"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Gunakan skrin penuh"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Gunakan paparan desktop"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Tukar kepada apl di sebelah kanan/bawah semasa menggunakan skrin pisah"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Tukar kepada apl di sebelah kiri/atas semasa menggunakan skrin pisah"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Semasa skrin pisah: gantikan apl daripada satu apl kepada apl lain"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Tunjukkan ikon pemberitahuan keutamaan rendah"</string>
<string name="other" msgid="429768510980739978">"Lain-lain"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"togol saiz jubin"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"alih keluar jubin"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"tambahkan jubin pada kedudukan terakhir"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Alihkan jubin"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Lihat apl terbaharu"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Tukar apl"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Selesai"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Seterusnya"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Cuba lagi!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kembali"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Leret ke kiri atau ke kanan menggunakan tiga jari pada pad sentuh"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Untuk melihat apl terbaharu, leret ke atas dan tahan dengan tiga jari pada pad sentuh"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Untuk melihat semua apl, tekan kekunci tindakan pada papan kekunci"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Disunting"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Buka kunci untuk lihat"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Buka kunci untuk melihat kod"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Pendidikan kontekstual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gunakan pad sentuh anda untuk kembali"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Leret ke kiri atau ke kanan dengan tiga jari. Ketik dan ketahui lebih lanjut tentang gerak isyarat."</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 72f0369..b259e39 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ဘလူးတုသ်ချိတ်ဆက်ထားမှု"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ဘလူးတုသ်သုံးစက် သင်္ကေတ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"စက်အသေးစိတ်ကို စီစဉ်သတ်မှတ်ရန် နှိပ်ပါ"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>။ စက်အသေးစိတ်ကို စီစဉ်သတ်မှတ်နိုင်သည်"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"စက်အားလုံးကြည့်ရန်"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"စက်အသစ် တွဲချိတ်ရန်"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ဘက်ထရီရာခိုင်နှုန်းကို မသိပါ။"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>သို့ ချိတ်ဆက်ထား"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> သို့ချိတ်ဆက်ထားပါသည်။"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"အုပ်စုကို ပိုပြသည်။"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"အပလီကေးရှင်းကို ဖွင့်သည်။"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ချိတ်ဆက်မထားပါ"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ပြင်ပကွန်ရက်သုံးခြင်း"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"အဝင်"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"နားကြားကိရိယာ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ဖွင့်နေသည်…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"၎င်းကို ထိပ်ဆုံးရှိအက်ပ်က ထိန်းချုပ်နေသဖြင့် တောက်ပမှုကို ပြင်ဆင်၍မရပါ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"အော်တို-လည်"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"မျက်နှာပြင်အား အလိုအလျောက်လှည့်ခြင်း"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"တည်နေရာ"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"တစ်ပြိုင်နက် များစွာလုပ်ခြင်း"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"အက်ပ်ကို ညာ၌ထားကာ မျက်နှာပြင် ခွဲ၍ပြသခြင်း သုံးရန်"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"အက်ပ်ကို ဘယ်၌ထားကာ မျက်နှာပြင် ခွဲ၍ပြသခြင်း သုံးရန်"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ဖန်သားပြင်အပြည့် သုံးရန်"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ဒက်စ်တော့မြင်ကွင်း သုံးရန်"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"မျက်နှာပြင်ခွဲ၍ပြသခြင်း သုံးစဉ် ညာ (သို့) အောက်ရှိအက်ပ်သို့ ပြောင်းရန်"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"မျက်နှာပြင် ခွဲ၍ပြသခြင်းသုံးစဉ် ဘယ် (သို့) အထက်ရှိအက်ပ်သို့ ပြောင်းရန်"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"မျက်နှာပြင် ခွဲ၍ပြသစဉ်- အက်ပ်တစ်ခုကို နောက်တစ်ခုနှင့် အစားထိုးရန်"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"မကြာသေးမီကအက်ပ်များကို ကြည့်ရန်"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"အက်ပ်များကူးပြောင်းခြင်း"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ပြီးပြီ"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ရှေ့သို့"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ထပ်စမ်းကြည့်ပါ။"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ပြန်သွားရန်"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"သင့်တာ့ချ်ပက်တွင် လက်သုံးချောင်းဖြင့် ဘယ် (သို့) ညာသို့ ပွတ်ဆွဲပါ"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 72d7956..1c655f1 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth er tilkoblet."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon for Bluetooth-enheter"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klikk for å konfigurere enhetsdetaljer"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurer enhetsdetaljer"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Se alle enheter"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Koble til en ny enhet"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batteriprosenten er ukjent."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Koblet til <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Koblet til <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Utvid gruppen."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Åpne appen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ikke tilkoblet."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Innenhet"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Slår på …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan ikke justere lysstyrken, fordi den kontrolleres av appen på toppen"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotér automatisk"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotér skjermen automatisk"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Sted"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Bruk delt skjerm med appen til høyre"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Bruk delt skjerm med appen til venstre"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Bruk fullskjerm"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Bruk datamaskinvisning"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bytt til appen til høyre eller under mens du bruker delt skjerm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bytt til appen til venstre eller over mens du bruker delt skjerm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"I delt skjerm: Bytt ut en app"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se nylige apper"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Bytt app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Ferdig"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Neste"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Prøv på nytt."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gå tilbake"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Sveip til venstre eller høyre med tre fingre på styreflaten"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 8e0ee77..133003e 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ब्लुटुथ जडान भयो।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ब्लुटुथ डिभाइस जनाउने आइकन"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"डिभाइसको विवरण कन्फिगर गर्न क्लिक गर्नुहोस्"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>। डिभाइसको विवरण कन्फिगर गर्नुहोस्"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"सबै डिभाइस हेर्नुहोस्"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"नयाँ डिभाइस कनेक्ट गर्नुहोस्"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ब्याट्रीमा कति प्रतिशत चार्ज छ भन्ने कुराको जानाकरी छैन।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> मा जडित।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> मा कनेक्ट गरियो।"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"समूह एक्स्पान्ड गर्नुहोस्।"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"एप खोल्नुहोस्।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"जडान नगरिएको।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिङ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"हियरिङ डिभाइसहरू"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सक्रिय गर्दै…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"टप एपले चमक नियन्त्रण गरिरहेकाले चमक मिलाउन मिल्दैन"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"अटो रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रिन स्वतःघुम्ने"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"लोकेसन"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"मल्टिटास्किङ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"हालको एप दायाँ भागमा पारेर स्प्लिट स्क्रिन प्रयोग गर्नुहोस्"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"हालको एप बायाँ भागमा पारेर स्प्लिट स्क्रिन प्रयोग गर्नुहोस्"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"फुल स्क्रिन प्रयोग गर्नुहोस्"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"डेस्कटप भ्यू प्रयोग गर्नुहोस्"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रिन प्रयोग गर्दै गर्दा दायाँ वा तलको एप चलाउनुहोस्"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रिन प्रयोग गर्दै गर्दा बायाँ वा माथिको एप चलाउनुहोस्"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"स्प्लिट स्क्रिन प्रयोग गरिएका बेला: एउटा स्क्रिनमा भएको एप अर्कोमा लैजानुहोस्"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"हालसालै चलाइएका एपहरू हेर्नुहोस्"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"एपहरू बदल्नुहोस्"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"सम्पन्न भयो"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"अर्को"</string>
<string name="gesture_error_title" msgid="469064941635578511">"फेरि प्रयास गर्नुहोस्!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"पछाडि जानुहोस्"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"तीन वटा औँला प्रयोग गरी टचप्याडमा बायाँ वा दायाँतिर स्वाइप गर्नुहोस्"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index e789798..3881907 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-verbinding ingesteld."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icoon voor bluetooth-apparaat"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik om de apparaatgegevens in te stellen"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Apparaatgegevens instellen"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Alle apparaten bekijken"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Nieuw apparaat koppelen"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batterijpercentage onbekend."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Verbonden met <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Verbonden met <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Groep uitvouwen."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"App openen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Niet verbonden."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hoortoestellen"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aanzetten…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan de helderheid niet aanpassen omdat deze wordt beheerd door de bovenste app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatisch draaien"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Scherm automatisch draaien"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Locatie"</string>
@@ -421,7 +423,7 @@
<string name="hearing_devices_presets_error" msgid="350363093458408536">"Kan voorinstelling niet updaten"</string>
<string name="hearing_devices_preset_label" msgid="7878267405046232358">"Voorinstelling"</string>
<string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"Geselecteerd"</string>
- <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgeving"</string>
+ <string name="hearing_devices_ambient_label" msgid="629440938614895797">"Omgevingsgeluid"</string>
<string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"Links"</string>
<string name="hearing_devices_ambient_control_right" msgid="6192137602448918383">"Rechts"</string>
<string name="hearing_devices_ambient_expand_controls" msgid="2131816068187709200">"Uitvouwen naar gescheiden bediening voor links en rechts"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasken"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gesplitst scherm gebruiken met de app aan de rechterkant"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gesplitst scherm gebruiken met de app aan de linkerkant"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Volledig scherm gebruiken"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Desktopweergave gebruiken"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Naar de app rechts of onderaan gaan als je een gesplitst scherm gebruikt"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Naar de app links of bovenaan gaan als je een gesplitst scherm gebruikt"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tijdens gesplitst scherm: een app vervangen door een andere"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Recente apps bekijken"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Wisselen tussen apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klaar"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Volgende"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Probeer het nog eens."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Terug"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe met 3 vingers naar links of rechts op de touchpad"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 469ae28..9c561c9 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ବ୍ଲୁଟୂଥ୍ ସଂଯୋଗ କରାଯାଇଛି।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ବ୍ଲୁଟୁଥ ଡିଭାଇସ ଆଇକନ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ଡିଭାଇସ ବିବରଣୀକୁ କନଫିଗର କରିବା ପାଇଁ କ୍ଲିକ କରନ୍ତୁ"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>। ଡିଭାଇସ ବିବରଣୀ କନଫିଗର କରନ୍ତୁ"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ସମସ୍ତ ଡିଭାଇସ ଦେଖନ୍ତୁ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ନୂଆ ଡିଭାଇସ ପେୟାର କରନ୍ତୁ"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ବ୍ୟାଟେରୀ ଶତକଡ଼ା ଅଜଣା ଅଟେ।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ସହ ସଂଯୁକ୍ତ"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> ସହିତ ସଂଯୁକ୍ତ।"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ଗ୍ରୁପକୁ ବିସ୍ତାର କରନ୍ତୁ।"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ଆପ୍ଲିକେସନ ଖୋଲନ୍ତୁ।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"କନେକ୍ଟ ହୋଇନାହିଁ।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ରୋମିଙ୍ଗ"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ଇନପୁଟ୍"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ଅନ୍ ହେଉଛି…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ଟପ ଆପ ଦ୍ୱାରା ଉଜ୍ଜ୍ୱଳତା ନିୟନ୍ତ୍ରିତହେଉଥିବା ଯୋଗୁଁ ଏହାକୁ ଆଡଜଷ୍ଟ କରିପାରିବେ ନାହିଁ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ଅଟୋ-ରୋଟେଟ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ଅଟୋ-ରୋଟେଟ ସ୍କ୍ରିନ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ଲୋକେସନ"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ମଲ୍ଟିଟାସ୍କିଂ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ଡାହାଣରେ ଆପ ସହିତ ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ବାମରେ ଆପ ସହିତ ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ଡେସ୍କଟପ ଭ୍ୟୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବା ସମୟରେ ଡାହାଣପଟର ବା ତଳର ଆପକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବା ସମୟରେ ବାମପଟର ବା ଉପରର ଆପକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ସମୟରେ: କୌଣସି ଆପକୁ ଗୋଟିଏରୁ ଅନ୍ୟ ଏକ ଆପରେ ବଦଳାନ୍ତୁ"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ବର୍ତ୍ତମାନର ଆପ୍ସ ଭ୍ୟୁ କରନ୍ତୁ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ଆପ୍ସକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ହୋଇଗଲା"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ପରବର୍ତ୍ତୀ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ଆପଣଙ୍କ ଟଚପେଡରେ ତିନୋଟି ଆଙ୍ଗୁଠି ବ୍ୟବହାର କରି ବାମ କିମ୍ବା ଡାହାଣକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 70d2497..6027538 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ।"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ਗਰੁੱਪ ਦਾ ਵਿਸਤਾਰ ਕਰੋ।"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ਐਪਲੀਕੇਸ਼ਨ ਖੋਲ੍ਹੋ।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ਰੋਮਿੰਗ"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ਇਨਪੁੱਟ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ਚਮਕ ਨੂੰ ਵਿਵਸਥਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਪਹਿਲਾਂ ਚੱਲ ਰਹੀ ਐਪ ਵੱਲੋਂ ਕੰਟਰੋਲ ਕਰਨ ਕਰਕੇ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ਸਵੈ-ਘੁਮਾਓ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ਟਿਕਾਣਾ"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੇ ਸੂਚਨਾ ਪ੍ਰਤੀਕਾਂ ਨੂੰ ਦਿਖਾਓ"</string>
<string name="other" msgid="429768510980739978">"ਹੋਰ"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ਟਾਇਲ ਦੇ ਆਕਾਰ ਨੂੰ ਟੌਗਲ ਕਰੋ"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ਟਾਇਲ ਹਟਾਓ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ਪਿਛਲੀ ਸਥਿਤੀ \'ਤੇ ਟਾਇਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ਟਾਇਲ ਨੂੰ ਲਿਜਾਓ"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ਹਾਲੀਆ ਐਪਾਂ ਨੂੰ ਦੇਖਣ ਲਈ, ਟੱਚਪੈਡ \'ਤੇ ਤਿੰਨ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰ ਕੇ ਦਬਾਈ ਰੱਖੋ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ਆਪਣੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਨੂੰ ਦੇਖਣ ਲਈ, ਆਪਣੇ ਕੀ-ਬੋਰਡ \'ਤੇ ਕਾਰਵਾਈ ਕੁੰਜੀ ਨੂੰ ਦਬਾਓ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ਅਸਪਸ਼ਟ ਬਣਾਇਆ ਗਿਆ"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"ਦੇਖਣ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"ਕੋਡ ਦੇਖਣ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ਸੰਦਰਭੀ ਸਿੱਖਿਆ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ਪਿੱਛੇ ਜਾਣ ਲਈ ਆਪਣੇ ਟੱਚਪੈਡ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ਤਿੰਨ ਉਂਗਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਖੱਬੇ ਜਾਂ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ। ਹੋਰ ਇਸ਼ਾਰਿਆਂ ਨੂੰ ਜਾਣਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 6a4b3d5..35ff6c9 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth połączony."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona urządzenia Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknij, aby skonfigurować szczegóły urządzenia"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Skonfiguruj szczegóły urządzenia"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Zobacz wszystkie urządzenia"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Sparuj nowe urządzenie"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Poziom naładowania baterii jest nieznany."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Połączono z <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Połączono z urządzeniem <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Rozwiń grupę."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otwórz aplikację."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nie połączono."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Wejście"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparaty słuchowe"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Włączam…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nie można dostosować jasności, ponieważ jest onakontrolowana przez aplikację na pierwszym planie"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoobracanie"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoobracanie ekranu"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokalizacja"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Wielozadaniowość"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Podziel ekran z aplikacją widoczną po prawej"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Podziel ekran z aplikacją widoczną po lewej"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Użyj trybu pełnoekranowego"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Użyj wersji na komputery"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Przełącz się na aplikację po prawej lub poniżej na podzielonym ekranie"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Przełącz się na aplikację po lewej lub powyżej na podzielonym ekranie"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Podczas podzielonego ekranu: zastępowanie aplikacji"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Wyświetlanie ostatnich aplikacji"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Przełączanie aplikacji"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotowe"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Dalej"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Spróbuj jeszcze raz"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Wróć"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Przesuń 3 palcami w prawo lub w lewo na touchpadzie"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 42ce3f4..fc7e2af 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícone de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Clique para configurar os detalhes do dispositivo"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configurar detalhes do dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ver todos os dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Parear novo dispositivo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentagem da bateria desconhecida."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Conectado a <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expandir grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abrir aplicativo."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Sem conexão."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo controlado pelo app principal"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar a tela dividida com o app à direita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar a tela dividida com o app à esquerda"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Usar tela cheia"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Usar a versão para computadores"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Mudar para o app à direita ou abaixo ao usar a tela dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Mudar para o app à esquerda ou acima ao usar a tela dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Com a tela dividida: substituir um app por outro"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver os apps recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Mudar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Concluído"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Avançar"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Tente de novo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Voltar"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Deslize para a esquerda ou direita com 3 dedos no touchpad"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
index b16d6f2..0233a36 100644
--- a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
@@ -58,8 +58,8 @@
</string-array>
<string-array name="tile_states_flashlight">
<item msgid="3465257127433353857">"Indisponível"</item>
- <item msgid="5044688398303285224">"Desativada"</item>
- <item msgid="8527389108867454098">"Ativada"</item>
+ <item msgid="5044688398303285224">"Apagada"</item>
+ <item msgid="8527389108867454098">"Acesa"</item>
</string-array>
<string-array name="tile_states_rotation">
<item msgid="4578491772376121579">"Indisponível"</item>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 37ec3da..14b85b7 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ligado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ligado a <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expanda o grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abra a aplicação."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Sem ligação."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"A ativar..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho porque está a ser controlado pela app principal"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotação auto."</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rodar o ecrã automaticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar ícones de notificações de prioridade baixa"</string>
<string name="other" msgid="429768510980739978">"Outro"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ativar/desativar o tamanho do mosaico"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remover o cartão"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"adicionar o mosaico à última posição"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover cartão"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver as apps recentes, deslize rapidamente para cima e mantenha premido com 3 dedos no touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas as suas apps, prima a tecla de ação no teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Revisto"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Desbloqueie para ver"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Desbloqueie para ver o código"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educação contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use o touchpad para retroceder"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Deslize rapidamente para a esquerda ou direita com 3 dedos. Toque para aprender mais gestos."</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 42ce3f4..fc7e2af 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícone de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Clique para configurar os detalhes do dispositivo"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configurar detalhes do dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ver todos os dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Parear novo dispositivo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentagem da bateria desconhecida."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Conectado a <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Expandir grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Abrir aplicativo."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Sem conexão."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo controlado pelo app principal"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar a tela dividida com o app à direita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar a tela dividida com o app à esquerda"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Usar tela cheia"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Usar a versão para computadores"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Mudar para o app à direita ou abaixo ao usar a tela dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Mudar para o app à esquerda ou acima ao usar a tela dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Com a tela dividida: substituir um app por outro"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver os apps recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Mudar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Concluído"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Avançar"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Tente de novo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Voltar"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Deslize para a esquerda ou direita com 3 dedos no touchpad"</string>
diff --git a/packages/SystemUI/res/values-pt/tiles_states_strings.xml b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
index b16d6f2..0233a36 100644
--- a/packages/SystemUI/res/values-pt/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
@@ -58,8 +58,8 @@
</string-array>
<string-array name="tile_states_flashlight">
<item msgid="3465257127433353857">"Indisponível"</item>
- <item msgid="5044688398303285224">"Desativada"</item>
- <item msgid="8527389108867454098">"Ativada"</item>
+ <item msgid="5044688398303285224">"Apagada"</item>
+ <item msgid="8527389108867454098">"Acesa"</item>
</string-array>
<string-array name="tile_states_rotation">
<item msgid="4578491772376121579">"Indisponível"</item>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index a23f95e..b577be5 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Conectat prin Bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Pictograma de dispozitiv Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Dă clic pentru a configura detaliile dispozitivului"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configurează detaliile dispozitivului"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Vezi toate dispozitivele"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Asociază un nou dispozitiv"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Procentajul bateriei este necunoscut."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectat la <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"S-a stabilit conexiunea la <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Extinde grupul."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Deschide aplicația."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Neconectat."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Intrare"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparate auditive"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Se activează..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nu se poate ajusta luminozitatea deoarece este controlată de aplicația de top"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotire automată"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotirea automată a ecranului"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Locație"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Folosește ecranul împărțit cu aplicația în dreapta"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Folosește ecranul împărțit cu aplicația în stânga"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Folosește ecranul complet"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Folosește afișarea pe desktop"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Treci la aplicația din dreapta sau de mai jos cu ecranul împărțit"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Treci la aplicația din stânga sau de mai sus cu ecranul împărțit"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"În modul ecran împărțit: înlocuiește o aplicație cu alta"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Vezi aplicațiile recente"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Comută între aplicații"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gata"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Înainte"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Încearcă din nou!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Înapoi"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Glisează la stânga sau la dreapta cu trei degete pe touchpad"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 1d40a6c..03b5423 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-соединение установлено."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Значок устройства Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Нажмите, чтобы изменить информацию об устройстве"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"Настройка устройства \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\""</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Показать все устройства"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Подключить устройство"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Уровень заряда батареи в процентах неизвестен."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>: подключено."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Подключено к: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Развернуть группу."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Открыть приложение."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Не подключено"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Устройство ввода"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слуховые аппараты"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включение…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Невозможно изменить яркость,так как она регулируется общими настройками."</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоповорот"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоповорот экрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Геолокация"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Многозадачность"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Разделить экран и поместить открытое приложение справа"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Разделить экран и поместить открытое приложение слева"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Полноэкранный режим"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Версия для ПК"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Перейти к приложению справа или внизу на разделенном экране"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Перейти к приложению слева или вверху на разделенном экране"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"В режиме разделения экрана заменить одно приложение другим"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Показывать значки уведомлений с низким приоритетом"</string>
<string name="other" msgid="429768510980739978">"Другое"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"изменить размер параметра"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"удалить панель"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"добавить параметр в конец"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Переместить панель"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Просмотр недавних приложений"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Переход в другое приложение"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Далее"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Попробуйте ещё раз"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Проведите тремя пальцами влево или вправо по сенсорной панели."</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Чтобы увидеть недавние приложения, проведите по сенсорной панели тремя пальцами вверх и удерживайте."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Чтобы открыть список всех своих приложений, нажмите клавишу действия."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Скрыто"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Разблокируйте экран, чтобы посмотреть."</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Разблокируйте экран, чтобы посмотреть код."</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстные подсказки"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Используйте сенсорную панель, чтобы возвращаться назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Для этого проведите тремя пальцами влево или вправо. Чтобы посмотреть другие жесты, нажмите здесь."</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 440b320..15441b5 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"බ්ලූටූත් සම්බන්ධිතයි."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"බ්ලූටූත් උපාංග නිරූපකය"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"උපාංග විස්තර වින්යාස කිරීමට ක්ලික් කරන්න"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. උපාංග විස්තර වින්යාස කරන්න"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"සියලු උපාංග බලන්න"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"නව උපාංගය යුගල කරන්න"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"බැටරි ප්රතිශතය නොදනී."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> වෙත සම්බන්ධ කරන ලදි."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> වෙත සම්බන්ධ විය."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"සමූහය දිගහැරීම"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"යෙදුම විවෘත කරන්න."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"සම්බන්ධ වී නැත."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"රෝමිං"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ආදානය"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ශ්රවණාධාරක"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ක්රියාත්මක කරමින්…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ඉහළ යෙදුම මඟින් එය පාලනය වන නිසාදීප්තිය ගැළපුම් කළ නොහැක"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ස්වයංක්රීය කරකැවීම"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ස්වයංක්රීයව-භ්රමණය වන තිරය"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ස්ථානය"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"බහුකාර්ය"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"දකුණේ යෙදුම සමග බෙදීම් තිරය භාවිතා කරන්න"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"වම් පැත්තේ යෙදුම සමග බෙදීම් තිරය භාවිතා කරන්න"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"පූර්ණ තිරය භාවිතා කරන්න"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ඩෙස්ක්ටොප් දසුන භාවිතා කරන්න"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"බෙදුම් තිරය භාවිත කරන අතරතුර දකුණේ හෝ පහළින් ඇති යෙදුමට මාරු වන්න"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"බෙදුම් තිරය භාවිත කරන අතරතුර වමේ හෝ ඉහළ ඇති යෙදුමට මාරු වන්න"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"බෙදුම් තිරය අතරතුර: යෙදුමක් එකකින් තවත් එකක් ප්රතිස්ථාපනය කරන්න"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"මෑත යෙදුම් බලන්න"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"යෙදුම් මාරු කරන්න"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"නිමයි"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"මීළඟ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"නැවත උත්සාහ කරන්න!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ආපස්සට යන්න"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ඔබේ ස්පර්ශ පුවරුව මත ඇඟිලි තුනක් භාවිතයෙන් වමට හෝ දකුණට ස්වයිප් කරන්න"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 274c46e..868e939 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth pripojené."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona zariadenia s rozhraním Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknutím nakonfigurujte podrobnosti o zariadení"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Nakonfigurujte podrobnosti o zariadení."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Zobraziť všetky zariadenia"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Spárovať nové zariadenie"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Percento batérie nie je známe."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Pripojené k zariadeniu <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Pripojené k zariadeniu <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Rozbaliť skupinu"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Otvoriť aplikáciu"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nepripojené."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Načúvadlá"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapína sa…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas sa nedá upraviť, pretože ho ovláda horná aplikácia"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatické otáčanie"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáčanie obrazovky"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Rozdelenie obrazovky, aktuálna aplikácia vpravo"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Rozdelenie obrazovky, aktuálna aplikácia vľavo"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Používať celú obrazovku"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Používať zobrazenie v počítači"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prechod na aplikáciu vpravo alebo dole pri rozdelenej obrazovke"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prechod na aplikáciu vľavo alebo hore pri rozdelenej obrazovke"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Počas rozdelenej obrazovky: nahradenie aplikácie inou"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Zobraziť nedávne aplikácie"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Prepínanie aplikácií"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hotovo"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Ďalej"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Skúste to znova."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Späť"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Potiahnite troma prstami na touchpade doľava alebo doprava"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index eb1219a..e6d133e 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezava vzpostavljena z: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Vzpostavljena povezava: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Razširitev skupine."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Odpiranje aplikacije."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ni povezan."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Gostovanje"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vhodna naprava"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Vklapljanje …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svetlosti ni mogoče prilagoditi, ker jo nadzoruje aplikacija na vrhu"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Samodejno sukanje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Samodejno sukanje zaslona"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index ea1f3aaf..724c6c0 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Pajisja është lidhur me \"bluetooth\"."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona e pajisjes me Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliko për të konfiguruar detajet e pajisjes"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfiguro detajet e pajisjes"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Shiko të gjitha pajisjet"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Çifto pajisje të re"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Përqindja e baterisë e panjohur."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Lidhur me <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Është lidhur me <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Zgjero grupin."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Hap aplikacionin."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nuk është i lidhur."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Hyrja"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparatet e dëgjimit"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Po aktivizohet…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ndriçimi nuk mund të rregullohet pasi po kontrollohet nga aplikacioni i sipërm"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rrotullim automatik"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rrotullimi automatik i ekranit"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vendndodhja"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Kryerja e shumë detyrave"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Përdor ekranin e ndarë me aplikacionin në të djathtë"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Përdor ekranin e ndarë me aplikacionin në të majtë"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Përdor ekranin e plotë"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Përdor pamjen e desktopit"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Kalo tek aplikacioni djathtas ose poshtë kur përdor ekranin e ndarë"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Kalo tek aplikacioni në të majtë ose sipër kur përdor ekranin e ndarë"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Gjatë ekranit të ndarë: zëvendëso një aplikacion me një tjetër"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Shiko aplikacionet e fundit"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Ndërro aplikacionet"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"U krye"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Para"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Provo përsëri!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kthehu prapa"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Rrëshqit shpejt majtas ose djathtas duke përdorur tre gishta në bllokun me prekje"</string>
diff --git a/packages/SystemUI/res/values-sq/tiles_states_strings.xml b/packages/SystemUI/res/values-sq/tiles_states_strings.xml
index 1b1a62f..7ee5631 100644
--- a/packages/SystemUI/res/values-sq/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sq/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Joaktive"</item>
<item msgid="5908720590832378783">"Aktive"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nuk ofrohet"</item>
+ <item msgid="6641673879029894995">"Joaktiv"</item>
+ <item msgid="5806682401126108403">"Aktiv"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index eac0712..e6471eb 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Повезани сте са <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Повезани смо са уређајем <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Проширите групу."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Отворите апликацију."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Није повезано."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роминг"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Унос"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Укључује се..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не можете да прилагодите осветљеност јер је контролише апликација у врху"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аутоматска ротација"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аутоматско ротирање екрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локација"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Прикажи иконе обавештења ниског приоритета"</string>
<string name="other" msgid="429768510980739978">"Друго"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"укључивање или искључивање величине плочице"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"уклонили плочицу"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"додали плочицу на последњу позицију"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Преместите плочицу"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Да бисте прегледали недавне апликације, превуците нагоре и задржите са три прста на тачпеду"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Да бисте погледали све апликације, притисните тастер радњи на тастатури"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Редиговано"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Откључајте за приказ"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Откључајте да бисте видели кôд"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстуално образовање"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Користите тачпед за враћање назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Превуците улево или удесно са три прста. Додирните да бисте видели више покрета."</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index dfb4e005..9f2a208 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ansluten."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Enhetsikon för Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klicka för att konfigurera enhetsinformation"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurera enhetsinformation"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Se alla enheter"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Parkoppla en ny enhet"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Okänd batterinivå."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ansluten till <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ansluten till <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Utöka gruppen."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Öppna appen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Inte ansluten."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingång"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverar …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Det går inte att justera ljusstyrkan eftersom den styrs av den översta appen"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotera automatiskt"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotera skärmen automatiskt"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Plats"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multikörning"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Använd delad skärm med appen till höger"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Använd delad skärm med appen till vänster"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Använd helskärm"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Använd datorvyn"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Byt till appen till höger eller nedanför när du använder delad skärm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Byt till appen till vänster eller ovanför när du använder delad skärm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Med delad skärm: ersätt en app med en annan"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Visa ikoner för aviseringar med låg prioritet"</string>
<string name="other" msgid="429768510980739978">"Annat"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"växla rutstorlek"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ta bort ruta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"lägg till en ruta på den sista platsen"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Flytta ruta"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se de senaste apparna"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Byta app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klar"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Nästa"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Försök igen!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Tillbaka"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Svep åt vänster eller höger med tre fingrar på styrplattan"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Svep uppåt på styrplattan med tre fingrar och håll kvar för att se nyligen använda appar"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Tryck på åtgärdstangenten på tangentbordet för att se alla appar"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Anonymiserad"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Lås upp för att visa"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Lås upp för att visa koden"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextuell utbildning"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Använd styrplattan för att gå tillbaka"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Svep åt vänster eller höger med tre fingrar. Tryck för att lära dig fler rörelser."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index c096e41..6222a76 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth imeunganishwa."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Aikoni ya Kifaa chenye Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Bofya ili uweke mipangilio ya maelezo ya kifaa"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Weka mipangilio ya maelezo kwenye kifaa"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ona vifaa vyote"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Unganisha kifaa kipya"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Asilimia ya betri haijulikani."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Imeunganishwa kwenye <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Imeunganishwa kwenye <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Panua kikundi."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Fungua programu."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Haijaunganishwa."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Mitandao ya ng\'ambo"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vifaa vya kuingiza sauti"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Visaidizi vya kusikia"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Inawasha..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Imeshindwa kurekebisha mwangaza kwa sababu inadhibitiwa na programu inayotumika"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Zungusha kiotomatiki"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Skrini ijizungushe kiotomatiki"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Mahali"</string>
@@ -586,7 +588,7 @@
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"Unapotuma maudhui katika skrini yako nzima, chochote kilicho kwenye skrini yako kitaonekana. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha, sauti na video."</string>
<string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"Unapotuma maudhui ya programu moja, chochote kinachoonekana au kucheza katika programu hiyo kitaonekana. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha, sauti na video."</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"Tuma maudhui yaliyo kwenye skrini"</string>
- <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Kuchagua programu utakayotumia kutuma maudhui"</string>
+ <string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"Chagua programu ya kutuma"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Ungependa kuanza kushiriki?"</string>
<string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Unaposhiriki, kurekodi au kutuma, Android inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
<string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Unaposhiriki, kurekodi au kutuma programu, Android inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Majukumu mengi"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Tumia hali ya kugawa skrini na programu ya sasa iwe upande wa kulia"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Tumia hali ya kugawa skrini na programu ya sasa iwe upande wa kushoto"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Tumia skrini nzima"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Tumia mwonekano wa kompyuta"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Badilisha ili uende kwenye programu iliyo kulia au chini unapotumia hali ya kugawa skrini"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Badilisha uende kwenye programu iliyo kushoto au juu unapotumia hali ya kugawa skrini"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ukigawanya skrini: badilisha kutoka programu moja hadi nyingine"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Angalia programu za hivi majuzi"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Badilisha programu"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Nimemaliza"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Endelea"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Jaribu tena!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Rudi nyuma"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Telezesha vidole vitatu kushoto au kulia kwenye padi yako ya kugusa"</string>
diff --git a/packages/SystemUI/res/values-sw/tiles_states_strings.xml b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
index 4070260..fb6e38f 100644
--- a/packages/SystemUI/res/values-sw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
@@ -58,7 +58,7 @@
</string-array>
<string-array name="tile_states_flashlight">
<item msgid="3465257127433353857">"Hakipatikani"</item>
- <item msgid="5044688398303285224">"Kimezimwa"</item>
+ <item msgid="5044688398303285224">"Imezimwa"</item>
<item msgid="8527389108867454098">"Kimewashwa"</item>
</string-array>
<string-array name="tile_states_rotation">
@@ -73,7 +73,7 @@
</string-array>
<string-array name="tile_states_airplane">
<item msgid="1985366811411407764">"Hakipatikani"</item>
- <item msgid="4801037224991420996">"Kimezimwa"</item>
+ <item msgid="4801037224991420996">"Imezimwa"</item>
<item msgid="1982293347302546665">"Kimewashwa"</item>
</string-array>
<string-array name="tile_states_location">
diff --git a/packages/SystemUI/res/values-sw600dp-land/bools.xml b/packages/SystemUI/res/values-sw600dp-land/bools.xml
index 36926a2..6d31449 100644
--- a/packages/SystemUI/res/values-sw600dp-land/bools.xml
+++ b/packages/SystemUI/res/values-sw600dp-land/bools.xml
@@ -22,4 +22,6 @@
<!-- True when small screen (<sw600dp) is landscape. -->
<bool name="is_small_screen_landscape">false</bool>
+
+ <bool name="volume_dialog_ringer_drawer_should_open_to_the_side">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 342798f..0bf5f22 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"புளூடூத் இணைக்கப்பட்டது."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"புளூடூத் சாதன ஐகான்"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"சாதன விவரத்தை உள்ளமைக்க கிளிக் செய்யலாம்"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. சாதன விவரத்தை உள்ளமைக்கும்."</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"அனைத்துச் சாதனங்களையும் காட்டும்"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"புதிய சாதனத்தை இணைக்கும்"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"பேட்டரி சதவீதம் தெரியவில்லை."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>க்கு இணைக்கப்பட்டது."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> உடன் இணைக்கப்பட்டுள்ளது."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"குழுவை விரிவாக்கும்."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ஆப்ஸைத் திறக்கும்."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"இணைக்கப்படவில்லை."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ரோமிங்"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"உள்ளீடு"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"செவித்துணைக் கருவி"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ஆன் செய்கிறது…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"சிறந்த ஆப்ஸால் ஒளிர்வு கட்டுப்படுத்தப்படுவதால் இதைச் சரிசெய்ய முடியவில்லை"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"தானாகச் சுழற்று"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"திரையைத் தானாகச் சுழற்று"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"இருப்பிடம்"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"பல வேலைகளைச் செய்தல்"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ஆப்ஸ் வலதுபுறம் வரும்படி திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ஆப்ஸ் இடதுபுறம் வரும்படி திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"முழுத்திரையைப் பயன்படுத்து"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"டெஸ்க்டாப் காட்சியைப் பயன்படுத்து"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது வலது/கீழ் உள்ள ஆப்ஸுக்கு மாறுதல்"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது இடது/மேலே உள்ள ஆப்ஸுக்கு மாறுதல்"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"திரைப் பிரிப்பின்போது: ஓர் ஆப்ஸுக்குப் பதிலாக மற்றொன்றை மாற்றுதல்"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"சமீபத்திய ஆப்ஸைக் காட்டுதல்"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ஆப்ஸுக்கிடையில் மாறுங்கள்"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"முடிந்தது"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"அடுத்து"</string>
<string name="gesture_error_title" msgid="469064941635578511">"மீண்டும் முயலவும்!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"பின்செல்"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"உங்கள் டச்பேடில் மூன்று விரல்களால் இடது அல்லது வலதுபுறம் ஸ்வைப் செய்யவும்"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 6f4619f..2042ead 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"బ్లూటూత్ కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"బ్లూటూత్ పరికర చిహ్నం"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"పరికర వివరాలను కాన్ఫిగర్ చేయడానికి క్లిక్ చేయండి"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. పరికర వివరాలను కాన్ఫిగర్ చేయండి"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"అన్ని పరికరాలను చూడండి"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"కొత్త పరికరాన్ని పెయిర్ చేయండి"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"బ్యాటరీ శాతం తెలియదు."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>కి కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>కి కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"గ్రూప్ను విస్తరించండి."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"యాప్ను తెరవండి."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"కనెక్ట్ చేయబడలేదు."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"రోమింగ్"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ఇన్పుట్"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"వినికిడి పరికరాలు"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ఆన్ చేస్తోంది…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ఇది టాప్ యాప్ ద్వారా కంట్రోల్ చేయబడుతున్నందున బ్రైట్నెస్ను సర్దుబాటు చేయడం సాధ్యం కాదు"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ఆటో-రొటేట్"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"స్క్రీన్ ఆటో-రొటేట్"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"లొకేషన్"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"మల్టీ-టాస్కింగ్"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"కుడి వైపు ప్రస్తుత యాప్తో స్ప్లిట్ స్క్రీన్ను ఉపయోగించండి"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ఎడమ వైపు ప్రస్తుత యాప్తో స్ప్లిట్ స్క్రీన్ను ఉపయోగించండి"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ఫుల్ స్క్రీన్ను ఉపయోగించండి"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"డెస్క్టాప్ వీక్షణను ఉపయోగించండి"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"స్ప్లిట్ స్క్రీన్ ఉపయోగిస్తున్నప్పుడు కుడి లేదా కింద యాప్నకు మారండి"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"స్ప్లిట్ స్క్రీన్ ఉపయోగిస్తున్నప్పుడు ఎడమ లేదా పైన యాప్నకు మారండి"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"స్ప్లిట్ స్క్రీన్ సమయంలో: ఒక దాన్నుండి మరో దానికి యాప్ రీప్లేస్ చేయండి"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ఇటీవలి యాప్లను చూడండి"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"యాప్ల మధ్య మారండి"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"పూర్తయింది"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"తర్వాత"</string>
<string name="gesture_error_title" msgid="469064941635578511">"మళ్లీ ట్రై చేయండి!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"వెనుకకు"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"మీ టచ్ప్యాడ్లో మూడు వేళ్లను ఉపయోగించి ఎడమ వైపునకు లేదా కుడి వైపునకు స్వైప్ చేయండి"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 0b314f4..9ac9d01b 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"เชื่อมต่อกับ <xliff:g id="BLUETOOTH">%s</xliff:g> แล้ว"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"เชื่อมต่อกับ <xliff:g id="CAST">%s</xliff:g>"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"ขยายกลุ่ม"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"เปิดแอปพลิเคชัน"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ไม่ได้เชื่อมต่อ"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"โรมมิ่ง"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"อินพุต"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"เครื่องช่วยฟัง"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"กำลังเปิด..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ปรับความสว่างไม่ได้เนื่องจากควบคุมโดยแอปที่อยู่ด้านบน"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"หมุนอัตโนมัติ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"หมุนหน้าจออัตโนมัติ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ตำแหน่ง"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index f5a7fde..516386b 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Nakakonekta ang Bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icon ng Bluetooth device"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"I-click para i-configure ang detalye ng device"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. I-configure ang detalye ng device"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Tingnan ang lahat ng device"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Magpares ng bagong device"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Hindi alam ang porsyento ng baterya."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Nakakonekta sa <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Nakakonekta sa <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"I-expand ang grupo."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Buksan ang application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Hindi nakakonekta."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Mga hearing aid"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ino-on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Hindi ma-adjust ang liwanag dahil kinokontrol ito ng nangingibabaw na app"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"I-auto rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Awtomatikong i-rotate ang screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasyon"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Pag-multitask"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gumamit ng split screen nang nasa kanan ang app"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gumamit ng split screen nang nasa kaliwa ang app"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Gamitin ang full screen"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Gamitin ang desktop view"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Lumipat sa app sa kanan o ibaba habang ginagamit ang split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Lumipat sa app sa kaliwa o itaas habang ginagamit ang split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Habang nasa split screen: magpalit-palit ng app"</string>
@@ -991,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Ipakita ang mga icon ng notification na may mababang priority"</string>
<string name="other" msgid="429768510980739978">"Iba pa"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"i-toggle ang laki ng tile"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"alisin ang tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"magdagdag ng tile sa huling posisyon"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Ilipat ang tile"</string>
@@ -1507,8 +1506,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Tingnan ang mga kamakailang app"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Lumipat ng app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Tapos na"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Susunod"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Subukan ulit!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Bumalik"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Mag-swipe pakaliwa o pakanan gamit ang tatlong daliri sa iyong touchpad"</string>
@@ -1546,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para tingnan ang kamakailang app, mag-swipe pataas at i-hold gamit ang tatlong daliri sa touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para tingnan ang lahat ng iyong app, pindutin ang action key sa keyboard mo"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Na-redact"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"I-unlock para tingnan"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"I-unlock para tingnan ang code"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Edukasyon ayon sa konteksto"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gamitin ang iyong touchpad para bumalik"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Mag-swipe pakaliwa o pakanan gamit ang tatlong daliri. I-tap para matuto pa tungkol sa mga galaw."</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index dca7381..b643203 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth bağlandı."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth cihaz simgesi"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cihaz ayrıntılarını yapılandırmak için tıklayın"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Cihaz ayrıntılarını yapılandırın"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Tüm cihazları görün"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Yeni cihaz eşleme"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Pil yüzdesi bilinmiyor."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ile bağlı."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> bağlantısı kuruldu."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Grubu genişlet."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Uygulama aç."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Bağlanmadı."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Dolaşım"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"İşitme cihazları"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Açılıyor…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Parlaklık ayarlanamıyor, çünkü bu özellik en üstteki uygulama tarafından kontrol ediliyor"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Otomatik döndür"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranı otomatik döndür"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Konum"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Çoklu görev"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Sağdaki uygulamayla birlikte bölünmüş ekranı kullan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Soldaki uygulamayla birlikte bölünmüş ekranı kullan"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Tam ekran kullanın"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Masaüstü görünümünü kullanın"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bölünmüş ekran kullanırken sağdaki veya alttaki uygulamaya geçiş yap"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bölünmüş ekran kullanırken soldaki veya üstteki uygulamaya geçiş yapın"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Bölünmüş ekran etkinken: Bir uygulamayı başkasıyla değiştir"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Son uygulamaları görüntüle"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Uygulamalar arasında geçiş yapma"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Bitti"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Sonraki"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Tekrar deneyin."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Geri dön"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Dokunmatik alanda üç parmağınızla sola veya sağa kaydırın"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 4f5c181..db3c02d 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth під’єднано."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Значок пристрою з Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Натисніть, щоб змінити налаштування пристрою"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Змінити налаштування пристрою"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Переглянути всі пристрої"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Підключити новий пристрій"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Відсоток заряду акумулятора невідомий."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Підключено до <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Під’єднано до пристрою <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Розгорнути групу"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Відкрити додаток"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Не з’єднано."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роумінг"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Джерело сигналу"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухові апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Увімкнення…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не вдається змінити яскравість, оскільки нею керує основний додаток"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автообертання"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично обертати екран"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Геодані"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Багатозадачність"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Розділити екран і показувати додаток праворуч"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Розділити екран і показувати додаток ліворуч"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Використовувати повноекранний режим"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Використовувати версію для комп’ютера"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Перейти до додатка праворуч або внизу на розділеному екрані"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Під час розділення екрана перемикатися на додаток ліворуч або вгорі"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Під час розділення екрана: замінити додаток іншим"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Переглянути нещодавні додатки"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Перемикання між додатками"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Далі"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Спробуйте ще"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Проведіть трьома пальцями вліво чи вправо по сенсорній панелі"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 7cdb223..ffc3f5e 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> سے منسلک ہیں۔"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> سے منسلک ہے۔"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"گروپ کو پھیلائیں۔"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"ایپلیکیشن کھولیں۔"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"مربوط نہیں ہے۔"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"رومنگ"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ان پٹ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعتی آلات"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"آن ہو رہا ہے…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"چمک کو ایڈجسٹ نہیں کیا جا سکتا کیونکہ اسے سرفہرست ایپ کے ذریعے کنٹرول کیا جا رہا ہے"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"خود کار طور پر گھمائیں"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"اسکرین کو خود کار طور پر گھمائیں"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"مقام"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"کم ترجیحی اطلاع کے آئیکنز دکھائیں"</string>
<string name="other" msgid="429768510980739978">"دیگر"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"ٹائل کے سائز کو ٹوگل کریں"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ٹائل ہٹائیں"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ٹائل کو آخری پوزیشن پر شامل کریں"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ٹائل منتقل کریں"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"حالیہ ایپس دیکھنے کے لیے، ٹچ پیڈ پر تین انگلیوں سے اوپر سوائپ کریں اور دبائے رکھیں"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"اپنی سبھی ایپس دیکھنے کے لیے، اپنے کی بورڈ پر ایکشن کلید دبائیں"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"چھپانے کیلئے تبدیل کردہ"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"دیکھنے کے لیے غیر مقفل کریں"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"کوڈ دیکھنے کے لیے غیر مقفل کریں"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"سیاق و سباق کی تعلیم"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"واپس جانے کے لیے اپنے ٹچ پیڈ کا استعمال کریں"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"تین انگلیوں سے دائیں یا بائیں طرف سوائپ کریں۔ مزید اشارے جاننے کے لیے تھپتھپائیں۔"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 037f83d..e325cf3 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ulandi."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth qurilma belgisi"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Qurilma haqida tafsilotlarni oʻzgartirish uchun bosing"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Qurilma tafsilotlarini sozlash"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Hamma qurilmalar"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Yangi qurilmani ulash"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batareya quvvati foizi nomaʼlum."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ulangan: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Bunga ulangan: <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Guruhni yoying."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Ilovani oching."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ulanmagan."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Rouming"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Kirish"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eshitish moslamalari"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Yoqilmoqda…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yorqinlik umumiy sozlamalar orqali boshqariladi.Uni moslash imkonsiz"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avto-burilish"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranning avtomatik burilishi"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Joylashuv"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-vazifalilik"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Ekranni ajratib, joriy ilovani oʻngga joylash"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Ekranni ajratib, joriy ilovani chapga joylash"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Butun ekrandan foydalanish"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Desktop versiyadan foydalanish"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Ajratilgan ekranda oʻngdagi yoki pastdagi ilovaga almashish"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Ajratilgan ekranda chapdagi yoki yuqoridagi ilovaga almashish"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ajratilgan rejimda ilovalarni oʻzaro almashtirish"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Oxirgi ilovalarni koʻrish"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Ilovalarni almashtirish"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Tayyor"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Keyingisi"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Qayta urining!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Orqaga qaytish"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Sensorli panelda uchta barmoq bilan chapga yoki oʻngga suring"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 59e81bb..f64f084 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Đã kết nối bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Biểu tượng thiết bị Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Nhấp để định cấu hình thông tin thiết bị"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Thông tin chi tiết về định cấu hình thiết bị"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Xem tất cả thiết bị"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Ghép nối thiết bị mới"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Tỷ lệ phần trăm pin không xác định."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Đã kết nối với <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Đã kết nối với <xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Mở rộng nhóm."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Mở ứng dụng."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Chưa được kết nối."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Chuyển vùng"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Thiết bị đầu vào"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Thiết bị trợ thính"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Đang bật…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Không điều chỉnh được độ sáng vì độ sáng đang được ứng dụng trên cùng điều khiển"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Tự động xoay"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Tự động xoay màn hình"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vị trí"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Đa nhiệm"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Dùng tính năng chia đôi màn hình với ứng dụng ở bên phải"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Dùng tính năng chia đôi màn hình với ứng dụng ở bên trái"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Dùng chế độ toàn màn hình"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Dùng chế độ xem trên máy tính để bàn"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Chuyển sang ứng dụng bên phải hoặc ở dưới khi đang chia đôi màn hình"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Chuyển sang ứng dụng bên trái hoặc ở trên khi đang chia đôi màn hình"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Trong chế độ chia đôi màn hình: thay một ứng dụng bằng ứng dụng khác"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Xem các ứng dụng gần đây"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Chuyển đổi ứng dụng"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Xong"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Tiếp theo"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Hãy thử lại!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Quay lại"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Dùng 3 ngón tay vuốt sang trái hoặc sang phải trên bàn di chuột"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 03c4cdf..a355a67 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -245,16 +245,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"蓝牙已连接。"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"蓝牙设备图标"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"点击以配置设备详情"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>。请配置设备详情"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"查看所有设备"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"与新设备配对"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"电池电量百分比未知。"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已连接到<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已连接到 <xliff:g id="CAST">%s</xliff:g>。"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"展开群组。"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"打开应用。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"未连接。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫游"</string>
@@ -332,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"输入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助听器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在开启…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"亮度无法调整,因为它正在被顶层应用控制"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自动屏幕旋转"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自动旋转屏幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置信息"</string>
@@ -901,10 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"多任务处理"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"使用分屏模式,并将应用置于右侧"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"使用分屏模式,并将应用置于左侧"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"使用全屏"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"使用桌面版视图"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"使用分屏模式时,切换到右侧或下方的应用"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"使用分屏模式时,切换到左侧或上方的应用"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"在分屏期间:将一个应用替换为另一个应用"</string>
@@ -1507,8 +1507,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"查看最近用过的应用"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"切换应用"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"完成"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"继续"</string>
<string name="gesture_error_title" msgid="469064941635578511">"再试一次!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"返回"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"在触控板上用三根手指向左或向右滑动"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 472f531..c5a81fb2 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已連線至<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已連接至 <xliff:g id="CAST">%s</xliff:g>。"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"展開群組。"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"開啟應用程式。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"未連線。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫遊"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在開啟…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為目前是由上層應用程式控制亮度"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置"</string>
@@ -337,7 +342,7 @@
<string name="quick_settings_camera_label" msgid="5612076679385269339">"相機存取權"</string>
<string name="quick_settings_mic_label" msgid="8392773746295266375">"麥克風存取權"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"允許"</string>
- <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"已禁用"</string>
+ <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"已封鎖"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"媒體裝置"</string>
<string name="quick_settings_user_title" msgid="8673045967216204537">"使用者"</string>
<string name="quick_settings_wifi_label" msgid="2879507532983487244">"Wi-Fi"</string>
@@ -898,8 +903,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"多工處理"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"使用分割螢幕,並在右側顯示應用程式"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"使用分割螢幕,並在左側顯示應用程式"</string>
- <string name="system_multitasking_full_screen" msgid="4221409316059910349">"使用全螢幕模式"</string>
- <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"使用電腦檢視畫面"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"使用全螢幕"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"使用桌面電腦檢視模式"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"使用分割螢幕時,切換至右邊或下方的應用程式"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"使用分割螢幕時,切換至左邊或上方的應用程式"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"使用分割螢幕期間:更換應用程式"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="429768510980739978">"其他"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"切換圖塊大小"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"移除圖塊"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"加圖塊去上一個位置"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"移動圖塊"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"如要查看最近使用的應用程式,請用三隻手指在觸控板上向上滑動並按住"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"如要查看所有應用程式,請在鍵盤上按下快捷操作鍵"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"已剔除"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"解鎖即可查看"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"解鎖即可查看驗證碼"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"內容教學"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"使用觸控板返回"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"用三隻手指向左或向右滑動。輕按即可瞭解更多手勢。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index a56fc03..24a15a1 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -252,6 +252,10 @@
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已連線至<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已連線至 <xliff:g id="CAST">%s</xliff:g>。"</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"展開群組。"</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"開啟應用程式。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"尚未連線。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫遊"</string>
@@ -329,7 +333,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"開啟中…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為目前是由上層應用程式控制亮度"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"定位"</string>
@@ -581,7 +586,7 @@
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"投放一個應用程式"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"投放整個畫面"</string>
<string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"當你投放整個畫面時,畫面上的所有內容都會顯示出來。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
- <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"當你投放應用程式畫面時,該應用程式呈現或播放的所有內容都會顯示出來。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+ <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"投放應用程式畫面時,該應用程式呈現或播放的所有內容都會投放出來。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"投放螢幕"</string>
<string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"選擇要投放的應用程式"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"要開始分享嗎?"</string>
@@ -986,8 +991,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="429768510980739978">"其他"</string>
- <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
- <skip />
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"切換設定方塊大小"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"移除圖塊"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"將設定方塊新增到最後一個位置"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"移動圖塊"</string>
@@ -1540,10 +1544,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"如要查看最近使用的應用程式,請在觸控板上向上滑動並按住"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"如要查看所有應用程式,請按下鍵盤上的快捷操作鍵"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"已遮蓋"</string>
- <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
- <skip />
- <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
- <skip />
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"解鎖即可查看"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"解鎖即可查看驗證碼"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"內容教學"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"使用觸控板返回"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"用三指向左或向右滑動。輕觸即可進一步瞭解手勢。"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 20be43b..9188648 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -247,16 +247,17 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ixhunyiwe"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Isithonjana sedivayisi ye-Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Chofoza ukuze ulungiselele imininingwane yedivayisi"</string>
- <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
- <skip />
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"I-<xliff:g id="DEVICE_NAME">%s</xliff:g>. Lungiselela imininingwane yedivayisi"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Bona wonke amadivayisi"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Bhangqa idivayisi entsha"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Iphesenti lebhethri alaziwa."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Xhuma ku-<xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ixhumeke ku-<xliff:g id="CAST">%s</xliff:g>."</string>
<string name="accessibility_expand_group" msgid="521237935987978624">"Nweba iqembu."</string>
+ <!-- no translation found for accessibility_add_device_to_group (5446422960697860806) -->
+ <skip />
+ <!-- no translation found for accessibility_remove_device_from_group (3114694270949142228) -->
+ <skip />
<string name="accessibility_open_application" msgid="1749126077501259712">"Vula i-application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Akuxhunyiwe"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Iyazulazula"</string>
@@ -334,7 +335,8 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Okokufaka"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Imishini yendlebe"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Iyavula..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ayikwazi ukulungisa ukukhanya ngoba ilawulwa yi-app ephezulu"</string>
+ <!-- no translation found for quick_settings_brightness_unable_adjust_msg (4124028416057617517) -->
+ <skip />
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ukuphenduka okuzenzakalelayo"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Phendula iskrini ngokuzenzakalela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Indawo"</string>
@@ -903,10 +905,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Ukwenza imisebenzi eminingi"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Sebenzisa ukuhlukanisa isikrini nge-app kwesokudla"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Sebenzisa ukuhlukanisa isikrini nge-app kwesokunxele"</string>
- <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
- <skip />
- <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
- <skip />
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Sebenzisa isikrini esigcwele"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Sebenzisa ukubuka kwedeskithophu"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Shintshela ku-app ngakwesokudla noma ngezansi ngenkathi usebenzisa uhlukanisa isikrini"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Shintshela ku-app ngakwesokunxele noma ngaphezulu ngenkathi usebenzisa ukuhlukanisa isikrini"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ngesikhathi sokuhlukaniswa kwesikrini: shintsha i-app ngenye"</string>
@@ -1509,8 +1509,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Buka ama-app akamuva"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Shintsha ama-app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Kwenziwe"</string>
- <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
- <skip />
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Okulandelayo"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Zama futhi!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Buyela emuva"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swayiphela kwesokunxele noma kwesokudla usebenzisa iminwe emithathu kuphedi yokuthinta"</string>
diff --git a/packages/SystemUI/res/values/bools.xml b/packages/SystemUI/res/values/bools.xml
index 234c6df..76e9e37 100644
--- a/packages/SystemUI/res/values/bools.xml
+++ b/packages/SystemUI/res/values/bools.xml
@@ -66,4 +66,6 @@
<!-- True when small screen (<sw600dp) is landscape. -->
<bool name="is_small_screen_landscape">false</bool>
+
+ <bool name="volume_dialog_ringer_drawer_should_open_to_the_side">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index b273886..4995858 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -1125,4 +1125,7 @@
<!-- Configuration to swipe to open glanceable hub -->
<bool name="config_swipeToOpenGlanceableHub">false</bool>
+
+ <!-- Whether or not to show the UMO on the glanceable hub when media is playing. -->
+ <bool name="config_showUmoOnHub">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 640e1fa..7c370d3 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -390,6 +390,12 @@
<!-- Extra space for guts bundle feedback button -->
<dimen name="notification_guts_bundle_feedback_size">48dp</dimen>
+ <!-- Size of icon buttons in notification info. -->
+ <!-- 24dp for the icon itself + 16dp * 2 for top and bottom padding -->
+ <dimen name="notification_2025_guts_button_size">56dp</dimen>
+
+ <dimen name="notification_2025_min_tap_target_size">48dp</dimen>
+
<dimen name="notification_importance_toggle_size">48dp</dimen>
<dimen name="notification_importance_button_separation">8dp</dimen>
<dimen name="notification_importance_drawable_padding">8dp</dimen>
@@ -402,6 +408,10 @@
<dimen name="notification_importance_button_description_top_margin">12dp</dimen>
<dimen name="rect_button_radius">8dp</dimen>
+ <!-- Padding for importance selection buttons in notification info, 2025 redesign version -->
+ <dimen name="notification_2025_importance_button_padding_vertical">12dp</dimen>
+ <dimen name="notification_2025_importance_button_padding_horizontal">16dp</dimen>
+
<!-- The minimum height for the snackbar shown after the snooze option has been chosen. -->
<dimen name="snooze_snackbar_min_height">56dp</dimen>
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 47a9bd6..2d0f0f9 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -294,4 +294,7 @@
<item type="id" name="brightness_dialog_slider" />
<item type="id" name="aod_promoted_notification_view_updater_tag" />
+
+ <!-- id for the composable battery meter (see UnifiedBattery.kt) -->
+ <item type="id" name="battery_meter_composable_view" />
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 084495f..6ff1240 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -3176,8 +3176,8 @@
<string name="controls_media_settings_button">Settings</string>
<!-- Description for media control's playing media item, including information for the media's title, the artist, and source app [CHAR LIMIT=NONE]-->
<string name="controls_media_playing_item_description"><xliff:g id="song_name" example="Daily mix">%1$s</xliff:g> by <xliff:g id="artist_name" example="Various artists">%2$s</xliff:g> is playing from <xliff:g id="app_label" example="Spotify">%3$s</xliff:g></string>
- <!-- Content description for media controls progress bar [CHAR_LIMIT=NONE] -->
- <string name="controls_media_seekbar_description"><xliff:g id="elapsed_time" example="1 hour 2 minutes 30 seconds">%1$s</xliff:g> of <xliff:g id="total_time" example="4 hours 5 seconds">%2$s</xliff:g></string>
+ <!-- Content description for media cotnrols progress bar [CHAR_LIMIT=NONE] -->
+ <string name="controls_media_seekbar_description"><xliff:g id="elapsed_time" example="1:30">%1$s</xliff:g> of <xliff:g id="total_time" example="3:00">%2$s</xliff:g></string>
<!-- Placeholder title to inform user that an app has posted media controls [CHAR_LIMIT=NONE] -->
<string name="controls_media_empty_title"><xliff:g id="app_name" example="Foo Music App">%1$s</xliff:g> is running</string>
@@ -4178,4 +4178,7 @@
<string name="qs_edit_mode_reset_dialog_content">
All Quick Settings tiles will reset to the device’s original settings
</string>
+
+ <!-- Template that joins disabled message with the label for the voice over. [CHAR LIMIT=NONE] -->
+ <string name="volume_slider_disabled_message_template"><xliff:g example="Notification" id="stream_name">%1$s</xliff:g>, <xliff:g example="Disabled because ring is muted" id="disabled_message">%2$s</xliff:g></string>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 8a6b3af..5b96e50 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -21,6 +21,13 @@
<item name="android:textSize">@dimen/status_bar_clock_size</item>
<item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
<item name="android:textColor">@color/status_bar_clock_color</item>
+ <item name="android:fontFeatureSettings">tnum</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Carrier" parent="@*android:style/TextAppearance.StatusBar.Icon">
+ <item name="android:textSize">@dimen/status_bar_clock_size</item>
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
+ <item name="android:textColor">@color/status_bar_clock_color</item>
</style>
<style name="TextAppearance.StatusBar.UserChip" parent="@*android:style/TextAppearance.StatusBar.Icon">
@@ -557,7 +564,6 @@
<item name="android:backgroundDimEnabled">false</item>
<item name="android:showWhenLocked">true</item>
<item name="android:windowBackground">@color/transparent</item>
- <item name="android:windowContentOverlay">@null</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowNoTitle">true</item>
diff --git a/packages/SystemUI/shared/res/values/ids.xml b/packages/SystemUI/shared/res/values/ids.xml
index 1ff2f0e..e1a525d 100644
--- a/packages/SystemUI/shared/res/values/ids.xml
+++ b/packages/SystemUI/shared/res/values/ids.xml
@@ -21,4 +21,8 @@
<item type="id" name="date_smartspace_view" />
<!-- ID of the smartspace weather view. -->
<item type="id" name="weather_smartspace_view" />
+ <!-- ID of the smartspace date view near the large clock. -->
+ <item type="id" name="date_smartspace_view_large" />
+ <!-- ID of the smartspace weather view near the large clock. -->
+ <item type="id" name="weather_smartspace_view_large" />
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java
index 4a4cb7a..8f8bcf2 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java
@@ -239,7 +239,6 @@
R.dimen.keyguard_pattern_activated_dot_size));
mLockPatternView.setPathWidth(
getResources().getDimensionPixelSize(R.dimen.keyguard_pattern_stroke_width));
- mLockPatternView.setKeepDotActivated(true);
}
mEcaView = findViewById(R.id.keyguard_selector_fade_container);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 7fb6664..f6df425 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -36,6 +36,7 @@
import com.android.internal.widget.LockscreenCredential;
import com.android.keyguard.EmergencyButtonController.EmergencyButtonCallback;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
+import com.android.systemui.Flags;
import com.android.systemui.bouncer.ui.helper.BouncerHapticPlayer;
import com.android.systemui.classifier.FalsingClassifier;
import com.android.systemui.classifier.FalsingCollector;
@@ -237,8 +238,12 @@
super.onViewAttached();
mLockPatternView.setOnPatternListener(new UnlockPatternListener());
mLockPatternView.setSaveEnabled(false);
- mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled(
- mSelectedUserInteractor.getSelectedUserId()));
+ boolean visiblePatternEnabled = mLockPatternUtils.isVisiblePatternEnabled(
+ mSelectedUserInteractor.getSelectedUserId());
+ mLockPatternView.setInStealthMode(!visiblePatternEnabled);
+ if (Flags.bouncerUiRevamp2()) {
+ mLockPatternView.setKeepDotActivated(visiblePatternEnabled);
+ }
mLockPatternView.setOnTouchListener((v, event) -> {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
mFalsingCollector.avoidGesture();
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 63101d4..bd09e39 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -199,7 +199,7 @@
* to be updated.
*/
@SysUISingleton
-public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpable, CoreStartable {
+public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreStartable {
private static final String TAG = "KeyguardUpdateMonitor";
private static final int BIOMETRIC_LOCKOUT_RESET_DELAY_MS = 600;
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index e725353..19da5de 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -112,7 +112,7 @@
*/
@SysUISingleton
public class ScreenDecorations implements
- CoreStartable, ConfigurationController.ConfigurationListener, Dumpable {
+ CoreStartable, ConfigurationController.ConfigurationListener {
private static final boolean DEBUG_LOGGING = false;
private static final String TAG = "ScreenDecorations";
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 85f1880..c78f75a 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -54,6 +54,7 @@
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.notification.shared.NotificationContentAlphaOptimization;
import com.android.wm.shell.animation.FlingAnimationUtils;
import com.android.wm.shell.shared.animation.PhysicsAnimator;
@@ -890,12 +891,16 @@
if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_DRAG_TO_CONTENTS)) {
if (v instanceof ExpandableNotificationRow) {
ExpandableNotificationRow enr = (ExpandableNotificationRow) v;
- boolean canBubble = enr.getEntry().canBubble();
- Notification notif = enr.getEntry().getSbn().getNotification();
- PendingIntent dragIntent = notif.contentIntent != null ? notif.contentIntent
- : notif.fullScreenIntent;
- if (dragIntent != null && dragIntent.isActivity() && !canBubble) {
- return true;
+ if (NotificationBundleUi.isEnabled()) {
+ return enr.getEntryAdapter().canDragAndDrop();
+ } else {
+ boolean canBubble = enr.getEntry().canBubble();
+ Notification notif = enr.getEntry().getSbn().getNotification();
+ PendingIntent dragIntent = notif.contentIntent != null ? notif.contentIntent
+ : notif.fullScreenIntent;
+ if (dragIntent != null && dragIntent.isActivity() && !canBubble) {
+ return true;
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt b/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt
index b33924c..a09e954 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt
@@ -22,6 +22,8 @@
import com.android.app.tracing.FlowTracing.tracedConflatedCallbackFlow
import dagger.Module
import dagger.Provides
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -32,6 +34,8 @@
/** @see [AccessibilityManager.isEnabled] */
val isEnabled: Flow<Boolean>
+ fun getRecommendedTimeout(originalTimeout: Duration, uiFlags: Int): Duration
+
companion object {
operator fun invoke(a11yManager: AccessibilityManager): AccessibilityRepository =
AccessibilityRepositoryImpl(a11yManager)
@@ -40,9 +44,8 @@
private const val TAG = "AccessibilityRepository"
-private class AccessibilityRepositoryImpl(
- manager: AccessibilityManager,
-) : AccessibilityRepository {
+private class AccessibilityRepositoryImpl(private val manager: AccessibilityManager) :
+ AccessibilityRepository {
override val isTouchExplorationEnabled: Flow<Boolean> =
tracedConflatedCallbackFlow(TAG) {
val listener = TouchExplorationStateChangeListener(::trySend)
@@ -62,6 +65,12 @@
tracedAwaitClose(TAG) { manager.removeAccessibilityStateChangeListener(listener) }
}
.distinctUntilChanged()
+
+ override fun getRecommendedTimeout(originalTimeout: Duration, uiFlags: Int): Duration {
+ return manager
+ .getRecommendedTimeoutMillis(originalTimeout.inWholeMilliseconds.toInt(), uiFlags)
+ .milliseconds
+ }
}
@Module
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java
index 786d27a..b730c93 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/HearingDevicesDialogDelegate.java
@@ -289,6 +289,8 @@
List<DeviceItem> hearingDeviceItemList = getHearingDeviceItemList();
CachedBluetoothDevice activeHearingDevice = getActiveHearingDevice(
hearingDeviceItemList);
+ mLocalBluetoothManager.getEventManager().registerCallback(this);
+
mMainExecutor.execute(() -> {
setupDeviceListView(dialog, hearingDeviceItemList);
setupPairNewDeviceButton(dialog);
@@ -302,21 +304,6 @@
}
@Override
- public void onStart(@NonNull SystemUIDialog dialog) {
- mBgExecutor.execute(() -> {
- if (mLocalBluetoothManager != null) {
- mLocalBluetoothManager.getEventManager().registerCallback(this);
- }
- if (mPresetController != null) {
- mPresetController.registerHapCallback();
- }
- if (mAmbientController != null) {
- mAmbientController.start();
- }
- });
- }
-
- @Override
public void onStop(@NonNull SystemUIDialog dialog) {
mBgExecutor.execute(() -> {
if (mLocalBluetoothManager != null) {
@@ -378,6 +365,7 @@
mPresetLayout = dialog.requireViewById(R.id.preset_layout);
mPresetLayout.setVisibility(mPresetController.isPresetControlAvailable() ? VISIBLE : GONE);
+ mBgExecutor.execute(() -> mPresetController.registerHapCallback());
}
private void setupAmbientControls(CachedBluetoothDevice activeHearingDevice) {
@@ -387,6 +375,7 @@
mDialog.getContext(), mLocalBluetoothManager, ambientLayout);
mAmbientController.setShowUiWhenLocalDataExist(false);
mAmbientController.loadDevice(activeHearingDevice);
+ mBgExecutor.execute(() -> mAmbientController.start());
}
private void setupPairNewDeviceButton(SystemUIDialog dialog) {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
index 4dcf268..0902d19 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModel.kt
@@ -34,6 +34,7 @@
import android.util.RotationUtils
import android.view.HapticFeedbackConstants
import android.view.MotionEvent
+import android.view.accessibility.AccessibilityManager
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.keyguard.AuthInteractionProperties
import com.android.launcher3.icons.IconProvider
@@ -85,7 +86,17 @@
private val udfpsUtils: UdfpsUtils,
private val iconProvider: IconProvider,
private val activityTaskManager: ActivityTaskManager,
+ private val accessibilityManager: AccessibilityManager,
) {
+ // When a11y enabled, increase message delay to ensure messages get read
+ private val messageDelay =
+ accessibilityManager
+ .getRecommendedTimeoutMillis(
+ BiometricPrompt.HIDE_DIALOG_DELAY,
+ AccessibilityManager.FLAG_CONTENT_CONTROLS or AccessibilityManager.FLAG_CONTENT_TEXT,
+ )
+ .toLong()
+
/** The set of modalities available for this prompt */
val modalities: Flow<BiometricModalities> =
promptSelectorInteractor.prompt
@@ -692,7 +703,7 @@
messageJob?.cancel()
messageJob = launch {
- delay(BiometricPrompt.HIDE_DIALOG_DELAY.toLong())
+ delay(messageDelay)
if (authenticateAfterError) {
showAuthenticating(messageAfterError)
} else {
@@ -754,7 +765,7 @@
messageJob?.cancel()
messageJob = launch {
- delay(BiometricPrompt.HIDE_DIALOG_DELAY.toLong())
+ delay(messageDelay)
showAuthenticating(messageAfterHelp)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/common/data/repository/PackageInstallerMonitor.kt b/packages/SystemUI/src/com/android/systemui/common/data/repository/PackageInstallerMonitor.kt
index 208adc2..5f7dca8 100644
--- a/packages/SystemUI/src/com/android/systemui/common/data/repository/PackageInstallerMonitor.kt
+++ b/packages/SystemUI/src/com/android/systemui/common/data/repository/PackageInstallerMonitor.kt
@@ -64,15 +64,14 @@
synchronized(sessions) {
sessions.putAll(
packageInstaller.allSessions
- .filter { !TextUtils.isEmpty(it.appPackageName) }
- .map { session -> session.toModel() }
+ .mapNotNull { session -> session.toModel() }
.associateBy { it.sessionId }
)
updateInstallerSessionsFlow()
}
packageInstaller.registerSessionCallback(
this@PackageInstallerMonitor,
- bgHandler
+ bgHandler,
)
} else {
synchronized(sessions) {
@@ -130,7 +129,7 @@
if (session == null) {
sessions.remove(sessionId)
} else {
- sessions[sessionId] = session.toModel()
+ session.toModel()?.apply { sessions[sessionId] = this }
}
updateInstallerSessionsFlow()
}
@@ -144,7 +143,11 @@
companion object {
const val TAG = "PackageInstallerMonitor"
- private fun PackageInstaller.SessionInfo.toModel(): PackageInstallSession {
+ private fun PackageInstaller.SessionInfo.toModel(): PackageInstallSession? {
+ if (TextUtils.isEmpty(this.appPackageName)) {
+ return null
+ }
+
return PackageInstallSession(
sessionId = this.sessionId,
packageName = this.appPackageName,
diff --git a/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt b/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
index 5e8c21f9..4451f07 100644
--- a/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
@@ -16,23 +16,27 @@
package com.android.systemui.common.shared.colors
-import android.content.res.Resources
+import android.content.Context
object SurfaceEffectColors {
@JvmStatic
- fun surfaceEffect0(r: Resources): Int {
- return r.getColor(com.android.internal.R.color.surface_effect_0)
+ fun surfaceEffect0(context: Context): Int {
+ return context.resources.getColor(
+ com.android.internal.R.color.surface_effect_0, context.theme)
}
@JvmStatic
- fun surfaceEffect1(r: Resources): Int {
- return r.getColor(com.android.internal.R.color.surface_effect_1)
+ fun surfaceEffect1(context: Context): Int {
+ return context.resources.getColor(
+ com.android.internal.R.color.surface_effect_1, context.theme)
}
@JvmStatic
- fun surfaceEffect2(r: Resources): Int {
- return r.getColor(com.android.internal.R.color.surface_effect_2)
+ fun surfaceEffect2(context: Context): Int {
+ return context.resources.getColor(
+ com.android.internal.R.color.surface_effect_2, context.theme)
}
@JvmStatic
- fun surfaceEffect3(r: Resources): Int {
- return r.getColor(com.android.internal.R.color.surface_effect_3)
+ fun surfaceEffect3(context: Context): Int {
+ return context.resources.getColor(
+ com.android.internal.R.color.surface_effect_3, context.theme)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalOngoingContentStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalOngoingContentStartable.kt
index 48a6d9d..7765d00 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/CommunalOngoingContentStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalOngoingContentStartable.kt
@@ -16,7 +16,9 @@
package com.android.systemui.communal
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.CoreStartable
+import com.android.systemui.communal.dagger.CommunalModule.Companion.SHOW_UMO
import com.android.systemui.communal.data.repository.CommunalMediaRepository
import com.android.systemui.communal.data.repository.CommunalSmartspaceRepository
import com.android.systemui.communal.domain.interactor.CommunalInteractor
@@ -24,8 +26,8 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import javax.inject.Inject
+import javax.inject.Named
import kotlinx.coroutines.CoroutineScope
-import com.android.app.tracing.coroutines.launchTraced as launch
@SysUISingleton
class CommunalOngoingContentStartable
@@ -36,6 +38,7 @@
private val communalMediaRepository: CommunalMediaRepository,
private val communalSettingsInteractor: CommunalSettingsInteractor,
private val communalSmartspaceRepository: CommunalSmartspaceRepository,
+ @Named(SHOW_UMO) private val showUmoOnHub: Boolean,
) : CoreStartable {
override fun start() {
@@ -46,10 +49,14 @@
bgScope.launch {
communalInteractor.isCommunalEnabled.collect { enabled ->
if (enabled) {
- communalMediaRepository.startListening()
+ if (showUmoOnHub) {
+ communalMediaRepository.startListening()
+ }
communalSmartspaceRepository.startListening()
} else {
- communalMediaRepository.stopListening()
+ if (showUmoOnHub) {
+ communalMediaRepository.stopListening()
+ }
communalSmartspaceRepository.stopListening()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
index ff74162..bb3be53 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
@@ -105,6 +105,7 @@
const val LOGGABLE_PREFIXES = "loggable_prefixes"
const val LAUNCHER_PACKAGE = "launcher_package"
const val SWIPE_TO_HUB = "swipe_to_hub"
+ const val SHOW_UMO = "show_umo"
@Provides
@Communal
@@ -150,5 +151,11 @@
fun provideSwipeToHub(@Main resources: Resources): Boolean {
return resources.getBoolean(R.bool.config_swipeToOpenGlanceableHub)
}
+
+ @Provides
+ @Named(SHOW_UMO)
+ fun provideShowUmo(@Main resources: Resources): Boolean {
+ return resources.getBoolean(R.bool.config_showUmoOnHub)
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt
index d464200..721d116 100644
--- a/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/display/data/repository/DisplayRepository.kt
@@ -26,14 +26,16 @@
import android.os.Handler
import android.util.Log
import android.view.Display
+import android.view.IWindowManager
import com.android.app.tracing.FlowTracing.traceEach
import com.android.app.tracing.traceSection
-import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.data.DisplayEvent
+import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.util.Compile
import com.android.systemui.util.kotlin.pairwiseBy
+import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -43,6 +45,7 @@
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asFlow
+import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
@@ -50,12 +53,13 @@
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.scan
import kotlinx.coroutines.flow.stateIn
-/** Provides a [Flow] of [Display] as returned by [DisplayManager]. */
+/** Repository for providing access to display related information and events. */
interface DisplayRepository {
/** Display change event indicating a change to the given displayId has occurred. */
val displayChangeEvent: Flow<Int>
@@ -66,6 +70,9 @@
/** Display removal event indicating a display has been removed. */
val displayRemovalEvent: Flow<Int>
+ /** A [StateFlow] that maintains a set of display IDs that should have system decorations. */
+ val displayIdsWithSystemDecorations: StateFlow<Set<Int>>
+
/**
* Provides the current set of displays.
*
@@ -124,6 +131,8 @@
@Inject
constructor(
private val displayManager: DisplayManager,
+ private val commandQueue: CommandQueue,
+ private val windowManager: IWindowManager,
@Background backgroundHandler: Handler,
@Background bgApplicationScope: CoroutineScope,
@Background backgroundCoroutineDispatcher: CoroutineDispatcher,
@@ -426,6 +435,56 @@
.map { it.resultSet }
}
+ private val decorationEvents: Flow<Event> = callbackFlow {
+ val callback =
+ object : CommandQueue.Callbacks {
+ override fun onDisplayAddSystemDecorations(displayId: Int) {
+ trySend(Event.Add(displayId))
+ }
+
+ override fun onDisplayRemoveSystemDecorations(displayId: Int) {
+ trySend(Event.Remove(displayId))
+ }
+ }
+ commandQueue.addCallback(callback)
+ awaitClose { commandQueue.removeCallback(callback) }
+ }
+
+ private val initialDisplayIdsWithDecorations: Set<Int> =
+ displayIds.value.filter { windowManager.shouldShowSystemDecors(it) }.toSet()
+
+ /**
+ * A [StateFlow] that maintains a set of display IDs that should have system decorations.
+ *
+ * Updates to the set are triggered by:
+ * - Adding displays via [CommandQueue.Callbacks.onDisplayAddSystemDecorations].
+ * - Removing displays via [CommandQueue.Callbacks.onDisplayRemoveSystemDecorations].
+ * - Removing displays via [displayRemovalEvent] emissions.
+ *
+ * The set is initialized with displays that qualify for system decorations based on
+ * [WindowManager.shouldShowSystemDecors].
+ */
+ override val displayIdsWithSystemDecorations: StateFlow<Set<Int>> =
+ merge(decorationEvents, displayRemovalEvent.map { Event.Remove(it) })
+ .scan(initialDisplayIdsWithDecorations) { displayIds: Set<Int>, event: Event ->
+ when (event) {
+ is Event.Add -> displayIds + event.displayId
+ is Event.Remove -> displayIds - event.displayId
+ }
+ }
+ .distinctUntilChanged()
+ .stateIn(
+ scope = bgApplicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = initialDisplayIdsWithDecorations,
+ )
+
+ private sealed class Event(val displayId: Int) {
+ class Add(displayId: Int) : Event(displayId)
+
+ class Remove(displayId: Int) : Event(displayId)
+ }
+
private companion object {
const val TAG = "DisplayRepository"
val DEBUG = Log.isLoggable(TAG, Log.DEBUG) || Compile.IS_DEBUG
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt b/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt
index 2650159..15a4722 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt
@@ -29,8 +29,6 @@
import com.android.systemui.statusbar.notification.collection.SortBySectionTimeFlag
import com.android.systemui.statusbar.notification.emptyshade.shared.ModesEmptyShadeFix
import com.android.systemui.statusbar.notification.interruption.VisualInterruptionRefactor
-import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
-import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod
import com.android.systemui.statusbar.notification.shared.NotificationAvalancheSuppression
import com.android.systemui.statusbar.notification.shared.NotificationMinimalism
import com.android.systemui.statusbar.notification.shared.NotificationThrottleHun
@@ -52,8 +50,6 @@
NotificationMinimalism.token dependsOn NotificationThrottleHun.token
ModesEmptyShadeFix.token dependsOn modesUi
- PromotedNotificationUiAod.token dependsOn PromotedNotificationUi.token
-
// SceneContainer dependencies
SceneContainerFlag.getFlagDependencies().forEach { (alpha, beta) -> alpha dependsOn beta }
}
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index d9d3995..84bb231 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -160,9 +160,6 @@
// TODO(b/291315866): Tracking Bug
@JvmField val SIGNAL_CALLBACK_DEPRECATION = releasedFlag("signal_callback_deprecation")
- // TODO(b/301610137): Tracking bug
- @JvmField val NEW_NETWORK_SLICE_UI = releasedFlag("new_network_slice_ui")
-
// TODO(b/311222557): Tracking bug
val ROAMING_INDICATOR_VIA_DISPLAY_INFO = releasedFlag("roaming_indicator_via_display_info")
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index efa9c21..cc0efbc 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -241,7 +241,7 @@
* directly to the keyguard UI is posted to a {@link android.os.Handler} to ensure it is taken on the UI
* thread of the keyguard.
*/
-public class KeyguardViewMediator implements CoreStartable, Dumpable,
+public class KeyguardViewMediator implements CoreStartable,
StatusBarStateController.StateListener {
private static final boolean ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS =
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
index 5c4e34e..fc5914b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
@@ -22,6 +22,7 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
+import com.android.systemui.Flags
import com.android.systemui.customization.R as customR
import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition
@@ -81,6 +82,12 @@
logger.logConstraintSet(cs, clockViewModel)
cs.applyTo(constraintLayout)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ manuallySetDateWeatherConstraintsOnConstraintLayout(
+ cs,
+ constraintLayout,
+ )
+ }
}
}
}
@@ -104,6 +111,12 @@
}
logger.logConstraintSet(cs, clockViewModel)
cs.applyTo(constraintLayout)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ manuallySetDateWeatherConstraintsOnConstraintLayout(
+ cs,
+ constraintLayout,
+ )
+ }
}
}
}
@@ -111,6 +124,24 @@
}
}
+ private fun manuallySetDateWeatherConstraintsOnConstraintLayout(
+ cs: ConstraintSet,
+ constraintLayout: ConstraintLayout,
+ ) {
+ val ids =
+ listOf(
+ sharedR.id.date_smartspace_view,
+ sharedR.id.date_smartspace_view_large,
+ sharedR.id.weather_smartspace_view,
+ sharedR.id.weather_smartspace_view_large,
+ )
+
+ for (i in ids) {
+ constraintLayout.getViewById(i)?.visibility = cs.getVisibility(i)
+ constraintLayout.getViewById(i)?.alpha = cs.getConstraint(i).propertySet.alpha
+ }
+ }
+
private fun Logger.logConstraintSet(cs: ConstraintSet, viewModel: KeyguardClockViewModel) {
val currentClock = viewModel.currentClock.value
if (currentClock == null) return
@@ -137,6 +168,24 @@
int1 = cs.getVisibility(smartspaceDateId)
str1 = "${cs.getConstraint(smartspaceDateId).propertySet.alpha}"
}
+
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ this.i({ "applyCsToSmartspaceWeather: vis=${getVisText(int1)}; alpha=$str1" }) {
+ val smartspaceDateId = sharedR.id.weather_smartspace_view
+ int1 = cs.getVisibility(smartspaceDateId)
+ str1 = "${cs.getConstraint(smartspaceDateId).propertySet.alpha}"
+ }
+ this.i({ "applyCsToSmartspaceDateLarge: vis=${getVisText(int1)}; alpha=$str1" }) {
+ val smartspaceDateId = sharedR.id.date_smartspace_view_large
+ int1 = cs.getVisibility(smartspaceDateId)
+ str1 = "${cs.getConstraint(smartspaceDateId).propertySet.alpha}"
+ }
+ this.i({ "applyCsToSmartspaceWeatherLarge: vis=${getVisText(int1)}; alpha=$str1" }) {
+ val smartspaceDateId = sharedR.id.weather_smartspace_view_large
+ int1 = cs.getVisibility(smartspaceDateId)
+ str1 = "${cs.getConstraint(smartspaceDateId).propertySet.alpha}"
+ }
+ }
}
private val TAG = "KeyguardBlueprintViewBinder"
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
index 0a958e9..a5b303a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
@@ -72,25 +72,25 @@
// When changing to new clock, we need to remove old views from burnInLayer
var lastClock: ClockController? = null
launch {
- viewModel.currentClock.collect { currentClock ->
- if (lastClock != currentClock) {
- cleanupClockViews(
- lastClock,
- keyguardRootView,
- viewModel.burnInLayer,
- )
- lastClock = currentClock
- }
-
- addClockViews(currentClock, keyguardRootView)
- updateBurnInLayer(
+ viewModel.currentClock.collect { currentClock ->
+ if (lastClock != currentClock) {
+ cleanupClockViews(
+ lastClock,
keyguardRootView,
- viewModel,
- viewModel.clockSize.value,
+ viewModel.burnInLayer,
)
- applyConstraints(clockSection, keyguardRootView, true)
+ lastClock = currentClock
}
+
+ addClockViews(currentClock, keyguardRootView)
+ updateBurnInLayer(
+ keyguardRootView,
+ viewModel,
+ viewModel.clockSize.value,
+ )
+ applyConstraints(clockSection, keyguardRootView, true)
}
+ }
.invokeOnCompletion {
cleanupClockViews(lastClock, keyguardRootView, viewModel.burnInLayer)
lastClock = null
@@ -106,12 +106,7 @@
launch {
viewModel.clockShouldBeCentered.collect {
viewModel.currentClock.value?.let {
- // TODO(b/301502635): remove "!it.config.useCustomClockScene" when
- // migrate clocks to blueprint is fully rolled out
- if (
- it.largeClock.config.hasCustomPositionUpdatedAnimation &&
- !it.config.useCustomClockScene
- ) {
+ if (it.largeClock.config.hasCustomPositionUpdatedAnimation) {
blueprintInteractor.refreshBlueprint(Type.DefaultClockStepping)
} else {
blueprintInteractor.refreshBlueprint(Type.DefaultTransition)
@@ -122,11 +117,11 @@
launch {
combine(
- viewModel.hasAodIcons,
- rootViewModel.isNotifIconContainerVisible.map { it.value },
- ) { hasIcon, isVisible ->
- hasIcon && isVisible
- }
+ viewModel.hasAodIcons,
+ rootViewModel.isNotifIconContainerVisible.map { it.value },
+ ) { hasIcon, isVisible ->
+ hasIcon && isVisible
+ }
.distinctUntilChanged()
.collect { _ ->
viewModel.currentClock.value?.let {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index c7791cd..45801ba 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -69,6 +69,7 @@
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shade.domain.interactor.ShadeInteractor
+import com.android.systemui.shared.R as sharedR
import com.android.systemui.statusbar.CrossFadeHelper
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
@@ -88,7 +89,6 @@
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
@@ -188,6 +188,10 @@
viewModel.translationY.collect { y ->
childViews[burnInLayerId]?.translationY = y
childViews[largeClockId]?.translationY = y
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ childViews[largeClockDateId]?.translationY = y
+ childViews[largeClockWeatherId]?.translationY = y
+ }
childViews[aodPromotedNotificationId]?.translationY = y
childViews[aodNotificationIconContainerId]?.translationY = y
}
@@ -203,6 +207,7 @@
childViews[aodPromotedNotificationId]?.translationX = px
childViews[aodNotificationIconContainerId]?.translationX = px
}
+
state.isToOrFrom(KeyguardState.GLANCEABLE_HUB) -> {
for ((key, childView) in childViews.entries) {
when (key) {
@@ -212,6 +217,7 @@
deviceEntryIcon -> {
// Do not move these views
}
+
else -> childView.translationX = px
}
}
@@ -374,17 +380,9 @@
if (wallpaperFocalAreaViewModel.hasFocalArea.value) {
launch {
wallpaperFocalAreaViewModel.wallpaperFocalAreaBounds.collect {
- wallpaperFocalAreaBounds ->
- wallpaperFocalAreaViewModel.setFocalAreaBounds(
- wallpaperFocalAreaBounds
- )
+ wallpaperFocalAreaViewModel.setFocalAreaBounds(it)
}
}
- launch {
- wallpaperFocalAreaViewModel.wallpaperFocalAreaBounds
- .filterNotNull()
- .collect { wallpaperFocalAreaViewModel.setFocalAreaBounds(it) }
- }
}
}
}
@@ -582,6 +580,8 @@
private val aodPromotedNotificationId = AodPromotedNotificationSection.viewId
private val aodNotificationIconContainerId = R.id.aod_notification_icon_container
private val largeClockId = customR.id.lockscreen_clock_view_large
+ private val largeClockDateId = sharedR.id.date_smartspace_view_large
+ private val largeClockWeatherId = sharedR.id.weather_smartspace_view_large
private val smallClockId = customR.id.lockscreen_clock_view
private val indicationArea = R.id.keyguard_indication_area
private val startButton = R.id.start_button
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSmartspaceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSmartspaceViewBinder.kt
index 9c886b2..def1ac8 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSmartspaceViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSmartspaceViewBinder.kt
@@ -26,6 +26,7 @@
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
@@ -37,6 +38,7 @@
@JvmStatic
fun bind(
keyguardRootView: ConstraintLayout,
+ keyguardRootViewModel: KeyguardRootViewModel,
clockViewModel: KeyguardClockViewModel,
smartspaceViewModel: KeyguardSmartspaceViewModel,
blueprintInteractor: KeyguardBlueprintInteractor,
@@ -77,6 +79,26 @@
)
}
}
+
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ launch("$TAG#smartspaceViewModel.burnInLayerVisibility") {
+ keyguardRootViewModel.burnInLayerVisibility.collect { visibility ->
+ if (clockViewModel.isLargeClockVisible.value) {
+ // hide small clock date/weather
+ val dateView =
+ keyguardRootView.requireViewById<View>(
+ sharedR.id.date_smartspace_view
+ )
+ dateView.visibility = View.GONE
+ val weatherView =
+ keyguardRootView.requireViewById<View>(
+ sharedR.id.weather_smartspace_view
+ )
+ weatherView.visibility = View.GONE
+ }
+ }
+ }
+ }
}
}
}
@@ -125,6 +147,11 @@
val dateView =
constraintLayout.requireViewById<View>(sharedR.id.date_smartspace_view)
addView(dateView)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ val weatherView =
+ constraintLayout.requireViewById<View>(sharedR.id.weather_smartspace_view)
+ addView(weatherView)
+ }
}
}
}
@@ -142,6 +169,11 @@
val dateView =
constraintLayout.requireViewById<View>(sharedR.id.date_smartspace_view)
removeView(dateView)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ val weatherView =
+ constraintLayout.requireViewById<View>(sharedR.id.weather_smartspace_view)
+ removeView(weatherView)
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
index 85eae6e..242926b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
@@ -292,7 +292,11 @@
parentView.removeView(smartSpaceView)
}
- smartSpaceView = lockscreenSmartspaceController.buildAndConnectDateView(parentView)
+ smartSpaceView =
+ lockscreenSmartspaceController.buildAndConnectDateView(
+ parent = parentView,
+ isLargeClock = false,
+ )
val topPadding: Int =
smartspaceViewModel.getLargeClockSmartspaceTopPadding(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
index 738fb73..8a33c64 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
@@ -54,13 +54,13 @@
internal fun ConstraintSet.setVisibility(views: Iterable<View>, visibility: Int) =
views.forEach { view -> this.setVisibility(view.id, visibility) }
-internal fun ConstraintSet.setAlpha(views: Iterable<View>, alpha: Float) =
+private fun ConstraintSet.setAlpha(views: Iterable<View>, alpha: Float) =
views.forEach { view -> this.setAlpha(view.id, alpha) }
-internal fun ConstraintSet.setScaleX(views: Iterable<View>, scaleX: Float) =
+private fun ConstraintSet.setScaleX(views: Iterable<View>, scaleX: Float) =
views.forEach { view -> this.setScaleX(view.id, scaleX) }
-internal fun ConstraintSet.setScaleY(views: Iterable<View>, scaleY: Float) =
+private fun ConstraintSet.setScaleY(views: Iterable<View>, scaleY: Float) =
views.forEach { view -> this.setScaleY(view.id, scaleY) }
@SysUISingleton
@@ -119,8 +119,23 @@
setVisibility(getNonTargetClockFace(clock).views, GONE)
setAlpha(getTargetClockFace(clock).views, 1F)
setAlpha(getNonTargetClockFace(clock).views, 0F)
+
if (!keyguardClockViewModel.isLargeClockVisible.value) {
- connect(sharedR.id.bc_smartspace_view, TOP, sharedR.id.date_smartspace_view, BOTTOM)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ connect(
+ sharedR.id.bc_smartspace_view,
+ TOP,
+ customR.id.lockscreen_clock_view,
+ BOTTOM,
+ )
+ } else {
+ connect(
+ sharedR.id.bc_smartspace_view,
+ TOP,
+ sharedR.id.date_smartspace_view,
+ BOTTOM,
+ )
+ }
} else {
setScaleX(getTargetClockFace(clock).views, aodBurnInViewModel.movement.value.scale)
setScaleY(getTargetClockFace(clock).views, aodBurnInViewModel.movement.value.scale)
@@ -136,7 +151,7 @@
if (keyguardClockViewModel.isLargeClockVisible.value) clock.smallClock.layout
else clock.largeClock.layout
- fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) {
+ private fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) {
constraints.apply {
createBarrier(
R.id.weather_clock_bc_smartspace_bottom,
@@ -182,9 +197,14 @@
TOP,
)
val largeClockTopMargin =
- keyguardClockViewModel.getLargeClockTopMargin() +
- getDimen(DATE_WEATHER_VIEW_HEIGHT) +
- getDimen(ENHANCED_SMARTSPACE_HEIGHT)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ keyguardClockViewModel.getLargeClockTopMargin() +
+ getDimen(ENHANCED_SMARTSPACE_HEIGHT)
+ } else {
+ keyguardClockViewModel.getLargeClockTopMargin() +
+ getDimen(DATE_WEATHER_VIEW_HEIGHT) +
+ getDimen(ENHANCED_SMARTSPACE_HEIGHT)
+ }
connect(
customR.id.lockscreen_clock_view_large,
TOP,
@@ -224,7 +244,6 @@
val smallClockBottom =
keyguardClockViewModel.getSmallClockTopMargin() +
context.resources.getDimensionPixelSize(customR.dimen.small_clock_height)
- val dateWeatherSmartspaceHeight = getDimen(context, DATE_WEATHER_VIEW_HEIGHT).toFloat()
val marginBetweenSmartspaceAndNotification =
context.resources.getDimensionPixelSize(
R.dimen.keyguard_status_view_bottom_margin
@@ -235,11 +254,19 @@
0
}
- clockInteractor.setNotificationStackDefaultTop(
- smallClockBottom +
- dateWeatherSmartspaceHeight +
- marginBetweenSmartspaceAndNotification
- )
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ clockInteractor.setNotificationStackDefaultTop(
+ (smallClockBottom + marginBetweenSmartspaceAndNotification).toFloat()
+ )
+ } else {
+ val dateWeatherSmartspaceHeight =
+ getDimen(context, DATE_WEATHER_VIEW_HEIGHT).toFloat()
+ clockInteractor.setNotificationStackDefaultTop(
+ smallClockBottom +
+ dateWeatherSmartspaceHeight +
+ marginBetweenSmartspaceAndNotification
+ )
+ }
}
constrainWeatherClockDateIconsBarrier(constraints)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt
index d6d03c7..37cc852f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt
@@ -33,6 +33,7 @@
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.binder.KeyguardSmartspaceViewBinder
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.res.R as R
import com.android.systemui.shade.ShadeDisplayAware
@@ -53,10 +54,13 @@
val smartspaceController: LockscreenSmartspaceController,
val keyguardUnlockAnimationController: KeyguardUnlockAnimationController,
private val blueprintInteractor: Lazy<KeyguardBlueprintInteractor>,
+ private val keyguardRootViewModel: KeyguardRootViewModel,
) : KeyguardSection() {
private var smartspaceView: View? = null
private var weatherView: View? = null
- private var dateWeatherView: ViewGroup? = null
+ private var dateView: ViewGroup? = null
+ private var weatherViewLargeClock: View? = null
+ private var dateViewLargeClock: View? = null
private var smartspaceVisibilityListener: OnGlobalLayoutListener? = null
private var pastVisibility: Int = -1
@@ -73,16 +77,33 @@
override fun addViews(constraintLayout: ConstraintLayout) {
if (!keyguardSmartspaceViewModel.isSmartspaceEnabled) return
smartspaceView = smartspaceController.buildAndConnectView(constraintLayout)
- weatherView = smartspaceController.buildAndConnectWeatherView(constraintLayout)
- dateWeatherView =
- smartspaceController.buildAndConnectDateView(constraintLayout) as ViewGroup
+ weatherView = smartspaceController.buildAndConnectWeatherView(constraintLayout, false)
+ dateView =
+ smartspaceController.buildAndConnectDateView(constraintLayout, false) as? ViewGroup
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ weatherViewLargeClock =
+ smartspaceController.buildAndConnectWeatherView(constraintLayout, true)
+ dateViewLargeClock =
+ smartspaceController.buildAndConnectDateView(constraintLayout, true)
+ }
pastVisibility = smartspaceView?.visibility ?: View.GONE
constraintLayout.addView(smartspaceView)
- if (keyguardSmartspaceViewModel.isDateWeatherDecoupled) {
- constraintLayout.addView(dateWeatherView)
- // Place weather right after the date, before the extras (alarm and dnd)
- val index = if (dateWeatherView?.childCount == 0) 0 else 1
- dateWeatherView?.addView(weatherView, index)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ dateView?.visibility = View.GONE
+ weatherView?.visibility = View.GONE
+ dateViewLargeClock?.visibility = View.GONE
+ weatherViewLargeClock?.visibility = View.GONE
+ constraintLayout.addView(dateView)
+ constraintLayout.addView(weatherView)
+ constraintLayout.addView(weatherViewLargeClock)
+ constraintLayout.addView(dateViewLargeClock)
+ } else {
+ if (keyguardSmartspaceViewModel.isDateWeatherDecoupled) {
+ constraintLayout.addView(dateView)
+ // Place weather right after the date, before the extras (alarm and dnd)
+ val index = if (dateView?.childCount == 0) 0 else 1
+ dateView?.addView(weatherView, index)
+ }
}
keyguardUnlockAnimationController.lockscreenSmartspace = smartspaceView
smartspaceVisibilityListener = OnGlobalLayoutListener {
@@ -103,6 +124,7 @@
disposableHandle =
KeyguardSmartspaceViewBinder.bind(
constraintLayout,
+ keyguardRootViewModel,
keyguardClockViewModel,
keyguardSmartspaceViewModel,
blueprintInteractor.get(),
@@ -117,13 +139,15 @@
constraintSet.apply {
constrainHeight(sharedR.id.date_smartspace_view, ConstraintSet.WRAP_CONTENT)
constrainWidth(sharedR.id.date_smartspace_view, ConstraintSet.WRAP_CONTENT)
- connect(
- sharedR.id.date_smartspace_view,
- ConstraintSet.START,
- ConstraintSet.PARENT_ID,
- ConstraintSet.START,
- dateWeatherPaddingStart,
- )
+ if (!com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.START,
+ ConstraintSet.PARENT_ID,
+ ConstraintSet.START,
+ dateWeatherPaddingStart,
+ )
+ }
constrainHeight(sharedR.id.bc_smartspace_view, ConstraintSet.WRAP_CONTENT)
constrainWidth(sharedR.id.bc_smartspace_view, ConstraintSet.MATCH_CONSTRAINT)
@@ -142,51 +166,222 @@
ConstraintSet.END,
smartspaceHorizontalPadding,
)
-
if (keyguardClockViewModel.hasCustomWeatherDataDisplay.value) {
- clear(sharedR.id.date_smartspace_view, ConstraintSet.TOP)
- connect(
- sharedR.id.date_smartspace_view,
- ConstraintSet.BOTTOM,
- sharedR.id.bc_smartspace_view,
- ConstraintSet.TOP,
- )
+ if (!com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ clear(sharedR.id.date_smartspace_view, ConstraintSet.TOP)
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.BOTTOM,
+ sharedR.id.bc_smartspace_view,
+ ConstraintSet.TOP,
+ )
+ }
} else {
clear(sharedR.id.date_smartspace_view, ConstraintSet.BOTTOM)
- connect(
- sharedR.id.date_smartspace_view,
- ConstraintSet.TOP,
- customR.id.lockscreen_clock_view,
- ConstraintSet.BOTTOM,
- )
- connect(
- sharedR.id.bc_smartspace_view,
- ConstraintSet.TOP,
- sharedR.id.date_smartspace_view,
- ConstraintSet.BOTTOM,
- )
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ connect(
+ sharedR.id.bc_smartspace_view,
+ ConstraintSet.TOP,
+ customR.id.lockscreen_clock_view,
+ ConstraintSet.BOTTOM,
+ )
+ } else {
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.TOP,
+ customR.id.lockscreen_clock_view,
+ ConstraintSet.BOTTOM,
+ )
+ connect(
+ sharedR.id.bc_smartspace_view,
+ ConstraintSet.TOP,
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.BOTTOM,
+ )
+ }
}
- createBarrier(
- R.id.smart_space_barrier_top,
- Barrier.TOP,
- 0,
- *intArrayOf(sharedR.id.bc_smartspace_view, sharedR.id.date_smartspace_view),
- )
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ if (keyguardClockViewModel.isLargeClockVisible.value) {
+ setVisibility(sharedR.id.weather_smartspace_view, GONE)
+ setVisibility(sharedR.id.date_smartspace_view, GONE)
+ constrainHeight(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.WRAP_CONTENT,
+ )
+ constrainWidth(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.WRAP_CONTENT,
+ )
+ constrainHeight(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.WRAP_CONTENT,
+ )
+ constrainWidth(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.WRAP_CONTENT,
+ )
+ connect(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.TOP,
+ customR.id.lockscreen_clock_view_large,
+ ConstraintSet.BOTTOM,
+ dateWeatherPaddingStart,
+ )
- createBarrier(
- R.id.smart_space_barrier_bottom,
- Barrier.BOTTOM,
- 0,
- *intArrayOf(sharedR.id.bc_smartspace_view, sharedR.id.date_smartspace_view),
- )
+ connect(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.START,
+ customR.id.lockscreen_clock_view_large,
+ ConstraintSet.START,
+ )
+ connect(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.END,
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.START,
+ )
+
+ connect(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.BOTTOM,
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.BOTTOM,
+ )
+
+ connect(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.TOP,
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.TOP,
+ )
+
+ connect(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.START,
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.END,
+ )
+
+ connect(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.END,
+ customR.id.lockscreen_clock_view_large,
+ ConstraintSet.END,
+ )
+
+ setHorizontalChainStyle(
+ sharedR.id.weather_smartspace_view_large,
+ ConstraintSet.CHAIN_PACKED,
+ )
+ setHorizontalChainStyle(
+ sharedR.id.date_smartspace_view_large,
+ ConstraintSet.CHAIN_PACKED,
+ )
+ } else {
+ setVisibility(sharedR.id.weather_smartspace_view_large, GONE)
+ setVisibility(sharedR.id.date_smartspace_view_large, GONE)
+ constrainHeight(sharedR.id.date_smartspace_view, ConstraintSet.WRAP_CONTENT)
+ constrainWidth(sharedR.id.date_smartspace_view, ConstraintSet.WRAP_CONTENT)
+ constrainHeight(sharedR.id.weather_smartspace_view, ConstraintSet.WRAP_CONTENT)
+ constrainWidth(sharedR.id.weather_smartspace_view, ConstraintSet.WRAP_CONTENT)
+
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.START,
+ customR.id.lockscreen_clock_view,
+ ConstraintSet.END,
+ 20,
+ )
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.TOP,
+ customR.id.lockscreen_clock_view,
+ ConstraintSet.TOP,
+ )
+ connect(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.BOTTOM,
+ sharedR.id.weather_smartspace_view,
+ ConstraintSet.TOP,
+ )
+ connect(
+ sharedR.id.weather_smartspace_view,
+ ConstraintSet.START,
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.START,
+ )
+ connect(
+ sharedR.id.weather_smartspace_view,
+ ConstraintSet.TOP,
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.BOTTOM,
+ )
+ connect(
+ sharedR.id.weather_smartspace_view,
+ ConstraintSet.BOTTOM,
+ customR.id.lockscreen_clock_view,
+ ConstraintSet.BOTTOM,
+ )
+
+ setVerticalChainStyle(
+ sharedR.id.weather_smartspace_view,
+ ConstraintSet.CHAIN_PACKED,
+ )
+ setVerticalChainStyle(
+ sharedR.id.date_smartspace_view,
+ ConstraintSet.CHAIN_PACKED,
+ )
+ }
+ }
+
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ createBarrier(
+ R.id.smart_space_barrier_bottom,
+ Barrier.BOTTOM,
+ 0,
+ sharedR.id.bc_smartspace_view,
+ )
+ createBarrier(
+ R.id.smart_space_barrier_top,
+ Barrier.TOP,
+ 0,
+ sharedR.id.bc_smartspace_view,
+ )
+ } else {
+ createBarrier(
+ R.id.smart_space_barrier_bottom,
+ Barrier.BOTTOM,
+ 0,
+ *intArrayOf(sharedR.id.bc_smartspace_view, sharedR.id.date_smartspace_view),
+ )
+ createBarrier(
+ R.id.smart_space_barrier_top,
+ Barrier.TOP,
+ 0,
+ *intArrayOf(sharedR.id.bc_smartspace_view, sharedR.id.date_smartspace_view),
+ )
+ }
}
updateVisibility(constraintSet)
}
override fun removeViews(constraintLayout: ConstraintLayout) {
if (!keyguardSmartspaceViewModel.isSmartspaceEnabled) return
- listOf(smartspaceView, dateWeatherView).forEach {
+
+ val list =
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ listOf(
+ smartspaceView,
+ dateView,
+ weatherView,
+ weatherViewLargeClock,
+ dateViewLargeClock,
+ )
+ } else {
+ listOf(smartspaceView, dateView)
+ }
+ list.forEach {
it?.let {
if (it.parent == constraintLayout) {
constraintLayout.removeView(it)
@@ -200,17 +395,40 @@
}
private fun updateVisibility(constraintSet: ConstraintSet) {
+
// This may update the visibility of the smartspace views
smartspaceController.requestSmartspaceUpdate()
+ val weatherId: Int
+ val dateId: Int
+ if (
+ com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout() &&
+ keyguardClockViewModel.isLargeClockVisible.value
+ ) {
+ weatherId = sharedR.id.weather_smartspace_view_large
+ dateId = sharedR.id.date_smartspace_view_large
+ } else {
+ weatherId = sharedR.id.weather_smartspace_view
+ dateId = sharedR.id.date_smartspace_view
+ }
constraintSet.apply {
val showWeather = keyguardSmartspaceViewModel.isWeatherVisible.value
- setVisibility(sharedR.id.weather_smartspace_view, if (showWeather) VISIBLE else GONE)
- setAlpha(sharedR.id.weather_smartspace_view, if (showWeather) 1f else 0f)
+ setVisibility(weatherId, if (showWeather) VISIBLE else GONE)
+ setAlpha(weatherId, if (showWeather) 1f else 0f)
val showDateView = !keyguardClockViewModel.hasCustomWeatherDataDisplay.value
- setVisibility(sharedR.id.date_smartspace_view, if (showDateView) VISIBLE else GONE)
- setAlpha(sharedR.id.date_smartspace_view, if (showDateView) 1f else 0f)
+ setVisibility(dateId, if (showDateView) VISIBLE else GONE)
+ setAlpha(dateId, if (showDateView) 1f else 0f)
+
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ if (keyguardClockViewModel.isLargeClockVisible.value) {
+ setVisibility(sharedR.id.weather_smartspace_view, GONE)
+ setVisibility(sharedR.id.date_smartspace_view, GONE)
+ } else {
+ setVisibility(sharedR.id.weather_smartspace_view_large, GONE)
+ setVisibility(sharedR.id.date_smartspace_view_large, GONE)
+ }
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
index fdd9355..434d7ea 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
@@ -59,6 +59,7 @@
addTransition(ClockFaceOutTransition(config, clockViewModel, logBuffer))
addTransition(ClockFaceInTransition(config, clockViewModel, logBuffer))
}
+
addTransition(SmartspaceMoveTransition(config, clockViewModel, logBuffer))
}
@@ -210,7 +211,6 @@
str3 = "$bounds"
}
}
-
to.view.setVisibility(vis ?: View.VISIBLE)
to.view.setAlpha(alpha)
to.view.setRect(bounds)
@@ -297,9 +297,17 @@
logger.e("No large clock set, falling back")
addTarget(customR.id.lockscreen_clock_view_large)
}
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ addTarget(sharedR.id.date_smartspace_view_large)
+ addTarget(sharedR.id.weather_smartspace_view_large)
+ }
} else {
logger.i("Adding small clock")
addTarget(customR.id.lockscreen_clock_view)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ addTarget(sharedR.id.date_smartspace_view)
+ addTarget(sharedR.id.weather_smartspace_view)
+ }
}
}
@@ -378,7 +386,9 @@
duration =
if (isLargeClock) STATUS_AREA_MOVE_UP_MILLIS else STATUS_AREA_MOVE_DOWN_MILLIS
interpolator = Interpolators.EMPHASIZED
- addTarget(sharedR.id.date_smartspace_view)
+ if (!com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ addTarget(sharedR.id.date_smartspace_view)
+ }
addTarget(sharedR.id.bc_smartspace_view)
// Notifications normally and media on split shade needs to be moved
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/DefaultClockSteppingTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/DefaultClockSteppingTransition.kt
index f601155..0874b6d 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/DefaultClockSteppingTransition.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/DefaultClockSteppingTransition.kt
@@ -23,14 +23,17 @@
import android.view.ViewGroup
import com.android.app.animation.Interpolators
import com.android.systemui.plugins.clocks.ClockController
+import com.android.systemui.shared.R as sharedR
-class DefaultClockSteppingTransition(
- private val clock: ClockController,
-) : Transition() {
+class DefaultClockSteppingTransition(private val clock: ClockController) : Transition() {
init {
interpolator = Interpolators.LINEAR
duration = KEYGUARD_STATUS_VIEW_CUSTOM_CLOCK_MOVE_DURATION_MS
addTarget(clock.largeClock.view)
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ addTarget(sharedR.id.date_smartspace_view_large)
+ addTarget(sharedR.id.weather_smartspace_view_large)
+ }
}
private fun captureValues(transitionValues: TransitionValues) {
@@ -51,7 +54,7 @@
override fun createAnimator(
sceneRoot: ViewGroup,
startValues: TransitionValues?,
- endValues: TransitionValues?
+ endValues: TransitionValues?,
): Animator? {
if (startValues == null || endValues == null) {
return null
@@ -67,7 +70,7 @@
clock.largeClock.animations.onPositionUpdated(
fromLeft,
direction,
- animation.animatedFraction
+ animation.animatedFraction,
)
}
return anim
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
index 74d471c..e119ec9 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
@@ -101,7 +101,7 @@
if (Flags.notificationShadeBlur()) {
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx)
} else {
- emptyFlow()
+ transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx)
},
flowWhenShadeIsNotExpanded =
transitionAnimation.sharedFlow(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToPrimaryBouncerTransitionViewModel.kt
index 3c126aa..f14a5a2 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToPrimaryBouncerTransitionViewModel.kt
@@ -51,7 +51,7 @@
if (Flags.notificationShadeBlur()) {
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx)
} else {
- emptyFlow()
+ transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx)
},
flowWhenShadeIsNotExpanded =
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx),
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
index 5a111aa..4a39421 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
@@ -32,7 +32,6 @@
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.emptyFlow
/**
* Breaks down PRIMARY BOUNCER->LOCKSCREEN transition into discrete steps for corresponding views to
@@ -81,7 +80,7 @@
if (Flags.notificationShadeBlur()) {
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx)
} else {
- emptyFlow()
+ transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx)
},
flowWhenShadeIsNotExpanded =
transitionAnimation.sharedFlow(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToOccludedTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToOccludedTransitionViewModel.kt
index 0f0e7b6..31b20a7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToOccludedTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToOccludedTransitionViewModel.kt
@@ -27,7 +27,6 @@
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.emptyFlow
@SysUISingleton
class PrimaryBouncerToOccludedTransitionViewModel
@@ -51,7 +50,7 @@
if (Flags.notificationShadeBlur()) {
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx)
} else {
- emptyFlow()
+ transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx)
},
flowWhenShadeIsNotExpanded =
transitionAnimation.immediatelyTransitionTo(blurConfig.minBlurRadiusPx),
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaProcessingHelper.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaProcessingHelper.kt
index beb4d41..df0e1ad 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaProcessingHelper.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaProcessingHelper.kt
@@ -22,6 +22,7 @@
import android.graphics.drawable.Icon
import android.media.session.MediaController
import android.media.session.PlaybackState
+import android.os.BadParcelableException
import android.util.Log
import com.android.systemui.Flags.mediaControlsPostsOptimization
import com.android.systemui.biometrics.Utils.toBitmap
@@ -109,7 +110,12 @@
}
if (firstAction.extras != null) {
firstAction.extras.keySet().forEach { key ->
- if (firstAction.extras[key] != secondAction.extras[key]) {
+ try {
+ if (firstAction.extras[key] != secondAction.extras[key]) {
+ return false
+ }
+ } catch (e: BadParcelableException) {
+ Log.e(TAG, "Cannot unparcel extras", e)
return false
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/SeekBarObserver.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/SeekBarObserver.kt
index c9716be..cedf661 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/SeekBarObserver.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/SeekBarObserver.kt
@@ -18,9 +18,6 @@
import android.animation.Animator
import android.animation.ObjectAnimator
-import android.icu.text.MeasureFormat
-import android.icu.util.Measure
-import android.icu.util.MeasureUnit
import android.text.format.DateUtils
import androidx.annotation.UiThread
import androidx.lifecycle.Observer
@@ -31,11 +28,8 @@
import com.android.systemui.media.controls.ui.view.MediaViewHolder
import com.android.systemui.media.controls.ui.viewmodel.SeekBarViewModel
import com.android.systemui.res.R
-import java.util.Locale
private const val TAG = "SeekBarObserver"
-private const val MIN_IN_SEC = 60
-private const val HOUR_IN_SEC = MIN_IN_SEC * 60
/**
* Observer for changes from SeekBarViewModel.
@@ -133,7 +127,7 @@
}
holder.seekBar.setMax(data.duration)
- val totalTimeDescription = formatTimeContentDescription(data.duration)
+ val totalTimeDescription = data.durationDescription
if (data.scrubbing) {
holder.scrubbingTotalTimeView.text = formatTimeLabel(data.duration)
}
@@ -153,7 +147,7 @@
}
}
- val elapsedTimeDescription = formatTimeContentDescription(it)
+ val elapsedTimeDescription = data.elapsedTimeDescription
if (data.scrubbing) {
holder.scrubbingElapsedTimeView.text = formatTimeLabel(it)
}
@@ -172,43 +166,6 @@
return DateUtils.formatElapsedTime(milliseconds / DateUtils.SECOND_IN_MILLIS)
}
- /**
- * Returns a time string suitable for content description, e.g. "12 minutes 34 seconds"
- *
- * Follows same logic as Chronometer#formatDuration
- */
- private fun formatTimeContentDescription(milliseconds: Int): CharSequence {
- var seconds = milliseconds / DateUtils.SECOND_IN_MILLIS
-
- val hours =
- if (seconds >= HOUR_IN_SEC) {
- seconds / HOUR_IN_SEC
- } else {
- 0
- }
- seconds -= hours * HOUR_IN_SEC
-
- val minutes =
- if (seconds >= MIN_IN_SEC) {
- seconds / MIN_IN_SEC
- } else {
- 0
- }
- seconds -= minutes * MIN_IN_SEC
-
- val measures = arrayListOf<Measure>()
- if (hours > 0) {
- measures.add(Measure(hours, MeasureUnit.HOUR))
- }
- if (minutes > 0) {
- measures.add(Measure(minutes, MeasureUnit.MINUTE))
- }
- measures.add(Measure(seconds, MeasureUnit.SECOND))
-
- return MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
- .formatMeasures(*measures.toTypedArray())
- }
-
@VisibleForTesting
open fun buildResetAnimator(targetTime: Int): Animator {
val animator =
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModel.kt
index 1e99697..a1f0cc3 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModel.kt
@@ -16,11 +16,15 @@
package com.android.systemui.media.controls.ui.viewmodel
+import android.icu.text.MeasureFormat
+import android.icu.util.Measure
+import android.icu.util.MeasureUnit
import android.media.MediaMetadata
import android.media.session.MediaController
import android.media.session.PlaybackState
import android.os.SystemClock
import android.os.Trace
+import android.text.format.DateUtils
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
@@ -38,11 +42,14 @@
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.statusbar.NotificationMediaManager
import com.android.systemui.util.concurrency.RepeatableExecutor
+import java.util.Locale
import javax.inject.Inject
import kotlin.math.abs
-private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L
+private const val POSITION_UPDATE_INTERVAL_MILLIS = 500L
private const val MIN_FLING_VELOCITY_SCALE_FACTOR = 10
+private const val MIN_IN_SEC = 60
+private const val HOUR_IN_SEC = MIN_IN_SEC * 60
private const val TRACE_POSITION_NAME = "SeekBarPollingPosition"
@@ -97,11 +104,20 @@
)
set(value) {
val enabledChanged = value.enabled != field.enabled
- field = value
if (enabledChanged) {
enabledChangeListener?.onEnabledChanged(value.enabled)
}
- _progress.postValue(value)
+ bgExecutor.execute {
+ val durationDescription = formatTimeContentDescription(value.duration)
+ val elapsedDescription =
+ value.elapsedTime?.let { formatTimeContentDescription(it) } ?: ""
+ field =
+ value.copy(
+ durationDescription = durationDescription,
+ elapsedTimeDescription = elapsedDescription,
+ )
+ _progress.postValue(field)
+ }
}
private val _progress = MutableLiveData<Progress>().apply { postValue(_data) }
@@ -253,7 +269,8 @@
playbackState?.state ?: PlaybackState.STATE_NONE
)
_data = Progress(enabled, seekAvailable, playing, scrubbing, position, duration, listening)
- checkIfPollingNeeded()
+ // No need to update since we just set the progress info
+ checkIfPollingNeeded(requireUpdate = false)
}
/**
@@ -311,8 +328,13 @@
}
}
+ /**
+ * Begin polling if needed given the current seekbar state
+ *
+ * @param requireUpdate If true, update the playback position without beginning polling
+ */
@WorkerThread
- private fun checkIfPollingNeeded() {
+ private fun checkIfPollingNeeded(requireUpdate: Boolean = true) {
val needed = listening && !scrubbing && playbackState?.isInMotion() ?: false
val traceCookie = controller?.sessionToken.hashCode()
if (needed) {
@@ -329,7 +351,7 @@
Trace.endAsyncSection(TRACE_POSITION_NAME, traceCookie)
}
}
- } else {
+ } else if (requireUpdate) {
checkPlaybackPosition()
cancel?.run()
cancel = null
@@ -399,6 +421,43 @@
abs(firstMotionEvent!!.y - lastMotionEvent!!.y)
}
+ /**
+ * Returns a time string suitable for content description, e.g. "12 minutes 34 seconds"
+ *
+ * Follows same logic as Chronometer#formatDuration
+ */
+ private fun formatTimeContentDescription(milliseconds: Int): CharSequence {
+ var seconds = milliseconds / DateUtils.SECOND_IN_MILLIS
+
+ val hours =
+ if (seconds >= HOUR_IN_SEC) {
+ seconds / HOUR_IN_SEC
+ } else {
+ 0
+ }
+ seconds -= hours * HOUR_IN_SEC
+
+ val minutes =
+ if (seconds >= MIN_IN_SEC) {
+ seconds / MIN_IN_SEC
+ } else {
+ 0
+ }
+ seconds -= minutes * MIN_IN_SEC
+
+ val measures = arrayListOf<Measure>()
+ if (hours > 0) {
+ measures.add(Measure(hours, MeasureUnit.HOUR))
+ }
+ if (minutes > 0) {
+ measures.add(Measure(minutes, MeasureUnit.MINUTE))
+ }
+ measures.add(Measure(seconds, MeasureUnit.SECOND))
+
+ return MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
+ .formatMeasures(*measures.toTypedArray())
+ }
+
/** Listener interface to be notified when the user starts or stops scrubbing. */
interface ScrubbingChangeListener {
fun onScrubbingChanged(scrubbing: Boolean)
@@ -580,5 +639,7 @@
val duration: Int,
/** whether seekBar is listening to progress updates */
val listening: Boolean,
+ val elapsedTimeDescription: CharSequence = "",
+ val durationDescription: CharSequence = "",
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt
index 6ca0471..469bec7 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt
@@ -24,7 +24,6 @@
import com.android.internal.logging.UiEventLogger
import com.android.internal.statusbar.IUndoMediaTransferCallback
import com.android.systemui.CoreStartable
-import com.android.systemui.Dumpable
import com.android.systemui.common.shared.model.Text
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
@@ -53,7 +52,7 @@
private val dumpManager: DumpManager,
private val logger: MediaTttSenderLogger,
private val uiEventLogger: MediaTttSenderUiEventLogger,
-) : CoreStartable, Dumpable {
+) : CoreStartable {
// Since the media transfer display is similar to a heads-up notification, use the same timeout.
private val defaultTimeout = context.resources.getInteger(R.integer.heads_up_notification_decay)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
index e0b93fb..44c8dc3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
@@ -21,6 +21,7 @@
import android.graphics.PointF
import android.graphics.Rect
import android.os.Bundle
+import android.os.Trace
import android.util.IndentingPrintWriter
import android.view.LayoutInflater
import android.view.MotionEvent
@@ -112,6 +113,7 @@
import com.android.systemui.plugins.qs.QSContainerController
import com.android.systemui.qs.composefragment.SceneKeys.QuickQuickSettings
import com.android.systemui.qs.composefragment.SceneKeys.QuickSettings
+import com.android.systemui.qs.composefragment.SceneKeys.debugName
import com.android.systemui.qs.composefragment.SceneKeys.toIdleSceneKey
import com.android.systemui.qs.composefragment.ui.GridAnchor
import com.android.systemui.qs.composefragment.ui.NotificationScrimClipParams
@@ -285,6 +287,12 @@
*/
@Composable
private fun CollapsableQuickSettingsSTL() {
+ val nextCookie = remember {
+ object {
+ var value = 0
+ }
+ }
+ val transitionToCookie = remember { mutableMapOf<TransitionState.Transition, Int>() }
val sceneState =
rememberMutableSceneTransitionLayoutState(
initialScene = remember { viewModel.expansionState.toIdleSceneKey() },
@@ -298,6 +306,20 @@
toEditMode()
}
},
+ onTransitionStart = { transition ->
+ val cookie = nextCookie.value++
+ transitionToCookie[transition] = cookie
+ Trace.beginAsyncSection(
+ "CollapsableQuickSettingsSTL ${transition.debugName}",
+ cookie,
+ )
+ },
+ onTransitionEnd = { transition ->
+ Trace.endAsyncSection(
+ "CollapsableQuickSettingsSTL ${transition.debugName}",
+ transitionToCookie.remove(transition) ?: -1,
+ )
+ },
)
LaunchedEffect(Unit) {
@@ -854,6 +876,9 @@
val QuickSettings = SceneKey("QuickSettingsScene")
val EditMode = SceneKey("EditModeScene")
+ val TransitionState.Transition.debugName: String
+ get() = "[from=${fromContent.debugName}, to=${toContent.debugName}]"
+
fun QSFragmentComposeViewModel.QSExpansionState.toIdleSceneKey(): SceneKey {
return when {
progress < 0.5f -> QuickQuickSettings
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractor.kt
index 609541b..c70a854 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/domain/interactor/CurrentTilesInteractor.kt
@@ -20,6 +20,7 @@
import android.content.Context
import android.content.Intent
import android.os.UserHandle
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.Dumpable
import com.android.systemui.ProtoDumpable
import com.android.systemui.dagger.SysUISingleton
@@ -62,7 +63,6 @@
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn
-import com.android.app.tracing.coroutines.launchTraced as launch
import kotlinx.coroutines.withContext
/**
@@ -245,7 +245,6 @@
processExistingTile(
tileSpec,
specsToTiles.getValue(tileSpec),
- userChanged,
newUser,
) ?: createTile(tileSpec)
} else {
@@ -378,7 +377,6 @@
private fun processExistingTile(
tileSpec: TileSpec,
tileOrNotInstalled: TileOrNotInstalled,
- userChanged: Boolean,
user: Int,
): QSTile? {
return when (tileOrNotInstalled) {
@@ -386,6 +384,10 @@
is TileOrNotInstalled.Tile -> {
val qsTile = tileOrNotInstalled.tile
when {
+ qsTile.isDestroyed -> {
+ logger.logTileDestroyedIgnored(tileSpec)
+ null
+ }
!qsTile.isAvailable -> {
logger.logTileDestroyed(
tileSpec,
@@ -399,10 +401,11 @@
qsTile !is CustomTile -> {
// The tile is not a custom tile. Make sure they are reset to the correct
// user
- if (userChanged) {
+ if (qsTile.currentTileUser != user) {
qsTile.userSwitch(user)
logger.logTileUserChanged(tileSpec, user)
}
+
qsTile
}
qsTile.user == user -> {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLogger.kt
index e237ca9..21a8ec6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLogger.kt
@@ -60,7 +60,7 @@
bool1 = usesDefault
int1 = user
},
- { "Parsed tiles (default=$bool1, user=$int1): $str1" }
+ { "Parsed tiles (default=$bool1, user=$int1): $str1" },
)
}
@@ -77,7 +77,7 @@
str2 = reconciledTiles.toString()
int1 = user
},
- { "Tiles restored and reconciled for user: $int1\nWas: $str1\nSet to: $str2" }
+ { "Tiles restored and reconciled for user: $int1\nWas: $str1\nSet to: $str2" },
)
}
@@ -94,7 +94,7 @@
str2 = newList.toString()
int1 = userId
},
- { "Processing $str1 for user $int1\nNew list: $str2" }
+ { "Processing $str1 for user $int1\nNew list: $str2" },
)
}
@@ -107,7 +107,16 @@
str1 = spec.toString()
str2 = reason.readable
},
- { "Tile $str1 destroyed. Reason: $str2" }
+ { "Tile $str1 destroyed. Reason: $str2" },
+ )
+ }
+
+ fun logTileDestroyedIgnored(spec: TileSpec) {
+ tileListLogBuffer.log(
+ TILE_LIST_TAG,
+ LogLevel.DEBUG,
+ { str1 = spec.toString() },
+ { "Tile $str1 ignored as it was already destroyed." },
)
}
@@ -117,7 +126,7 @@
TILE_LIST_TAG,
LogLevel.DEBUG,
{ str1 = spec.toString() },
- { "Tile $str1 created" }
+ { "Tile $str1 created" },
)
}
@@ -127,7 +136,7 @@
TILE_LIST_TAG,
LogLevel.VERBOSE,
{ str1 = spec.toString() },
- { "Tile $str1 not found in factory" }
+ { "Tile $str1 not found in factory" },
)
}
@@ -140,7 +149,7 @@
str1 = spec.toString()
int1 = user
},
- { "User changed to $int1 for tile $str1" }
+ { "User changed to $int1 for tile $str1" },
)
}
@@ -156,7 +165,7 @@
str1 = tiles.toString()
int1 = user
},
- { "Tiles kept for not installed packages for user $int1: $str1" }
+ { "Tiles kept for not installed packages for user $int1: $str1" },
)
}
@@ -168,7 +177,7 @@
str1 = tiles.toString()
int1 = userId
},
- { "Auto add tiles parsed for user $int1: $str1" }
+ { "Auto add tiles parsed for user $int1: $str1" },
)
}
@@ -180,7 +189,7 @@
str1 = tiles.toString()
int1 = userId
},
- { "Auto-add tiles reconciled for user $int1: $str1" }
+ { "Auto-add tiles reconciled for user $int1: $str1" },
)
}
@@ -193,7 +202,7 @@
int2 = position
str1 = spec.toString()
},
- { "Tile $str1 auto added for user $int1 at position $int2" }
+ { "Tile $str1 auto added for user $int1 at position $int2" },
)
}
@@ -205,7 +214,7 @@
int1 = userId
str1 = spec.toString()
},
- { "Tile $str1 auto removed for user $int1" }
+ { "Tile $str1 auto removed for user $int1" },
)
}
@@ -217,7 +226,7 @@
int1 = userId
str1 = spec.toString()
},
- { "Tile $str1 unmarked as auto-added for user $int1" }
+ { "Tile $str1 unmarked as auto-added for user $int1" },
)
}
@@ -226,7 +235,7 @@
RESTORE_TAG,
LogLevel.DEBUG,
{ int1 = userId },
- { "Restored from single intent after user setup complete for user $int1" }
+ { "Restored from single intent after user setup complete for user $int1" },
)
}
@@ -243,7 +252,7 @@
"Restored settings data for user $int1\n" +
"\tRestored tiles: $str1\n" +
"\tRestored auto added tiles: $str2"
- }
+ },
)
}
@@ -258,7 +267,7 @@
str1 = restoreProcessorClassName
str2 = step.name
},
- { "Restore $str2 processed by $str1" }
+ { "Restore $str2 processed by $str1" },
)
}
@@ -273,6 +282,6 @@
enum class RestorePreprocessorStep {
PREPROCESSING,
- POSTPROCESSING
+ POSTPROCESSING,
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
index 1d1e991..c6fc868 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -74,6 +74,8 @@
import java.io.PrintWriter;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Base quick-settings tile, extend this to create a new tile.
@@ -127,6 +129,8 @@
private int mIsFullQs;
private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
+ private final AtomicBoolean mIsDestroyed = new AtomicBoolean(false);
+ private final AtomicInteger mCurrentTileUser = new AtomicInteger();
/**
* Provides a new {@link TState} of the appropriate type to use between this tile and the
@@ -203,6 +207,7 @@
mMetricsLogger = metricsLogger;
mStatusBarStateController = statusBarStateController;
mActivityStarter = activityStarter;
+ mCurrentTileUser.set(host.getUserId());
resetStates();
mUiHandler.post(() -> mLifecycle.setCurrentState(CREATED));
@@ -352,11 +357,19 @@
}
public void userSwitch(int newUserId) {
+ mCurrentTileUser.set(newUserId);
mHandler.obtainMessage(H.USER_SWITCH, newUserId, 0).sendToTarget();
postStale();
}
+ @Override
+ public int getCurrentTileUser() {
+ return mCurrentTileUser.get();
+ }
+
public void destroy() {
+ // We mark it as soon as we start the destroy process, as nothing can interrupt it.
+ mIsDestroyed.set(true);
mHandler.sendEmptyMessage(H.DESTROY);
}
@@ -365,7 +378,7 @@
*
* Should be called upon creation of the tile, before performing other operations
*/
- public void initialize() {
+ public final void initialize() {
mHandler.sendEmptyMessage(H.INITIALIZE);
}
@@ -525,6 +538,11 @@
});
}
+ @Override
+ public final boolean isDestroyed() {
+ return mIsDestroyed.get();
+ }
+
protected void checkIfRestrictionEnforcedByAdminOnly(State state, String userRestriction) {
EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(mContext,
userRestriction, mHost.getUserId());
@@ -799,7 +817,7 @@
*/
@Override
public void dump(PrintWriter pw, String[] args) {
- pw.println(this.getClass().getSimpleName() + ":");
+ pw.print(this.getClass().getSimpleName() + ":");
pw.print(" "); pw.println(getState().toString());
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
index f80b8fb..e48e943 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
@@ -99,7 +99,7 @@
}
override fun getDetailsViewModel(): TileDetailsViewModel {
- return internetDetailsViewModelFactory.create { longClick(null) }
+ return internetDetailsViewModelFactory.create()
}
override fun handleUpdateState(state: QSTile.BooleanState, arg: Any?) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/interactor/QSTileUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/interactor/QSTileUserActionInteractor.kt
index e8c4274..8ad4e16 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/interactor/QSTileUserActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/interactor/QSTileUserActionInteractor.kt
@@ -28,17 +28,4 @@
* It's safe to run long running computations inside this function.
*/
@WorkerThread suspend fun handleInput(input: QSTileInput<DATA_TYPE>)
-
- /**
- * Provides the [TileDetailsViewModel] for constructing the corresponding details view.
- *
- * This property is defined here to reuse the business logic. For example, reusing the user
- * long-click as the go-to-settings callback in the details view.
- * Subclasses can override this property to provide a specific [TileDetailsViewModel]
- * implementation.
- *
- * @return The [TileDetailsViewModel] instance, or null if not implemented.
- */
- val detailsViewModel: TileDetailsViewModel?
- get() = null
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt
index 8c75cf0..7f475f3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt
@@ -19,6 +19,7 @@
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.UiBackground
import com.android.systemui.plugins.FalsingManager
+import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics
import com.android.systemui.qs.tiles.base.interactor.DisabledByPolicyInteractor
@@ -70,9 +71,7 @@
* Creates [QSTileViewModelImpl] based on the interactors obtained from [QSTileComponent].
* Reference of that [QSTileComponent] is then stored along the view model.
*/
- fun create(
- tileSpec: TileSpec,
- ): QSTileViewModel {
+ fun create(tileSpec: TileSpec): QSTileViewModel {
val config = qsTileConfigProvider.getConfig(tileSpec.spec)
val component =
customTileComponentBuilder.qsTileConfigModule(QSTileConfigModule(config)).build()
@@ -90,6 +89,7 @@
backgroundDispatcher,
uiBackgroundDispatcher,
component.coroutineScope(),
+ /* tileDetailsViewModel= */ null,
)
}
}
@@ -127,6 +127,7 @@
userActionInteractor: QSTileUserActionInteractor<T>,
tileDataInteractor: QSTileDataInteractor<T>,
mapper: QSTileDataToStateMapper<T>,
+ tileDetailsViewModel: TileDetailsViewModel? = null,
): QSTileViewModelImpl<T> =
QSTileViewModelImpl(
qsTileConfigProvider.getConfig(tileSpec.spec),
@@ -142,6 +143,7 @@
backgroundDispatcher,
uiBackgroundDispatcher,
coroutineScopeFactory.create(),
+ tileDetailsViewModel,
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt
index 30bf5b3..3866c17 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt
@@ -83,6 +83,7 @@
private val backgroundDispatcher: CoroutineDispatcher,
uiBackgroundDispatcher: CoroutineDispatcher,
private val tileScope: CoroutineScope,
+ override val tileDetailsViewModel: TileDetailsViewModel? = null,
) : QSTileViewModel, Dumpable {
private val users: MutableStateFlow<UserHandle> =
@@ -96,6 +97,9 @@
private val tileData: SharedFlow<DATA_TYPE?> = createTileDataFlow()
+ override val currentTileUser: Int
+ get() = users.value.identifier
+
override val state: StateFlow<QSTileState?> =
tileData
.map { data ->
@@ -114,9 +118,6 @@
.flowOn(backgroundDispatcher)
.stateIn(tileScope, SharingStarted.WhileSubscribed(), true)
- override val detailsViewModel: TileDetailsViewModel?
- get() = userActionInteractor().detailsViewModel
-
override fun forceUpdate() {
tileScope.launch(context = backgroundDispatcher) { forceUpdates.emit(Unit) }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDetailsViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDetailsViewModel.kt
index 0ed56f6..6709fd2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDetailsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDetailsViewModel.kt
@@ -16,9 +16,11 @@
package com.android.systemui.qs.tiles.dialog
+import android.content.Intent
+import android.provider.Settings
import com.android.systemui.plugins.qs.TileDetailsViewModel
+import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandler
import com.android.systemui.statusbar.connectivity.AccessPointController
-import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -27,10 +29,13 @@
constructor(
private val accessPointController: AccessPointController,
val contentManagerFactory: InternetDetailsContentManager.Factory,
- @Assisted private val onLongClick: () -> Unit,
+ private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler,
) : TileDetailsViewModel() {
override fun clickOnSettingsButton() {
- onLongClick()
+ qsTileIntentUserActionHandler.handle(
+ /* expandable= */ null,
+ Intent(Settings.ACTION_WIFI_SETTINGS),
+ )
}
override fun getTitle(): String {
@@ -58,7 +63,7 @@
}
@AssistedFactory
- interface Factory {
- fun create(onLongClick: () -> Unit): InternetDetailsViewModel
+ fun interface Factory {
+ fun create(): InternetDetailsViewModel
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacy.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacy.java
index 0adc4131..8d4a24e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacy.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacy.java
@@ -400,6 +400,9 @@
mInternetDialogTitle.setText(internetContent.mInternetDialogTitleString);
mInternetDialogSubTitle.setText(internetContent.mInternetDialogSubTitle);
+ if (!internetContent.mIsWifiEnabled) {
+ setProgressBarVisible(false);
+ }
mAirplaneModeButton.setVisibility(
internetContent.mIsAirplaneModeEnabled ? View.VISIBLE : View.GONE);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/di/QSTileComponent.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/di/QSTileComponent.kt
index 0ed46e7..5f692f2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/di/QSTileComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/di/QSTileComponent.kt
@@ -16,6 +16,7 @@
package com.android.systemui.qs.tiles.impl.di
+import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor
import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper
import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
index 8e48fe4..0431e36 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
@@ -18,13 +18,10 @@
import android.content.Intent
import android.provider.Settings
-import com.android.systemui.animation.Expandable
import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.plugins.qs.TileDetailsViewModel
import com.android.systemui.qs.tiles.base.actions.QSTileIntentUserInputHandler
import com.android.systemui.qs.tiles.base.interactor.QSTileInput
import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor
-import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
import com.android.systemui.qs.tiles.impl.internet.domain.model.InternetTileModel
import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction
@@ -41,7 +38,6 @@
private val internetDialogManager: InternetDialogManager,
private val accessPointController: AccessPointController,
private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler,
- private val internetDetailsViewModelFactory: InternetDetailsViewModel.Factory,
) : QSTileUserActionInteractor<InternetTileModel> {
override suspend fun handleInput(input: QSTileInput<InternetTileModel>): Unit =
@@ -58,16 +54,12 @@
}
}
is QSTileUserAction.LongClick -> {
- handleLongClick(action.expandable)
+ qsTileIntentUserActionHandler.handle(
+ action.expandable,
+ Intent(Settings.ACTION_WIFI_SETTINGS),
+ )
}
else -> {}
}
}
-
- override val detailsViewModel: TileDetailsViewModel =
- internetDetailsViewModelFactory.create { handleLongClick(null) }
-
- private fun handleLongClick(expandable: Expandable?) {
- qsTileIntentUserActionHandler.handle(expandable, Intent(Settings.ACTION_WIFI_SETTINGS))
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModel.kt
index e8b9926..7a53388 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModel.kt
@@ -39,9 +39,12 @@
val isAvailable: StateFlow<Boolean>
/** Specifies the [TileDetailsViewModel] for constructing the corresponding details view. */
- val detailsViewModel: TileDetailsViewModel?
+ val tileDetailsViewModel: TileDetailsViewModel?
get() = null
+ /** Returns the current user for this tile */
+ val currentTileUser: Int
+
/**
* Notifies about the user change. Implementations should avoid using 3rd party userId sources
* and use this value instead. This is to maintain consistent and concurrency-free behaviour
@@ -65,8 +68,6 @@
fun destroy()
}
-/**
- * Returns the immediate state of the tile or null if the state haven't been collected yet.
- */
+/** Returns the immediate state of the tile or null if the state haven't been collected yet. */
val QSTileViewModel.currentState: QSTileState?
get() = state.value
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt
index 30d1f05..e607eae 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt
@@ -19,7 +19,6 @@
import android.content.Context
import android.os.UserHandle
import android.util.Log
-import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.internal.logging.InstanceId
import com.android.systemui.Dumpable
import com.android.systemui.animation.Expandable
@@ -156,8 +155,12 @@
qsTileViewModel.onUserChanged(UserHandle.of(currentUser))
}
+ override fun getCurrentTileUser(): Int {
+ return qsTileViewModel.currentTileUser
+ }
+
override fun getDetailsViewModel(): TileDetailsViewModel? {
- return qsTileViewModel.detailsViewModel
+ return qsTileViewModel.tileDetailsViewModel
}
@Deprecated(
@@ -213,6 +216,10 @@
qsTileViewModel.destroy()
}
+ override fun isDestroyed(): Boolean {
+ return !(tileAdapterJob?.isActive ?: false)
+ }
+
override fun getState(): QSTile.AdapterState =
qsTileViewModel.currentState?.let { mapState(context, it, qsTileViewModel.config) }
?: QSTile.AdapterState()
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/StubQSTileViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/StubQSTileViewModel.kt
index 00b7e61..bdd5c73 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/StubQSTileViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/StubQSTileViewModel.kt
@@ -37,4 +37,7 @@
override fun onActionPerformed(userAction: QSTileUserAction) = error("Don't call stubs")
override fun destroy() = error("Don't call stubs")
+
+ override val currentTileUser: Int
+ get() = error("Don't call stubs")
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
index ce48c85..6670c04 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
@@ -366,6 +366,7 @@
val batteryComposeView =
ComposeView(mView.context).apply {
setContent {
+ id = R.id.battery_meter_composable_view
val showBatteryEstimate by showBatteryEstimate.collectAsStateWithLifecycle()
BatteryWithEstimate(
modifier = Modifier.height(17.dp).wrapContentWidth(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 7dc2ae7..e44701d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -580,7 +580,8 @@
/**
* @see IStatusBar#immersiveModeChanged
*/
- default void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) {}
+ default void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode,
+ int windowType) {}
/**
* @see IStatusBar#moveFocusedTaskToDesktop(int)
@@ -876,11 +877,13 @@
}
@Override
- public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) {
+ public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode,
+ int windowType) {
synchronized (mLock) {
final SomeArgs args = SomeArgs.obtain();
args.argi1 = rootDisplayAreaId;
args.argi2 = isImmersiveMode ? 1 : 0;
+ args.argi3 = windowType;
mHandler.obtainMessage(MSG_IMMERSIVE_CHANGED, args).sendToTarget();
}
}
@@ -2030,8 +2033,10 @@
args = (SomeArgs) msg.obj;
int rootDisplayAreaId = args.argi1;
boolean isImmersiveMode = args.argi2 != 0;
+ int windowType = args.argi3;
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).immersiveModeChanged(rootDisplayAreaId, isImmersiveMode);
+ mCallbacks.get(i).immersiveModeChanged(rootDisplayAreaId, isImmersiveMode,
+ windowType);
}
break;
case MSG_ENTER_DESKTOP: {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java
index fed3f6e..97e62d7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java
@@ -23,6 +23,8 @@
import static android.app.StatusBarManager.DISABLE_RECENT;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED;
import static android.window.DisplayAreaOrganizer.KEY_ROOT_DISPLAY_AREA_ID;
@@ -208,7 +210,8 @@
}
@Override
- public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) {
+ public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode,
+ int windowType) {
mHandler.removeMessages(H.SHOW);
if (isImmersiveMode) {
if (DEBUG) Log.d(TAG, "immersiveModeChanged() sConfirmed=" + sConfirmed);
@@ -221,7 +224,9 @@
&& mCanSystemBarsBeShownByUser
&& !mNavBarEmpty
&& !UserManager.isDeviceInDemoMode(mDisplayContext)
- && (mLockTaskState != LOCK_TASK_MODE_LOCKED)) {
+ && (mLockTaskState != LOCK_TASK_MODE_LOCKED)
+ && windowType != TYPE_PRESENTATION
+ && windowType != TYPE_PRIVATE_PRESENTATION) {
final Message msg = mHandler.obtainMessage(
H.SHOW);
msg.arg1 = rootDisplayAreaId;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index 13737dbff..05ef164 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -36,6 +36,7 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.CentralSurfaces
@@ -391,7 +392,9 @@
}
if (view is ExpandableNotificationRow) {
// Only drag down on sensitive views, otherwise the ExpandHelper will take this
- return view.entry.isSensitive.value
+ return if (NotificationBundleUi.isEnabled)
+ view.entryAdapter?.isSensitive?.value == true
+ else view.entry.isSensitive.value
}
}
return false
@@ -559,12 +562,15 @@
var userId: Int = lockScreenUserManager.getCurrentUserId()
var entry: NotificationEntry? = null
if (expandView is ExpandableNotificationRow) {
- entry = expandView.entry
expandView.setUserExpanded(/* userExpanded= */ true, /* allowChildExpansion= */ true)
// Indicate that the group expansion is changing at this time -- this way the group
// and children backgrounds / divider animations will look correct.
expandView.isGroupExpansionChanging = true
- userId = entry.sbn.userId
+ if (NotificationBundleUi.isEnabled) {
+ userId = expandView.entryAdapter?.sbn?.userId!!
+ } else {
+ userId = expandView.entry.sbn.userId
+ }
}
var fullShadeNeedsBouncer =
(!lockScreenUserManager.shouldShowLockscreenNotifications() ||
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityModule.kt
index 10090283..48f0245 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityModule.kt
@@ -34,6 +34,7 @@
import com.android.systemui.qs.tiles.NfcTile
import com.android.systemui.qs.tiles.base.interactor.QSTileAvailabilityInteractor
import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory
+import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.impl.airplane.domain.AirplaneModeMapper
import com.android.systemui.qs.tiles.impl.airplane.domain.interactor.AirplaneModeTileDataInteractor
import com.android.systemui.qs.tiles.impl.airplane.domain.interactor.AirplaneModeTileUserActionInteractor
@@ -162,13 +163,15 @@
factory: QSTileViewModelFactory.Static<AirplaneModeTileModel>,
mapper: AirplaneModeMapper,
stateInteractor: AirplaneModeTileDataInteractor,
- userActionInteractor: AirplaneModeTileUserActionInteractor
+ userActionInteractor: AirplaneModeTileUserActionInteractor,
+ internetDetailsViewModelFactory: InternetDetailsViewModel.Factory
): QSTileViewModel =
factory.create(
TileSpec.create(AIRPLANE_MODE_TILE_SPEC),
userActionInteractor,
stateInteractor,
mapper,
+ internetDetailsViewModelFactory.create(),
)
@Provides
@@ -226,13 +229,15 @@
factory: QSTileViewModelFactory.Static<InternetTileModel>,
mapper: InternetTileMapper,
stateInteractor: InternetTileDataInteractor,
- userActionInteractor: InternetTileUserActionInteractor
+ userActionInteractor: InternetTileUserActionInteractor,
+ internetDetailsViewModelFactory: InternetDetailsViewModel.Factory
): QSTileViewModel =
factory.create(
TileSpec.create(INTERNET_TILE_SPEC),
userActionInteractor,
stateInteractor,
mapper,
+ internetDetailsViewModelFactory.create(),
)
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt
new file mode 100644
index 0000000..7069791
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarOrchestratorStore.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.core
+
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.display.data.repository.DisplayRepository
+import com.android.systemui.display.data.repository.DisplayScopeRepository
+import com.android.systemui.display.data.repository.PerDisplayStoreImpl
+import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
+import com.android.systemui.statusbar.phone.AutoHideControllerStore
+import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
+import com.android.systemui.statusbar.window.data.repository.StatusBarWindowStateRepositoryStore
+import dagger.Lazy
+import dagger.Module
+import dagger.Provides
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+
+/** [PerDisplayStoreImpl] for providing display specific [StatusBarOrchestrator]. */
+@SysUISingleton
+class MultiDisplayStatusBarOrchestratorStore
+@Inject
+constructor(
+ @Background backgroundApplicationScope: CoroutineScope,
+ displayRepository: DisplayRepository,
+ private val factory: StatusBarOrchestrator.Factory,
+ private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
+ private val statusBarModeRepositoryStore: StatusBarModeRepositoryStore,
+ private val initializerStore: StatusBarInitializerStore,
+ private val autoHideControllerStore: AutoHideControllerStore,
+ private val displayScopeRepository: DisplayScopeRepository,
+ private val statusBarWindowStateRepositoryStore: StatusBarWindowStateRepositoryStore,
+) : PerDisplayStoreImpl<StatusBarOrchestrator>(backgroundApplicationScope, displayRepository) {
+
+ init {
+ StatusBarConnectedDisplays.assertInNewMode()
+ }
+
+ override fun createInstanceForDisplay(displayId: Int): StatusBarOrchestrator? {
+ val statusBarModeRepository =
+ statusBarModeRepositoryStore.forDisplay(displayId) ?: return null
+ val statusBarInitializer = initializerStore.forDisplay(displayId) ?: return null
+ val statusBarWindowController =
+ statusBarWindowControllerStore.forDisplay(displayId) ?: return null
+ val autoHideController = autoHideControllerStore.forDisplay(displayId) ?: return null
+ return factory.create(
+ displayId,
+ // TODO: b/398825844 - Handle nullness to prevent leaking CoroutineScope.
+ displayScopeRepository.scopeForDisplay(displayId),
+ statusBarWindowStateRepositoryStore.forDisplay(displayId),
+ statusBarModeRepository,
+ statusBarInitializer,
+ statusBarWindowController,
+ autoHideController,
+ )
+ }
+
+ override val instanceClass = StatusBarOrchestrator::class.java
+
+ override suspend fun onDisplayRemovalAction(instance: StatusBarOrchestrator) {
+ instance.stop()
+ }
+}
+
+@Module
+interface MultiDisplayStatusBarOrchestratorStoreModule {
+
+ @Provides
+ @SysUISingleton
+ @IntoMap
+ @ClassKey(MultiDisplayStatusBarOrchestratorStore::class)
+ fun storeAsCoreStartable(
+ multiDisplayLazy: Lazy<MultiDisplayStatusBarOrchestratorStore>
+ ): CoreStartable {
+ return if (StatusBarConnectedDisplays.isEnabled) {
+ multiDisplayLazy.get()
+ } else {
+ CoreStartable.NOP
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarStarter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarStarter.kt
index eeb7a40..dfb3763 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarStarter.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/MultiDisplayStatusBarStarter.kt
@@ -23,13 +23,8 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.display.data.repository.DisplayRepository
-import com.android.systemui.display.data.repository.DisplayScopeRepository
import com.android.systemui.statusbar.data.repository.LightBarControllerStore
import com.android.systemui.statusbar.data.repository.PrivacyDotWindowControllerStore
-import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
-import com.android.systemui.statusbar.phone.AutoHideControllerStore
-import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
-import com.android.systemui.statusbar.window.data.repository.StatusBarWindowStateRepositoryStore
import com.android.systemui.util.kotlin.pairwiseBy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -44,15 +39,9 @@
@Inject
constructor(
@Application private val applicationScope: CoroutineScope,
- private val displayScopeRepository: DisplayScopeRepository,
- private val statusBarOrchestratorFactory: StatusBarOrchestrator.Factory,
- private val statusBarWindowStateRepositoryStore: StatusBarWindowStateRepositoryStore,
- private val statusBarModeRepositoryStore: StatusBarModeRepositoryStore,
+ private val multiDisplayStatusBarOrchestratorStore: MultiDisplayStatusBarOrchestratorStore,
private val displayRepository: DisplayRepository,
- private val initializerStore: StatusBarInitializerStore,
- private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
private val statusBarInitializerStore: StatusBarInitializerStore,
- private val autoHideControllerStore: AutoHideControllerStore,
private val privacyDotWindowControllerStore: PrivacyDotWindowControllerStore,
private val lightBarControllerStore: LightBarControllerStore,
private val windowManager: IWindowManager,
@@ -74,15 +63,14 @@
// TODO(b/393191204): Split navbar, status bar, etc. functionality
// from WindowManager#shouldShowSystemDecors.
if (windowManager.shouldShowSystemDecors(it.displayId)) {
- createAndStartComponentsForDisplay(it)
+ createAndStartComponentsForDisplay(it.displayId)
}
}
}
}
}
- private fun createAndStartComponentsForDisplay(display: Display) {
- val displayId = display.displayId
+ private fun createAndStartComponentsForDisplay(displayId: Int) {
createAndStartOrchestratorForDisplay(displayId)
createAndStartInitializerForDisplay(displayId)
startPrivacyDotForDisplay(displayId)
@@ -97,22 +85,7 @@
}
private fun createAndStartOrchestratorForDisplay(displayId: Int) {
- val statusBarModeRepository = statusBarModeRepositoryStore.forDisplay(displayId) ?: return
- val statusBarInitializer = initializerStore.forDisplay(displayId) ?: return
- val statusBarWindowController =
- statusBarWindowControllerStore.forDisplay(displayId) ?: return
- val autoHideController = autoHideControllerStore.forDisplay(displayId) ?: return
- statusBarOrchestratorFactory
- .create(
- displayId,
- displayScopeRepository.scopeForDisplay(displayId),
- statusBarWindowStateRepositoryStore.forDisplay(displayId),
- statusBarModeRepository,
- statusBarInitializer,
- statusBarWindowController,
- autoHideController,
- )
- .start()
+ multiDisplayStatusBarOrchestratorStore.forDisplay(displayId)?.start()
}
private fun createAndStartInitializerForDisplay(displayId: Int) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarOrchestrator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarOrchestrator.kt
index 9d55f6c..73ada54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarOrchestrator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarOrchestrator.kt
@@ -19,7 +19,7 @@
import android.view.Display
import android.view.View
import com.android.app.tracing.coroutines.launchTraced as launch
-import com.android.systemui.CoreStartable
+import com.android.systemui.Dumpable
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.demomode.DemoModeController
@@ -50,6 +50,7 @@
import java.util.Optional
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChangedBy
@@ -82,7 +83,7 @@
private val dumpManager: DumpManager,
powerInteractor: PowerInteractor,
primaryBouncerInteractor: PrimaryBouncerInteractor,
-) : CoreStartable {
+) : Dumpable {
private val dumpableName: String =
if (displayId == Display.DEFAULT_DISPLAY) {
@@ -91,6 +92,8 @@
"${javaClass.simpleName}$displayId"
}
+ private var startJob: Job? = null
+
private val phoneStatusBarViewController =
MutableStateFlow<PhoneStatusBarViewController?>(value = null)
@@ -141,32 +144,33 @@
Pair(barTransitions, statusBarMode)
}
- override fun start() {
+ /** Starts status bar orchestration. To be called when status bar is created. */
+ fun start() {
StatusBarConnectedDisplays.assertInNewMode()
- coroutineScope
- // Perform animations on the main thread to prevent crashes.
- .launch(context = mainContext) {
- dumpManager.registerCriticalDumpable(dumpableName, this@StatusBarOrchestrator)
- launch {
- controllerAndBouncerShowing.collect { (controller, bouncerShowing) ->
- setBouncerShowingForStatusBarComponents(controller, bouncerShowing)
+ startJob =
+ coroutineScope
+ // Perform animations on the main thread to prevent crashes.
+ .launch(context = mainContext) {
+ dumpManager.registerCriticalDumpable(dumpableName, this@StatusBarOrchestrator)
+ launch {
+ controllerAndBouncerShowing.collect { (controller, bouncerShowing) ->
+ setBouncerShowingForStatusBarComponents(controller, bouncerShowing)
+ }
}
- }
- launch {
- barTransitionsAndDeviceAsleep.collect { (barTransitions, deviceAsleep) ->
- if (deviceAsleep) {
- barTransitions.finishAnimations()
+ launch {
+ barTransitionsAndDeviceAsleep.collect { (barTransitions, deviceAsleep) ->
+ if (deviceAsleep) {
+ barTransitions.finishAnimations()
+ }
+ }
+ }
+ launch { statusBarVisible.collect { updateBubblesVisibility(it) } }
+ launch {
+ barModeUpdate.collect { (animate, barTransitions, statusBarMode) ->
+ updateBarMode(animate, barTransitions, statusBarMode)
}
}
}
- launch { statusBarVisible.collect { updateBubblesVisibility(it) } }
- launch {
- barModeUpdate.collect { (animate, barTransitions, statusBarMode) ->
- updateBarMode(animate, barTransitions, statusBarMode)
- }
- }
- }
- .invokeOnCompletion { dumpManager.unregisterDumpable(dumpableName) }
createAndAddWindow()
setupPluginDependencies()
setUpAutoHide()
@@ -272,6 +276,16 @@
)
}
+ /**
+ * Called when the [StatusBarOrchestrator] should stop doing any work and clean up if needed.
+ */
+ fun stop() {
+ StatusBarConnectedDisplays.assertInNewMode()
+ dumpManager.unregisterDumpable(dumpableName)
+ startJob?.cancel()
+ startJob = null
+ }
+
@AssistedFactory
interface Factory {
fun create(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStore.kt
index 086cc99..86c3c48 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStore.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/PrivacyDotWindowControllerStore.kt
@@ -77,6 +77,10 @@
}
override val instanceClass = PrivacyDotWindowController::class.java
+
+ override suspend fun onDisplayRemovalAction(instance: PrivacyDotWindowController) {
+ instance.stop()
+ }
}
@Module
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotWindowController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotWindowController.kt
index f7799bb..e2bcfb7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotWindowController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotWindowController.kt
@@ -59,6 +59,7 @@
@ScreenDecorationsThread private val uiExecutor: Executor,
private val dotFactory: PrivacyDotDecorProviderFactory,
) {
+ private val dotViews: MutableSet<View> = mutableSetOf()
fun start() {
uiExecutor.execute { startOnUiThread() }
@@ -72,10 +73,13 @@
val bottomLeft = providers.inflate(BOUNDS_POSITION_BOTTOM, BOUNDS_POSITION_LEFT)
val bottomRight = providers.inflate(BOUNDS_POSITION_BOTTOM, BOUNDS_POSITION_RIGHT)
- topLeft.addToWindow(TopLeft)
- topRight.addToWindow(TopRight)
- bottomLeft.addToWindow(BottomLeft)
- bottomRight.addToWindow(BottomRight)
+ listOfNotNull(
+ topLeft.addToWindow(TopLeft),
+ topRight.addToWindow(TopRight),
+ bottomLeft.addToWindow(BottomLeft),
+ bottomRight.addToWindow(BottomRight),
+ )
+ .forEach { dotViews.add(it) }
privacyDotViewController.initialize(topLeft, topRight, bottomLeft, bottomRight)
}
@@ -87,7 +91,7 @@
return inflater.inflate(/* resource= */ provider.layoutId, /* root= */ null)
}
- private fun View.addToWindow(corner: PrivacyDotCorner) {
+ private fun View.addToWindow(corner: PrivacyDotCorner): View? {
val excludeFromScreenshots = displayId == Display.DEFAULT_DISPLAY
val params =
ScreenDecorations.getWindowLayoutBaseParams(excludeFromScreenshots).apply {
@@ -110,6 +114,11 @@
e,
)
}
+ return rootView
+ }
+
+ fun stop() {
+ dotViews.forEach { viewCaptureAwareWindowManager.removeView(it) }
}
@AssistedFactory
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/layout/LetterboxBackgroundProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/layout/LetterboxBackgroundProvider.kt
index 3d8ced1..a1536e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/layout/LetterboxBackgroundProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/layout/LetterboxBackgroundProvider.kt
@@ -23,7 +23,6 @@
import android.os.RemoteException
import android.view.IWindowManager
import com.android.systemui.CoreStartable
-import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -40,7 +39,7 @@
@Background private val backgroundExecutor: Executor,
private val wallpaperManager: WallpaperManager,
@Main private val mainHandler: Handler,
-) : CoreStartable, Dumpable {
+) : CoreStartable {
@ColorInt
var letterboxBackgroundColor: Int = Color.BLACK
private set
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
index e6dd09b..e00d025 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
@@ -331,7 +331,7 @@
}
/** Constructs the date view and connects it to the smartspace service. */
- fun buildAndConnectDateView(parent: ViewGroup): View? {
+ fun buildAndConnectDateView(parent: ViewGroup, isLargeClock: Boolean): View? {
execution.assertIsMainThread()
if (!isEnabled) {
@@ -346,6 +346,7 @@
surfaceName = SmartspaceViewModel.SURFACE_DATE_VIEW,
parent = parent,
plugin = datePlugin,
+ isLargeClock = isLargeClock
)
connectSession()
@@ -353,7 +354,7 @@
}
/** Constructs the weather view and connects it to the smartspace service. */
- fun buildAndConnectWeatherView(parent: ViewGroup): View? {
+ fun buildAndConnectWeatherView(parent: ViewGroup, isLargeClock: Boolean): View? {
execution.assertIsMainThread()
if (!isEnabled) {
@@ -368,6 +369,7 @@
surfaceName = SmartspaceViewModel.SURFACE_WEATHER_VIEW,
parent = parent,
plugin = weatherPlugin,
+ isLargeClock = isLargeClock,
)
connectSession()
@@ -390,6 +392,7 @@
parent = parent,
plugin = plugin,
configPlugin = configPlugin,
+ isLargeClock = false,
)
connectSession()
@@ -401,12 +404,13 @@
parent: ViewGroup,
plugin: BcSmartspaceDataPlugin?,
configPlugin: BcSmartspaceConfigPlugin? = null,
+ isLargeClock: Boolean,
): View? {
if (plugin == null) {
return null
}
- val ssView = plugin.getView(parent)
+ val ssView = if (isLargeClock) plugin.getLargeClockView(parent) else plugin.getView(parent)
configPlugin?.let { ssView.registerConfigProvider(it) }
ssView.setBgHandler(bgHandler)
ssView.setUiSurface(BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
index f52b924..df8fb5e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
@@ -91,7 +91,7 @@
ImageSpan(it, ImageSpan.ALIGN_CENTER)
}
val decoratedSummary =
- SpannableString("x" + entry.ranking.summarization).apply {
+ SpannableString("x " + entry.ranking.summarization).apply {
setSpan(
/* what = */ imageSpan,
/* start = */ 0,
@@ -100,9 +100,9 @@
)
entry.ranking.summarization?.let {
setSpan(
- /* what = */ StyleSpan(Typeface.BOLD),
- /* start = */ 1,
- /* end = */ it.length,
+ /* what = */ StyleSpan(Typeface.ITALIC),
+ /* start = */ 2,
+ /* end = */ it.length + 2,
/* flags = */ Spanned.SPAN_EXCLUSIVE_INCLUSIVE,
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
index ccfb43e..4053d06 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
@@ -25,6 +25,7 @@
import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.wm.shell.bubbles.Bubbles;
import java.util.Optional;
@@ -99,8 +100,14 @@
row.setJustClicked(true);
DejankUtils.postAfterTraversal(() -> row.setJustClicked(false));
- if (!row.getEntry().isBubble() && mBubblesOptional.isPresent()) {
- mBubblesOptional.get().collapseStack();
+ if (NotificationBundleUi.isEnabled()) {
+ if (!row.getEntryAdapter().isBubbleCapable() && mBubblesOptional.isPresent()) {
+ mBubblesOptional.get().collapseStack();
+ }
+ } else {
+ if (!row.getEntry().isBubble() && mBubblesOptional.isPresent()) {
+ mBubblesOptional.get().collapseStack();
+ }
}
mNotificationActivityStarter.onNotificationClicked(entry, row);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
index 243a868..874a059 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
@@ -26,6 +26,7 @@
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager
import com.android.systemui.statusbar.notification.headsup.HeadsUpUtil
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
import kotlin.math.ceil
import kotlin.math.max
@@ -117,7 +118,7 @@
params.startNotificationTop = location[1]
params.notificationParentTop =
notificationListContainer
- .getViewParentForNotification(notificationEntry)
+ .getViewParentForNotification()
.locationOnScreen[1]
params.startRoundedTopClipping = roundedTopClipping
params.startClipTopAmount = notification.clipTopAmount
@@ -148,7 +149,7 @@
Log.d(TAG, reason)
}
notificationLaunchAnimationInteractor.setIsLaunchAnimationRunning(willAnimate)
- notificationEntry.isExpandAnimationRunning = willAnimate
+ notification.isLaunchAnimationRunning = willAnimate
if (!willAnimate) {
removeHun(animate = true, reason)
@@ -158,7 +159,8 @@
private val headsUpNotificationRow: ExpandableNotificationRow?
get() {
- val pipelineParent = notificationEntry.parent
+ val pipelineParent = if (NotificationBundleUi.isEnabled)
+ notification.entryAdapter?.parent else notificationEntry.parent
val summaryEntry = (pipelineParent as? GroupEntry)?.summary
return when {
headsUpManager.isHeadsUpEntry(notificationKey) -> notification
@@ -190,7 +192,7 @@
// TODO(b/184121838): Should we call InteractionJankMonitor.cancel if the animation started
// here?
notificationLaunchAnimationInteractor.setIsLaunchAnimationRunning(false)
- notificationEntry.isExpandAnimationRunning = false
+ notification.isLaunchAnimationRunning = false
removeHun(animate = true, "onLaunchAnimationCancelled()")
onFinishAnimationCallback?.run()
}
@@ -210,7 +212,7 @@
notification.isExpandAnimationRunning = false
notificationLaunchAnimationInteractor.setIsLaunchAnimationRunning(false)
- notificationEntry.isExpandAnimationRunning = false
+ notification.isLaunchAnimationRunning = false
notificationListContainer.setExpandingNotification(null)
applyParams(null)
removeHun(animate = false, "onLaunchAnimationEnd()")
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
index c79cae7..6dd44a1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
@@ -24,6 +24,7 @@
import android.app.Notification;
import android.content.Context;
import android.os.Build;
+import android.service.notification.StatusBarNotification;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -163,6 +164,48 @@
// TODO(b/396446620): implement bundle icons
return null;
}
+
+ @Override
+ public boolean isColorized() {
+ return false;
+ }
+
+ @Override
+ @Nullable
+ public StatusBarNotification getSbn() {
+ return null;
+ }
+
+ @Override
+ public boolean canDragAndDrop() {
+ return false;
+ }
+
+ @Override
+ public boolean isBubbleCapable() {
+ return false;
+ }
+
+ @Override
+ @Nullable
+ public String getStyle() {
+ return null;
+ }
+
+ @Override
+ public int getSectionBucket() {
+ return mBucket;
+ }
+
+ @Override
+ public boolean isAmbient() {
+ return false;
+ }
+
+ @Override
+ public boolean isFullScreenCapable() {
+ return false;
+ }
}
public static final List<BundleEntry> ROOT_BUNDLES = List.of(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java
index 109ebe6..307a957 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/EntryAdapter.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection;
import android.content.Context;
+import android.service.notification.StatusBarNotification;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -109,4 +110,30 @@
* Returns whether the content of this entry is sensitive
*/
StateFlow<Boolean> isSensitive();
+
+ /**
+ * Returns whether this row has a background color set by an app
+ */
+ boolean isColorized();
+
+ /**
+ * Returns the SBN that backs this row, if present
+ */
+ @Nullable
+ StatusBarNotification getSbn();
+
+ boolean canDragAndDrop();
+
+ boolean isBubbleCapable();
+
+ @Nullable String getStyle();
+
+ int getSectionBucket();
+
+ boolean isAmbient();
+
+ default boolean isFullScreenCapable() {
+ return false;
+ }
}
+
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 22de83e..9795edf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -96,6 +96,7 @@
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
import com.android.systemui.statusbar.notification.collection.notifcollection.RankingAppliedEvent;
import com.android.systemui.statusbar.notification.collection.notifcollection.RankingUpdatedEvent;
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider;
import com.android.systemui.util.Assert;
import com.android.systemui.util.NamedListenerSet;
@@ -547,6 +548,12 @@
// TODO: If a coalesced event ever gets here, it's possible to lose track of children,
// since their rankings might have been updated earlier (and thus we may no longer
// think a child is associated with this locally-dismissed entry).
+ // If the postTime remains the same, we can assume the update is from SystemServer, not
+ // the app.
+ long lastUpdateTime = entry.getSbn().getPostTime();
+ UpdateSource source = sbn.getPostTime() == lastUpdateTime
+ ? UpdateSource.SystemServer
+ : UpdateSource.App;
cancelLocalDismissal(entry);
cancelLifetimeExtension(entry);
cancelDismissInterception(entry);
@@ -556,7 +563,7 @@
mEventQueue.add(new BindEntryEvent(entry, sbn));
mLogger.logNotifUpdated(entry);
- mEventQueue.add(new EntryUpdatedEvent(entry, true /* fromSystem */));
+ mEventQueue.add(new EntryUpdatedEvent(entry, source));
}
}
@@ -1045,7 +1052,7 @@
mEventQueue.add(new BindEntryEvent(entry, sbn));
mLogger.logNotifUpdated(entry);
- mEventQueue.add(new EntryUpdatedEvent(entry, false /* fromSystem */));
+ mEventQueue.add(new EntryUpdatedEvent(entry, UpdateSource.SystemUi));
// Skip the applyRanking step and go straight to dispatching the events
dispatchEventsAndRebuildList("updateNotificationInternally");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index fb2a66c..b19ba3a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -32,7 +32,6 @@
import static com.android.systemui.statusbar.notification.collection.BundleEntry.ROOT_BUNDLES;
import static com.android.systemui.statusbar.notification.collection.GroupEntry.ROOT_ENTRY;
import static com.android.systemui.statusbar.notification.collection.NotifCollection.REASON_NOT_CANCELED;
-import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_ALERTING;
import static java.util.Objects.requireNonNull;
@@ -42,6 +41,7 @@
import android.app.Notification.MessagingStyle.Message;
import android.app.NotificationChannel;
import android.app.NotificationManager.Policy;
+import android.app.PendingIntent;
import android.app.Person;
import android.app.RemoteInput;
import android.app.RemoteInputHistoryItem;
@@ -79,7 +79,6 @@
import com.android.systemui.statusbar.notification.row.shared.NotificationContentModel;
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor;
import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
-import com.android.systemui.statusbar.notification.stack.PriorityBucket;
import com.android.systemui.util.ListenerSet;
import kotlinx.coroutines.flow.MutableStateFlow;
@@ -183,7 +182,6 @@
new ListenerSet<>();
private boolean mPulseSupressed;
- private int mBucket = BUCKET_ALERTING;
private boolean mIsMarkedForUserTriggeredMovement;
private boolean mIsHeadsUpEntry;
@@ -353,6 +351,56 @@
public IconPack getIcons() {
return NotificationEntry.this.getIcons();
}
+
+ @Override
+ public boolean isColorized() {
+ return getSbn().getNotification().isColorized();
+ }
+
+ @Override
+ @Nullable
+ public StatusBarNotification getSbn() {
+ return NotificationEntry.this.getSbn();
+ }
+
+ @Override
+ public boolean canDragAndDrop() {
+ boolean canBubble = canBubble();
+ Notification notif = getSbn().getNotification();
+ PendingIntent dragIntent = notif.contentIntent != null ? notif.contentIntent
+ : notif.fullScreenIntent;
+ if (dragIntent != null && dragIntent.isActivity() && !canBubble) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isBubbleCapable() {
+ return NotificationEntry.this.isBubble();
+ }
+
+ @Override
+ @Nullable
+ public String getStyle() {
+ return getNotificationStyle();
+ }
+
+ @Override
+ public int getSectionBucket() {
+ return mBucket;
+ }
+
+ @Override
+ public boolean isAmbient() {
+ return mRanking.isAmbient();
+ }
+
+ @Override
+ public boolean isFullScreenCapable() {
+ return getSbn().getNotification().fullScreenIntent != null;
+ }
+
}
public EntryAdapter getEntryAdapter() {
@@ -560,15 +608,6 @@
return wasBubble != isBubble();
}
- @PriorityBucket
- public int getBucket() {
- return mBucket;
- }
-
- public void setBucket(@PriorityBucket int bucket) {
- mBucket = bucket;
- }
-
public ExpandableNotificationRow getRow() {
return row;
}
@@ -589,25 +628,45 @@
/**
* Get the children that are actually attached to this notification's row.
*
- * TODO: Seems like most callers here should probably be using
- * {@link GroupMembershipManager#getChildren(PipelineEntry)}
+ * TODO: Seems like most callers here should be asking a PipelineEntry, not a NotificationEntry
*/
public @Nullable List<NotificationEntry> getAttachedNotifChildren() {
- if (row == null) {
- return null;
+ if (NotificationBundleUi.isEnabled()) {
+ if (isGroupSummary()) {
+ return ((GroupEntry) getParent()).getChildren();
+ }
+ } else {
+ if (row == null) {
+ return null;
+ }
+
+ List<ExpandableNotificationRow> rowChildren = row.getAttachedChildren();
+ if (rowChildren == null) {
+ return null;
+ }
+
+ ArrayList<NotificationEntry> children = new ArrayList<>();
+ for (ExpandableNotificationRow child : rowChildren) {
+ children.add(child.getEntry());
+ }
+
+ return children;
+ }
+ return null;
+ }
+
+ private boolean isGroupSummary() {
+ if (getParent() == null) {
+ // The entry is not attached, so it doesn't count.
+ return false;
+ }
+ PipelineEntry pipelineEntry = getParent();
+ if (!(pipelineEntry instanceof GroupEntry groupEntry)) {
+ return false;
}
- List<ExpandableNotificationRow> rowChildren = row.getAttachedChildren();
- if (rowChildren == null) {
- return null;
- }
-
- ArrayList<NotificationEntry> children = new ArrayList<>();
- for (ExpandableNotificationRow child : rowChildren) {
- children.add(child.getEntry());
- }
-
- return children;
+ // If entry is a summary, its parent is a GroupEntry with summary = entry.
+ return groupEntry.getSummary() == this;
}
public void notifyFullScreenIntentLaunched() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
index 78652cc..84de77b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
@@ -16,10 +16,13 @@
package com.android.systemui.statusbar.notification.collection;
+import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_ALERTING;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection;
+import com.android.systemui.statusbar.notification.stack.PriorityBucket;
/**
* Class to represent a notification, group, or bundle in the pipeline.
@@ -29,6 +32,7 @@
final String mKey;
final ListAttachState mAttachState = ListAttachState.create();
final ListAttachState mPreviousAttachState = ListAttachState.create();
+ protected int mBucket = BUCKET_ALERTING;
public PipelineEntry(String key) {
this.mKey = key;
@@ -86,4 +90,13 @@
final ListAttachState getPreviousAttachState() {
return mPreviousAttachState;
}
+
+ @PriorityBucket
+ public int getBucket() {
+ return mBucket;
+ }
+
+ public void setBucket(@PriorityBucket int bucket) {
+ mBucket = bucket;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt
index 788659e..3cd618f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt
@@ -20,15 +20,14 @@
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.UnseenNotificationLog
import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource
import javax.inject.Inject
private const val TAG = "KeyguardCoordinator"
class KeyguardCoordinatorLogger
@Inject
-constructor(
- @UnseenNotificationLog private val buffer: LogBuffer,
-) {
+constructor(@UnseenNotificationLog private val buffer: LogBuffer) {
fun logSeenOnLockscreen(entry: NotificationEntry) =
buffer.log(
TAG,
@@ -47,10 +46,7 @@
messagePrinter = { "${if (bool1) "Start" else "Stop"} tracking unseen notifications." },
)
- fun logAllMarkedSeenOnUnlock(
- seenCount: Int,
- remainingUnseenCount: Int,
- ) =
+ fun logAllMarkedSeenOnUnlock(seenCount: Int, remainingUnseenCount: Int) =
buffer.log(
TAG,
LogLevel.DEBUG,
@@ -68,23 +64,30 @@
buffer.log(
TAG,
LogLevel.DEBUG,
- "Notifications have been marked as seen due to shade expansion."
+ "Notifications have been marked as seen due to shade expansion.",
)
- fun logUnseenAdded(key: String) =
+ fun logUnseenAdded(key: String, postTime: Long) =
buffer.log(
TAG,
LogLevel.DEBUG,
- messageInitializer = { str1 = key },
- messagePrinter = { "Unseen notif added: $str1" },
+ messageInitializer = {
+ str1 = key
+ long1 = postTime
+ },
+ messagePrinter = { "Unseen notif added: $str1, postTime: $long1" },
)
- fun logUnseenUpdated(key: String) =
+ fun logUnseenUpdated(key: String, source: UpdateSource, postTime: Long) =
buffer.log(
TAG,
LogLevel.DEBUG,
- messageInitializer = { str1 = key },
- messagePrinter = { "Unseen notif updated: $str1" },
+ messageInitializer = {
+ str1 = key
+ str2 = source.toString()
+ long1 = postTime
+ },
+ messagePrinter = { "Unseen notif updated: $str1, source: $str2, postTime: $long1" },
)
fun logUnseenRemoved(key: String) =
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
index 660ee40..9623417 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
@@ -36,6 +36,7 @@
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource
import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager
import com.android.systemui.statusbar.notification.headsup.headsUpEvents
@@ -274,17 +275,22 @@
if (
keyguardRepository.isKeyguardShowing() || !statusBarStateController.isExpanded
) {
- logger.logUnseenAdded(entry.key)
+ logger.logUnseenAdded(entry.key, entry.sbn.postTime)
unseenNotifications.add(entry)
unseenEntryAdded.tryEmit(entry)
}
}
- override fun onEntryUpdated(entry: NotificationEntry) {
+ override fun onEntryUpdated(entry: NotificationEntry, source: UpdateSource) {
if (
keyguardRepository.isKeyguardShowing() || !statusBarStateController.isExpanded
) {
- logger.logUnseenUpdated(entry.key)
+ logger.logUnseenUpdated(entry.key, source, entry.sbn.postTime)
+ // We are not marking a notif as unseen if it's updated by the SystemServer
+ // (for example, auto-grouping), or the SystemUi, not the App.
+ if (source != UpdateSource.App) {
+ return
+ }
unseenNotifications.add(entry)
unseenEntryAdded.tryEmit(entry)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinator.kt
index 1fe32c9..e7c767f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RemoteInputCoordinator.kt
@@ -38,6 +38,7 @@
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
import com.android.systemui.statusbar.notification.collection.notifcollection.SelfTrackingLifetimeExtender
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource
import java.io.PrintWriter
import javax.inject.Inject
@@ -103,15 +104,15 @@
*/
val mCollectionListener =
object : NotifCollectionListener {
- override fun onEntryUpdated(entry: NotificationEntry, fromSystem: Boolean) {
+ override fun onEntryUpdated(entry: NotificationEntry, source: UpdateSource) {
if (DEBUG) {
Log.d(
TAG,
"mCollectionListener.onEntryUpdated(entry=${entry.key}," +
- " fromSystem=$fromSystem)",
+ " source=$source)",
)
}
- if (fromSystem) {
+ if (source != UpdateSource.SystemUi) {
if (lifetimeExtensionRefactor()) {
if (
(entry.getSbn().getNotification().flags and
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
index 9ed1632..c2f0806 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
@@ -136,9 +136,7 @@
@NonNull NotifInflater.Params params,
NotificationRowContentBinder.InflationCallback callback)
throws InflationException {
- //TODO(b/217799515): Remove the entry parameter from getViewParentForNotification(), this
- // function returns the NotificationStackScrollLayout regardless of the entry.
- ViewGroup parent = mListContainer.getViewParentForNotification(entry);
+ ViewGroup parent = mListContainer.getViewParentForNotification();
if (entry.rowExists()) {
mLogger.logUpdatingRow(entry, params);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
index 362786e..ae1efa7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
@@ -59,10 +59,9 @@
* Called whenever a notification with the same key as an existing notification is posted. By
* the time this listener is called, the entry's SBN and Ranking will already have been updated.
* This delegates to {@link #onEntryUpdated(NotificationEntry)} by default.
- * @param fromSystem If true, this update came from the NotificationManagerService.
- * If false, the notification update is an internal change within systemui.
+ * @param source The source of the update.
*/
- default void onEntryUpdated(@NonNull NotificationEntry entry, boolean fromSystem) {
+ default void onEntryUpdated(NotificationEntry entry, UpdateSource source) {
onEntryUpdated(entry);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
index 1dd6242..df22db2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifEvent.kt
@@ -20,10 +20,10 @@
import android.os.UserHandle
import android.service.notification.NotificationListenerService.RankingMap
import android.service.notification.StatusBarNotification
+import com.android.app.tracing.traceSection
import com.android.systemui.statusbar.notification.collection.NotifCollection
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.util.NamedListenerSet
-import com.android.app.tracing.traceSection
/**
* Set of classes that represent the various events that [NotifCollection] can dispatch to
@@ -31,71 +31,66 @@
*
* These events build up in a queue and are periodically emitted in chunks by the collection.
*/
-
sealed class NotifEvent(private val traceName: String) {
fun dispatchTo(listeners: NamedListenerSet<NotifCollectionListener>) {
- traceSection(traceName) {
- listeners.forEachTraced(::dispatchToListener)
- }
+ traceSection(traceName) { listeners.forEachTraced(::dispatchToListener) }
}
abstract fun dispatchToListener(listener: NotifCollectionListener)
}
-data class BindEntryEvent(
- val entry: NotificationEntry,
- val sbn: StatusBarNotification
-) : NotifEvent("onEntryBind") {
+data class BindEntryEvent(val entry: NotificationEntry, val sbn: StatusBarNotification) :
+ NotifEvent("onEntryBind") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onEntryBind(entry, sbn)
}
}
-data class InitEntryEvent(
- val entry: NotificationEntry
-) : NotifEvent("onEntryInit") {
+data class InitEntryEvent(val entry: NotificationEntry) : NotifEvent("onEntryInit") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onEntryInit(entry)
}
}
-data class EntryAddedEvent(
- val entry: NotificationEntry
-) : NotifEvent("onEntryAdded") {
+data class EntryAddedEvent(val entry: NotificationEntry) : NotifEvent("onEntryAdded") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onEntryAdded(entry)
}
}
-data class EntryUpdatedEvent(
- val entry: NotificationEntry,
- val fromSystem: Boolean
-) : NotifEvent(if (fromSystem) "onEntryUpdated" else "onEntryUpdated fromSystem=true") {
+data class EntryUpdatedEvent(val entry: NotificationEntry, val source: UpdateSource) :
+ NotifEvent(
+ if (source == UpdateSource.SystemUi) "onEntryUpdated" else "onEntryUpdated fromSystem=true"
+ ) {
override fun dispatchToListener(listener: NotifCollectionListener) {
- listener.onEntryUpdated(entry, fromSystem)
+ listener.onEntryUpdated(entry, source)
}
}
-data class EntryRemovedEvent(
- val entry: NotificationEntry,
- val reason: Int
-) : NotifEvent("onEntryRemoved ${cancellationReasonDebugString(reason)}") {
+/** Source of an entry update. */
+enum class UpdateSource {
+ /** From the app that posted the notification. */
+ App,
+ /** From the NotificationManagerService. */
+ SystemServer,
+ /** From SystemUi for rendering purpose. */
+ SystemUi,
+}
+
+data class EntryRemovedEvent(val entry: NotificationEntry, val reason: Int) :
+ NotifEvent("onEntryRemoved ${cancellationReasonDebugString(reason)}") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onEntryRemoved(entry, reason)
}
}
-data class CleanUpEntryEvent(
- val entry: NotificationEntry
-) : NotifEvent("onEntryCleanUp") {
+data class CleanUpEntryEvent(val entry: NotificationEntry) : NotifEvent("onEntryCleanUp") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onEntryCleanUp(entry)
}
}
-data class RankingUpdatedEvent(
- val rankingMap: RankingMap
-) : NotifEvent("onRankingUpdate") {
+data class RankingUpdatedEvent(val rankingMap: RankingMap) : NotifEvent("onRankingUpdate") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onRankingUpdate(rankingMap)
}
@@ -111,7 +106,7 @@
val pkgName: String,
val user: UserHandle,
val channel: NotificationChannel,
- val modificationType: Int
+ val modificationType: Int,
) : NotifEvent("onNotificationChannelModified") {
override fun dispatchToListener(listener: NotifCollectionListener) {
listener.onNotificationChannelModified(pkgName, user, channel, modificationType)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
index 25deec3..d09546f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
@@ -391,7 +391,7 @@
if (!notificationFooterBackgroundTintOptimization()) {
if (notificationShadeBlur()) {
Color backgroundColor = Color.valueOf(
- SurfaceEffectColors.surfaceEffect1(getResources()));
+ SurfaceEffectColors.surfaceEffect1(getContext()));
scHigh = ColorUtils.setAlphaComponent(backgroundColor.toArgb(), 0xFF);
// Apply alpha on background drawables.
int backgroundAlpha = (int) (backgroundColor.alpha() * 0xFF);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimator.kt
new file mode 100644
index 0000000..f9bd805
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpAnimator.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification.headsup
+
+import android.content.Context
+import com.android.systemui.res.R
+
+/**
+ * A class shared between [StackScrollAlgorithm] and [StackStateAnimator] to ensure all heads up
+ * animations use the same animation values.
+ */
+class HeadsUpAnimator(context: Context) {
+ init {
+ NotificationsHunSharedAnimationValues.assertInNewMode()
+ }
+
+ var headsUpAppearHeightBottom: Int = 0
+ var stackTopMargin: Int = 0
+
+ private var headsUpAppearStartAboveScreen = context.fetchHeadsUpAppearStartAboveScreen()
+
+ /**
+ * Returns the Y translation for a heads-up notification animation.
+ *
+ * For an appear animation, the returned Y translation should be the starting value of the
+ * animation. For a disappear animation, the returned Y translation should be the ending value
+ * of the animation.
+ */
+ fun getHeadsUpYTranslation(isHeadsUpFromBottom: Boolean): Int {
+ NotificationsHunSharedAnimationValues.assertInNewMode()
+
+ if (isHeadsUpFromBottom) {
+ // start from or end at the bottom of the screen
+ return headsUpAppearHeightBottom + headsUpAppearStartAboveScreen
+ }
+
+ // start from or end at the top of the screen
+ return -stackTopMargin - headsUpAppearStartAboveScreen
+ }
+
+ /** Should be invoked when resource values may have changed. */
+ fun updateResources(context: Context) {
+ headsUpAppearStartAboveScreen = context.fetchHeadsUpAppearStartAboveScreen()
+ }
+
+ private fun Context.fetchHeadsUpAppearStartAboveScreen(): Int {
+ return this.resources.getDimensionPixelSize(R.dimen.heads_up_appear_y_above_screen)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpManagerImpl.java
index 7c5f3b5..5157e7a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/HeadsUpManagerImpl.java
@@ -332,7 +332,9 @@
onEntryAdded(headsUpEntry, requestedPinnedStatus);
// TODO(b/328390331) move accessibility events to the view layer
entry.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
- entry.setIsHeadsUpEntry(true);
+ if (!NotificationBundleUi.isEnabled()) {
+ entry.setIsHeadsUpEntry(true);
+ }
updateNotificationInternal(entry.getKey(), requestedPinnedStatus);
entry.setInterruption();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/NotificationsHunSharedAnimationValues.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/NotificationsHunSharedAnimationValues.kt
new file mode 100644
index 0000000..ca9d498
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/headsup/NotificationsHunSharedAnimationValues.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification.headsup
+
+import com.android.systemui.Flags
+import com.android.systemui.flags.FlagToken
+import com.android.systemui.flags.RefactorFlagUtils
+
+/** Helper for reading or using the notifications hun shared animation values flag state. */
+@Suppress("NOTHING_TO_INLINE")
+object NotificationsHunSharedAnimationValues {
+ /** The aconfig flag name */
+ const val FLAG_NAME = Flags.FLAG_NOTIFICATIONS_HUN_SHARED_ANIMATION_VALUES
+
+ /** A token used for dependency declaration */
+ val token: FlagToken
+ get() = FlagToken(FLAG_NAME, isEnabled)
+
+ /** Is the refactor enabled */
+ @JvmStatic
+ inline val isEnabled
+ get() = Flags.notificationsHunSharedAnimationValues()
+
+ /**
+ * Called to ensure code is only run when the flag is enabled. This protects users from the
+ * unintended behaviors caused by accidentally running new logic, while also crashing on an eng
+ * build to ensure that the refactor author catches issues in testing.
+ */
+ @JvmStatic
+ inline fun isUnexpectedlyInLegacyMode() =
+ RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, FLAG_NAME)
+
+ /**
+ * Called to ensure code is only run when the flag is enabled. This will throw an exception if
+ * the flag is not enabled to ensure that the refactor author catches issues in testing.
+ * Caution!! Using this check incorrectly will cause crashes in nextfood builds!
+ */
+ @JvmStatic
+ inline fun assertInNewMode() = RefactorFlagUtils.assertInNewMode(isEnabled, FLAG_NAME)
+
+ /**
+ * Called to ensure code is only run when the flag is disabled. This will throw an exception if
+ * the flag is enabled to ensure that the refactor author catches issues in testing.
+ */
+ @JvmStatic
+ inline fun assertInLegacyMode() = RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
index cc4be57..ec8fbc0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
@@ -45,6 +45,7 @@
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
import com.android.systemui.statusbar.notification.shared.NotificationsLiveDataStoreRefactor;
@@ -234,7 +235,7 @@
private void registerNewPipelineListener() {
mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
@Override
- public void onEntryUpdated(@NonNull NotificationEntry entry, boolean fromSystem) {
+ public void onEntryUpdated(@NonNull NotificationEntry entry, UpdateSource source) {
mExpansionStateLogger.onEntryUpdated(entry.getKey());
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 4ed9dce..a081ad5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -129,7 +129,7 @@
private void updateColors() {
if (notificationRowTransparency()) {
- mNormalColor = SurfaceEffectColors.surfaceEffect1(getResources());
+ mNormalColor = SurfaceEffectColors.surfaceEffect1(getContext());
} else {
mNormalColor = mContext.getColor(
com.android.internal.R.color.materialColorSurfaceContainerHigh);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
index 6bfc9f0..4bd6053 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogController.kt
@@ -21,7 +21,6 @@
import android.app.NotificationChannel
import android.app.NotificationChannel.DEFAULT_CHANNEL_ID
import android.app.NotificationChannelGroup
-import android.app.NotificationManager.IMPORTANCE_NONE
import android.app.NotificationManager.Importance
import android.content.Context
import android.graphics.Color
@@ -40,7 +39,7 @@
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.res.R
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.shade.ShadeDisplayAware
+import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor
import javax.inject.Inject
private const val TAG = "ChannelDialogController"
@@ -59,9 +58,9 @@
*/
@SysUISingleton
class ChannelEditorDialogController @Inject constructor(
- @ShadeDisplayAware private val context: Context,
+ private val shadeDialogContextInteractor: ShadeDialogContextInteractor,
private val noMan: INotificationManager,
- private val dialogBuilder: ChannelEditorDialog.Builder
+ private val dialogBuilder: ChannelEditorDialog.Builder,
) {
private var prepared = false
@@ -272,7 +271,7 @@
}
private fun initDialog() {
- dialogBuilder.setContext(context)
+ dialogBuilder.setContext(shadeDialogContextInteractor.context)
dialog = dialogBuilder.build()
dialog.window?.requestFeature(Window.FEATURE_NO_TITLE)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 6134d1d..179951f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -300,6 +300,7 @@
private boolean mIsSystemChildExpanded;
private PinnedStatus mPinnedStatus = PinnedStatus.NotPinned;
private boolean mExpandAnimationRunning;
+ private boolean mLaunchAnimationRunning;
private AboveShelfChangedListener mAboveShelfChangedListener;
private HeadsUpManager mHeadsUpManager;
private Consumer<Boolean> mHeadsUpAnimatingAwayListener;
@@ -973,6 +974,7 @@
} else if (isAboveShelf() != wasAboveShelf) {
mAboveShelfChangedListener.onAboveShelfStateChanged(!wasAboveShelf);
}
+ updateBackgroundOpacity();
}
/**
@@ -1677,10 +1679,15 @@
view.setBackgroundTintColor(color);
}
if (notificationRowTransparency()
- && (mBackgroundNormal != null)
- && (mEntry != null)) {
- mBackgroundNormal.setBgIsColorized(
- mEntry.getSbn().getNotification().isColorized());
+ && (mBackgroundNormal != null)) {
+ if (NotificationBundleUi.isEnabled()) {
+ mBackgroundNormal.setBgIsColorized(mEntryAdapter.isColorized());
+ } else {
+ if (mEntry != null) {
+ mBackgroundNormal.setBgIsColorized(
+ mEntry.getSbn().getNotification().isColorized());
+ }
+ }
}
}
@@ -2204,7 +2211,7 @@
R.dimen.notification_min_height);
}
mMaxSmallHeightWithSummarization = NotificationUtils.getFontScaledHeight(mContext,
- com.android.internal.R.dimen.notification_min_height);
+ com.android.internal.R.dimen.notification_collapsed_height_with_summarization);
mMaxExpandedHeight = NotificationUtils.getFontScaledHeight(mContext,
R.dimen.notification_max_height);
mMaxExpandedHeightForPromotedOngoing = NotificationUtils.getFontScaledHeight(mContext,
@@ -2372,7 +2379,11 @@
return traceTag;
}
- return traceTag + "(" + getEntry().getNotificationStyle() + ")";
+ if (NotificationBundleUi.isEnabled()) {
+ return traceTag + "(" + getEntryAdapter().getStyle() + ")";
+ } else {
+ return traceTag + "(" + getEntry().getNotificationStyle() + ")";
+ }
}
@Override
@@ -3066,6 +3077,7 @@
mChildrenContainer.setOnKeyguard(onKeyguard);
}
}
+ updateBackgroundOpacity();
}
}
@@ -3695,8 +3707,14 @@
return true;
}
// The colorized background is another layer with which all other elements overlap
- if (getEntry().getSbn().getNotification().isColorized()) {
- return true;
+ if (NotificationBundleUi.isEnabled()) {
+ if (mEntryAdapter.isColorized()) {
+ return true;
+ }
+ } else {
+ if (getEntry().getSbn().getNotification().isColorized()) {
+ return true;
+ }
}
// Check if the showing layout has a need for overlapping rendering.
// NOTE: We could check both public and private layouts here, but becuause these states
@@ -4487,4 +4505,30 @@
}
mLogger.logRemoveTransientRow(row.getLoggingKey(), mLoggingKey);
}
+
+ /** Set whether this notification is currently used to animate a launch. */
+ public void setLaunchAnimationRunning(boolean launchAnimationRunning) {
+ if (NotificationBundleUi.isEnabled()) {
+ mLaunchAnimationRunning = launchAnimationRunning;
+ } else {
+ getEntry().setExpandAnimationRunning(launchAnimationRunning);
+ }
+ }
+
+ /** Whether this notification is currently used to animate a launch. */
+ public boolean isLaunchAnimationRunning() {
+ if (NotificationBundleUi.isEnabled()) {
+ return mLaunchAnimationRunning;
+ } else {
+ return getEntry().isExpandAnimationRunning();
+ }
+ }
+
+ private void updateBackgroundOpacity() {
+ if (mBackgroundNormal != null) {
+ // Row background should be opaque when it's displayed as a heads-up notification or
+ // displayed on keyguard.
+ mBackgroundNormal.setForceOpaque(mIsHeadsUp || mOnKeyguard);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
index 07711b6..02e8f49 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
@@ -127,7 +127,14 @@
@Override
public void onSettingChanged(Uri setting, int userId, String value) {
if (BUBBLES_SETTING_URI.equals(setting)) {
- final int viewUserId = mView.getEntry().getSbn().getUserId();
+ if (NotificationBundleUi.isEnabled()
+ && mView.getEntryAdapter().getSbn() == null) {
+ // only valid for notification rows
+ return;
+ }
+ final int viewUserId = NotificationBundleUi.isEnabled()
+ ? mView.getEntryAdapter().getSbn().getUserId()
+ : mView.getEntry().getSbn().getUserId();
if (viewUserId == UserHandle.USER_ALL || viewUserId == userId) {
mView.getPrivateLayout().setBubblesEnabledForUser(
BUBBLES_SETTING_ENABLED_VALUE.equals(value));
@@ -376,8 +383,12 @@
public void onViewAttachedToWindow(View v) {
if (NotificationBundleUi.isEnabled()) {
mView.setInitializationTime(mClock.elapsedRealtime());
+ if (mView.getEntryAdapter().getSbn() != null) {
+ mSettingsController.addCallback(BUBBLES_SETTING_URI, mSettingsListener);
+ }
} else {
mView.getEntry().setInitializationTime(mClock.elapsedRealtime());
+ mSettingsController.addCallback(BUBBLES_SETTING_URI, mSettingsListener);
}
mPluginManager.addPluginListener(mView,
NotificationMenuRowPlugin.class, false /* Allow multiple */);
@@ -385,7 +396,7 @@
mView.setOnKeyguard(mStatusBarStateController.getState() == KEYGUARD);
mStatusBarStateController.addCallback(mStatusBarStateListener);
}
- mSettingsController.addCallback(BUBBLES_SETTING_URI, mSettingsListener);
+
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
index d5551b1..9ae2eb1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
@@ -54,6 +54,7 @@
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import javax.inject.Inject;
@@ -100,7 +101,15 @@
enr = (ExpandableNotificationRow) view;
}
- StatusBarNotification sn = enr.getEntry().getSbn();
+ if (NotificationBundleUi.isEnabled()) {
+ if (!enr.getEntryAdapter().canDragAndDrop()) {
+ return;
+ }
+ }
+
+ StatusBarNotification sn = NotificationBundleUi.isEnabled()
+ ? enr.getEntryAdapter().getSbn()
+ : enr.getEntry().getSbn();
Notification notification = sn.getNotification();
final PendingIntent contentIntent = notification.contentIntent != null
? notification.contentIntent
@@ -115,8 +124,7 @@
.show();
return;
}
- Bitmap iconBitmap = getBitmapFromDrawable(
- getPkgIcon(enr.getEntry().getSbn().getPackageName()));
+ Bitmap iconBitmap = getBitmapFromDrawable(getPkgIcon(sn.getPackageName()));
final ImageView snapshot = new ImageView(mContext);
snapshot.setImageBitmap(iconBitmap);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
index 344d0f6..ba80f01 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
@@ -51,6 +51,7 @@
*/
public class HybridConversationNotificationView extends HybridNotificationView {
+ private static final int MAX_SUMMARIZATION_LINES = 2;
private ImageView mConversationIconView;
private TextView mConversationSenderName;
private ViewStub mConversationFacePileStub;
@@ -292,11 +293,14 @@
@Nullable CharSequence summarization
) {
if (AsyncHybridViewInflation.isUnexpectedlyInLegacyMode()) return;
- if (summarization != null) {
+ if (!TextUtils.isEmpty(summarization)) {
mConversationSenderName.setVisibility(GONE);
titleText = null;
contentText = summarization;
+ mTextView.setSingleLine(false);
+ mTextView.setMaxLines(MAX_SUMMARIZATION_LINES);
} else {
+ mTextView.setSingleLine(true);
if (conversationSenderName == null) {
mConversationSenderName.setVisibility(GONE);
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
index 33c36d8c..4978fa4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
@@ -53,6 +53,7 @@
public class NotificationBackgroundView extends View implements Dumpable,
ExpandableNotificationRow.DismissButtonTargetVisibilityListener {
+ private static final int MAX_ALPHA = 0xFF;
private final boolean mDontModifyCorners;
private Drawable mBackground;
private int mClipTopAmount;
@@ -74,6 +75,7 @@
private final ColorStateList mDarkColoredStatefulColors;
private final int mNormalColor;
private boolean mBgIsColorized = false;
+ private boolean mForceOpaque = false;
private final int convexR = 9;
private final int concaveR = 22;
@@ -88,7 +90,7 @@
mDarkColoredStatefulColors = getResources().getColorStateList(
R.color.notification_state_color_dark);
if (notificationRowTransparency()) {
- mNormalColor = SurfaceEffectColors.surfaceEffect1(getResources());
+ mNormalColor = SurfaceEffectColors.surfaceEffect1(getContext());
} else {
mNormalColor = mContext.getColor(
com.android.internal.R.color.materialColorSurfaceContainerHigh);
@@ -156,6 +158,14 @@
mBgIsColorized = b;
}
+ /** Sets if the background should be opaque. */
+ public void setForceOpaque(boolean forceOpaque) {
+ mForceOpaque = forceOpaque;
+ if (notificationRowTransparency()) {
+ updateBaseLayerColor();
+ }
+ }
+
private Path calculateDismissButtonCutoutPath(Rect backgroundBounds) {
// TODO(b/365585705): Adapt to RTL after the UX design is finalized.
@@ -317,11 +327,15 @@
// Instead, we set a color filter that essentially replaces every pixel of the drawable.
// For non-colorized notifications, this function specifies a new color token.
// For colorized notifications, this uses a color that matches the tint color at 90% alpha.
+ int color = isColorized()
+ ? ColorUtils.setAlphaComponent(mTintColor, (int) (MAX_ALPHA * 0.9f))
+ : SurfaceEffectColors.surfaceEffect1(getContext());
+ if (mForceOpaque) {
+ color = ColorUtils.setAlphaComponent(color, MAX_ALPHA);
+ }
getBaseBackgroundLayer().setColorFilter(
new PorterDuffColorFilter(
- isColorized()
- ? ColorUtils.setAlphaComponent(mTintColor, (int) (255 * 0.9f))
- : SurfaceEffectColors.surfaceEffect1(getResources()),
+ color,
PorterDuff.Mode.SRC)); // SRC operator discards the drawable's color+alpha
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
index 7444679..daa598b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
@@ -70,6 +70,7 @@
import com.android.systemui.statusbar.notification.row.ui.viewbinder.SingleLineViewBinder;
import com.android.systemui.statusbar.notification.row.ui.viewmodel.SingleLineViewModel;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.policy.InflatedSmartReplyState;
@@ -468,7 +469,10 @@
if (LockscreenOtpRedaction.isEnabled()
&& bindParams.redactionType == REDACTION_TYPE_SENSITIVE_CONTENT) {
result.newPublicView = createSensitiveContentMessageNotification(
- row.getEntry().getSbn().getNotification(), builder.getStyle(),
+ NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn().getNotification()
+ : row.getEntry().getSbn().getNotification(),
+ builder.getStyle(),
systemUiContext, packageContext).createContentView();
} else {
result.newPublicView = builder.makePublicContentView(bindParams.isMinimized);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 0d29981..1932037 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -64,6 +64,7 @@
import com.android.systemui.statusbar.notification.row.wrapper.NotificationCustomViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationHeaderViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.phone.ExpandHeadsUpOnInlineReply;
import com.android.systemui.statusbar.policy.InflatedSmartReplyState;
import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder;
@@ -594,12 +595,11 @@
if (mContainingNotification == null) {
return null;
}
- final NotificationEntry entry = mContainingNotification.getEntry();
- if (entry == null) {
- return null;
+ if (NotificationBundleUi.isEnabled()) {
+ return mContainingNotification.getEntryAdapter().getSbn();
+ } else {
+ return mContainingNotification.getEntry().getSbn();
}
-
- return entry.getSbn();
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java
index ab382df..e89a76f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.row;
-import static android.app.NotificationChannel.SYSTEM_RESERVED_IDS;
+import static android.app.Flags.notificationsRedesignTemplates;
import static android.view.HapticFeedbackConstants.CLOCK_TICK;
import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION;
@@ -706,8 +706,11 @@
static NotificationMenuItem createInfoItem(Context context) {
Resources res = context.getResources();
String infoDescription = res.getString(R.string.notification_menu_gear_description);
+ int layoutId = notificationsRedesignTemplates()
+ ? R.layout.notification_2025_info
+ : R.layout.notification_info;
NotificationInfo infoContent = (NotificationInfo) LayoutInflater.from(context).inflate(
- R.layout.notification_info, null, false);
+ layoutId, null, false);
return new NotificationMenuItem(context, infoDescription, infoContent,
R.drawable.ic_settings);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
index c930dd8..3586078 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowContentBinderImpl.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.row
import android.annotation.SuppressLint
+import android.app.Flags
import android.app.Notification
import android.app.Notification.EXTRA_SUMMARIZED_CONTENT
import android.app.Notification.MessagingStyle
@@ -49,10 +50,10 @@
import com.android.systemui.statusbar.notification.ConversationNotificationProcessor
import com.android.systemui.statusbar.notification.InflationException
import com.android.systemui.statusbar.notification.NmSummarizationUiFlag
-import com.android.systemui.statusbar.notification.collection.EntryAdapter
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.logKey
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationContentExtractor
+import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiForceExpanded
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel
import com.android.systemui.statusbar.notification.row.NotificationContentView.VISIBLE_TYPE_CONTRACTED
import com.android.systemui.statusbar.notification.row.NotificationContentView.VISIBLE_TYPE_EXPANDED
@@ -1521,6 +1522,10 @@
entry.promotedNotificationContentModel = result.promotedContent
}
+ if (PromotedNotificationUiForceExpanded.isEnabled) {
+ row.setPromotedOngoing(entry.isOngoingPromoted())
+ }
+
result.inflatedSmartReplyState?.let { row.privateLayout.setInflatedSmartReplyState(it) }
setContentViewsFromRemoteViews(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
index bb4aa86..4082a5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
@@ -26,6 +26,7 @@
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.NotifRemoteViewsFactory
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi
import javax.inject.Inject
/**
@@ -60,7 +61,18 @@
row: ExpandableNotificationRow,
context: Context,
): NotificationIconProvider {
- val sbn = row.entry.sbn
+ val sbn = if (NotificationBundleUi.isEnabled) row.entryAdapter?.sbn else row.entry.sbn
+ if (sbn == null) {
+ return object : NotificationIconProvider {
+ override fun shouldShowAppIcon(): Boolean {
+ return false
+ }
+
+ override fun getAppIcon(): Drawable? {
+ return null
+ }
+ }
+ }
return object : NotificationIconProvider {
override fun shouldShowAppIcon(): Boolean {
val shouldShowAppIcon = iconStyleProvider.shouldShowAppIcon(sbn, context)
@@ -68,7 +80,7 @@
return shouldShowAppIcon
}
- override fun getAppIcon(): Drawable {
+ override fun getAppIcon(): Drawable? {
val withWorkProfileBadge =
iconStyleProvider.shouldShowWorkProfileBadge(sbn, context)
return appIconProvider.getOrFetchAppIcon(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigPictureTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigPictureTemplateViewWrapper.java
index 990adf7..f492b25 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigPictureTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigPictureTemplateViewWrapper.java
@@ -30,6 +30,7 @@
import com.android.systemui.statusbar.notification.ImageTransformState;
import com.android.systemui.statusbar.notification.row.BigPictureIconManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
/**
* Wraps a notification containing a big picture template
@@ -47,7 +48,9 @@
public void onContentUpdated(ExpandableNotificationRow row) {
super.onContentUpdated(row);
resolveViews();
- updateImageTag(row.getEntry().getSbn());
+ updateImageTag(NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn()
+ : row.getEntry().getSbn());
}
private void resolveViews() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
index d58c183..dec674c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
@@ -23,6 +23,7 @@
import com.android.internal.widget.ImageFloatingTextView;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
/**
* Wraps a notification containing a big text template
@@ -44,7 +45,9 @@
public void onContentUpdated(ExpandableNotificationRow row) {
// Reinspect the notification. Before the super call, because the super call also updates
// the transformation types and we need to have our values set by then.
- resolveViews(row.getEntry().getSbn());
+ resolveViews(NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn()
+ : row.getEntry().getSbn());
super.onContentUpdated(row);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
index e9eecdd8..585051a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
@@ -52,6 +52,7 @@
import com.android.systemui.statusbar.notification.TransformState;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.shared.NotificationAddXOnHoverToDismiss;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import java.util.Stack;
@@ -222,7 +223,9 @@
@Override
public void onContentUpdated(ExpandableNotificationRow row) {
super.onContentUpdated(row);
- mIsLowPriority = row.getEntry().isAmbient();
+ mIsLowPriority = NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().isAmbient()
+ : row.getEntry().isAmbient();
mTransformLowPriorityTitle = !row.isChildInGroup() && !row.isSummaryWithChildren();
ArraySet<View> previousViews = mTransformationHelper.getAllTransformingViews();
@@ -231,7 +234,9 @@
updateTransformedTypes();
addRemainingTransformTypes();
updateCropToPaddingForImageViews();
- Notification n = row.getEntry().getSbn().getNotification();
+ Notification n = NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn().getNotification()
+ : row.getEntry().getSbn().getNotification();
mIcon.setTag(ImageTransformState.ICON_TAG, n.getSmallIcon());
// We need to reset all views that are no longer transforming in case a view was previously
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
index b9aa571..4146a94 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
@@ -54,6 +54,7 @@
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.HybridNotificationView;
import com.android.systemui.util.DimensionKt;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import java.util.function.Consumer;
@@ -310,7 +311,9 @@
public void onContentUpdated(ExpandableNotificationRow row) {
// Reinspect the notification. Before the super call, because the super call also updates
// the transformation types and we need to have our values set by then.
- resolveTemplateViews(row.getEntry().getSbn());
+ resolveTemplateViews(NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn()
+ : row.getEntry().getSbn());
super.onContentUpdated(row);
// With the modern templates, a large icon visually overlaps the header, so we can't
// hide the header, we must show it.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
index 3987ca6..64babb2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
@@ -80,7 +80,10 @@
return new NotificationProgressTemplateViewWrapper(ctx, v, row);
}
- if (row.getEntry().getSbn().getNotification().isStyle(
+ if (NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSbn().getNotification().isStyle(
+ Notification.DecoratedCustomViewStyle.class)
+ : row.getEntry().getSbn().getNotification().isStyle(
Notification.DecoratedCustomViewStyle.class)) {
return new NotificationDecoratedCustomViewWrapper(ctx, v, row);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
index 64ca815..1e24952 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
@@ -35,8 +35,10 @@
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.data.repository.HeadsUpRepository;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
@@ -60,6 +62,7 @@
private final BypassController mBypassController;
private final LargeScreenShadeInterpolator mLargeScreenShadeInterpolator;
private final AvalancheController mAvalancheController;
+ private final HeadsUpRepository mHeadsUpRepository;
/**
* Used to read bouncer states.
@@ -304,6 +307,7 @@
@NonNull BypassController bypassController,
@Nullable StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull LargeScreenShadeInterpolator largeScreenShadeInterpolator,
+ @NonNull HeadsUpRepository headsUpRepository,
AvalancheController avalancheController
) {
mSectionProvider = sectionProvider;
@@ -311,6 +315,7 @@
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mLargeScreenShadeInterpolator = largeScreenShadeInterpolator;
mAvalancheController = avalancheController;
+ mHeadsUpRepository = headsUpRepository;
reload(context);
dumpManager.registerDumpable(this);
}
@@ -690,7 +695,10 @@
}
public boolean isPulsing(NotificationEntry entry) {
- return mPulsing && entry.isHeadsUpEntry();
+ boolean isHeadsUp = NotificationBundleUi.isEnabled()
+ ? mHeadsUpRepository.isHeadsUpEntry(entry.getKey())
+ : entry.isHeadsUpEntry();
+ return mPulsing && isHeadsUp;
}
public void setPulsingRow(ExpandableNotificationRow row) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
index da98858..9bd5a5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
@@ -291,7 +291,7 @@
* currently being swiped. From the center outwards, the multipliers apply to the neighbors
* of the swiped view.
*/
- private val MAGNETIC_TRANSLATION_MULTIPLIERS = listOf(0.18f, 0.28f, 0.5f, 0.28f, 0.18f)
+ private val MAGNETIC_TRANSLATION_MULTIPLIERS = listOf(0.04f, 0.12f, 0.5f, 0.12f, 0.04f)
const val MAGNETIC_REDUCTION = 0.65f
@@ -299,7 +299,7 @@
private const val DETACH_STIFFNESS = 800f
private const val DETACH_DAMPING_RATIO = 0.95f
private const val SNAP_BACK_STIFFNESS = 550f
- private const val SNAP_BACK_DAMPING_RATIO = 0.52f
+ private const val SNAP_BACK_DAMPING_RATIO = 0.6f
// Maximum value of corner roundness that gets applied during the pre-detach dragging
private const val MAX_PRE_DETACH_ROUNDNESS = 0.8f
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index 048958e..e830d18 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -60,6 +60,7 @@
import com.android.systemui.statusbar.notification.row.shared.AsyncHybridViewInflation;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationHeaderViewWrapper;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import java.util.ArrayList;
import java.util.List;
@@ -421,7 +422,12 @@
Trace.beginSection("NotifChildCont#recreateHeader");
mHeaderClickListener = listener;
mIsConversation = isConversation;
- StatusBarNotification notification = mContainingNotification.getEntry().getSbn();
+ StatusBarNotification notification = NotificationBundleUi.isEnabled()
+ ? mContainingNotification.getEntryAdapter().getSbn()
+ : mContainingNotification.getEntry().getSbn();
+ if (notification == null) {
+ return;
+ }
final Notification.Builder builder = Notification.Builder.recoverBuilder(getContext(),
notification.getNotification());
Trace.beginSection("recreateHeader#makeNotificationGroupHeader");
@@ -565,7 +571,12 @@
void recreateLowPriorityHeader(Notification.Builder builder) {
AsyncGroupHeaderViewInflation.assertInLegacyMode();
RemoteViews header;
- StatusBarNotification notification = mContainingNotification.getEntry().getSbn();
+ StatusBarNotification notification = NotificationBundleUi.isEnabled()
+ ? mContainingNotification.getEntryAdapter().getSbn()
+ : mContainingNotification.getEntry().getSbn();
+ if (notification == null) {
+ return;
+ }
if (mIsMinimized) {
if (builder == null) {
builder = Notification.Builder.recoverBuilder(getContext(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java
index f85545e..47fc2fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java
@@ -113,10 +113,9 @@
/**
* Get the view parent for a notification entry. For example, NotificationStackScrollLayout.
*
- * @param entry entry to get the view parent for
* @return the view parent for entry
*/
- ViewGroup getViewParentForNotification(NotificationEntry entry);
+ ViewGroup getViewParentForNotification();
/**
* Resets the currently exposed menu view.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSectionsManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSectionsManager.kt
index 3d8fe01..96f0e6f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSectionsManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSectionsManager.kt
@@ -35,6 +35,7 @@
import com.android.systemui.statusbar.notification.dagger.SocialHeader
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi
import com.android.systemui.statusbar.notification.stack.PriorityBucket
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -164,7 +165,9 @@
view === socialHeaderView -> BUCKET_SOCIAL
view === recsHeaderView -> BUCKET_RECS
view === promoHeaderView -> BUCKET_PROMO
- view is ExpandableNotificationRow -> view.entry.bucket
+ view is ExpandableNotificationRow ->
+ if (NotificationBundleUi.isEnabled) view.entryAdapter?.sectionBucket
+ else view.entry.bucket
else -> null
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 6313258..4390f1b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -117,8 +117,10 @@
import com.android.systemui.statusbar.notification.emptyshade.shared.ModesEmptyShadeFix;
import com.android.systemui.statusbar.notification.emptyshade.ui.view.EmptyShadeView;
import com.android.systemui.statusbar.notification.footer.ui.view.FooterView;
+import com.android.systemui.statusbar.notification.headsup.HeadsUpAnimator;
import com.android.systemui.statusbar.notification.headsup.HeadsUpTouchHelper;
import com.android.systemui.statusbar.notification.headsup.HeadsUpUtil;
+import com.android.systemui.statusbar.notification.headsup.NotificationsHunSharedAnimationValues;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -233,6 +235,8 @@
private String mLastInitViewDumpString;
private long mLastInitViewElapsedRealtime;
+ @Nullable
+ private final HeadsUpAnimator mHeadsUpAnimator;
/**
* The algorithm which calculates the properties for our children
*/
@@ -668,8 +672,13 @@
mExpandHelper.setEventSource(this);
mExpandHelper.setScrollAdapter(mScrollAdapter);
- mStackScrollAlgorithm = createStackScrollAlgorithm(context);
- mStateAnimator = new StackStateAnimator(context, this);
+ if (NotificationsHunSharedAnimationValues.isEnabled()) {
+ mHeadsUpAnimator = new HeadsUpAnimator(context);
+ } else {
+ mHeadsUpAnimator = null;
+ }
+ mStackScrollAlgorithm = new StackScrollAlgorithm(context, this, mHeadsUpAnimator);
+ mStateAnimator = new StackStateAnimator(context, this, mHeadsUpAnimator);
setOutlineProvider(mOutlineProvider);
// We could set this whenever we 'requestChildUpdate' much like the viewTreeObserver, but
@@ -1024,12 +1033,18 @@
|| !(view instanceof ExpandableNotificationRow row)) {
continue;
}
+ int bucket = NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSectionBucket()
+ : row.getEntry().getBucket();
+ boolean isAmbient = NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().isAmbient()
+ : row.getEntry().isAmbient();
currentIndex++;
boolean beforeSpeedBump;
if (mHighPriorityBeforeSpeedBump) {
- beforeSpeedBump = row.getEntry().getBucket() < BUCKET_SILENT;
+ beforeSpeedBump = bucket < BUCKET_SILENT;
} else {
- beforeSpeedBump = !row.getEntry().isAmbient();
+ beforeSpeedBump = !isAmbient;
}
if (beforeSpeedBump) {
speedBumpIndex = currentIndex;
@@ -2134,7 +2149,7 @@
}
}
- public ViewGroup getViewParentForNotification(NotificationEntry entry) {
+ public ViewGroup getViewParentForNotification() {
return this;
}
@@ -3582,10 +3597,6 @@
mGoToFullShadeNeedsAnimation = false;
}
- protected StackScrollAlgorithm createStackScrollAlgorithm(Context context) {
- return new StackScrollAlgorithm(context, this);
- }
-
/**
* @return Whether a y coordinate is inside the content.
*/
@@ -5111,9 +5122,16 @@
public void setHeadsUpBoundaries(int height, int bottomBarHeight) {
SceneContainerFlag.assertInLegacyMode();
mAmbientState.setMaxHeadsUpTranslation(height - bottomBarHeight);
- mStackScrollAlgorithm.setHeadsUpAppearHeightBottom(height);
- mStateAnimator.setHeadsUpAppearHeightBottom(height);
- mStateAnimator.setStackTopMargin(mAmbientState.getStackTopMargin());
+
+ if (NotificationsHunSharedAnimationValues.isEnabled()) {
+ mHeadsUpAnimator.setHeadsUpAppearHeightBottom(height);
+ mHeadsUpAnimator.setStackTopMargin(mAmbientState.getStackTopMargin());
+ } else {
+ mStackScrollAlgorithm.setHeadsUpAppearHeightBottom(height);
+ mStateAnimator.setHeadsUpAppearHeightBottom(height);
+ mStateAnimator.setStackTopMargin(mAmbientState.getStackTopMargin());
+ }
+
requestChildrenUpdate();
}
@@ -6423,13 +6441,16 @@
static boolean matchesSelection(
ExpandableNotificationRow row,
@SelectedRows int selection) {
+ int bucket = NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().getSectionBucket()
+ : row.getEntry().getBucket();
switch (selection) {
case ROWS_ALL:
return true;
case ROWS_HIGH_PRIORITY:
- return row.getEntry().getBucket() < BUCKET_SILENT;
+ return bucket < BUCKET_SILENT;
case ROWS_GENTLE:
- return row.getEntry().getBucket() == BUCKET_SILENT;
+ return bucket == BUCKET_SILENT;
default:
throw new IllegalArgumentException("Unknown selection: " + selection);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
index 5c96470..124e6f5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
@@ -122,6 +122,7 @@
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationSnooze;
import com.android.systemui.statusbar.notification.shared.GroupHunAnimationFix;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -639,8 +640,10 @@
mView.onSwipeEnd();
if (animView instanceof ExpandableNotificationRow row) {
if (row.isPinned() && !canChildBeDismissed(row)
- && row.getEntry().getSbn().getNotification().fullScreenIntent
- == null) {
+ && NotificationBundleUi.isEnabled()
+ ? !row.getEntryAdapter().isFullScreenCapable()
+ : (row.getEntry().getSbn().getNotification().fullScreenIntent
+ == null)) {
mHeadsUpManager.removeNotification(
row.getKey(),
/* removeImmediately= */ true,
@@ -1908,8 +1911,8 @@
}
@Override
- public ViewGroup getViewParentForNotification(NotificationEntry entry) {
- return mView.getViewParentForNotification(entry);
+ public ViewGroup getViewParentForNotification() {
+ return mView.getViewParentForNotification();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
index 08bc8f5..4e91680 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
@@ -32,6 +32,7 @@
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiForceExpanded
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi
import com.android.systemui.statusbar.notification.shared.NotificationMinimalism
import com.android.systemui.statusbar.policy.SplitShadeStateController
import com.android.systemui.util.Compile
@@ -407,8 +408,14 @@
}
if (counter != null) {
- val entry = (currentNotification as? ExpandableNotificationRow)?.entry
- counter.incrementForBucket(entry?.bucket)
+ if (NotificationBundleUi.isEnabled) {
+ val entry = (currentNotification as? ExpandableNotificationRow)?.entry
+ counter.incrementForBucket(entry?.bucket)
+ } else {
+ val entryAdapter =
+ (currentNotification as? ExpandableNotificationRow)?.entryAdapter
+ counter.incrementForBucket(entryAdapter?.sectionBucket)
+ }
}
log {
@@ -461,12 +468,15 @@
val height = view.heightWithoutLockscreenConstraints.toFloat()
val gapAndDividerHeight =
calculateGapAndDividerHeight(stack, previousView, current = view, visibleIndex)
+ val canPeek = view is ExpandableNotificationRow &&
+ if (NotificationBundleUi.isEnabled) view.entryAdapter?.canPeek() == true
+ else view.entry.isStickyAndNotDemoted
var size =
if (onLockscreen) {
if (
view is ExpandableNotificationRow &&
- (view.entry.isStickyAndNotDemoted ||
+ (canPeek ||
(PromotedNotificationUiForceExpanded.isEnabled &&
view.isPromotedOngoing))
) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
index 88d3ad8..4effb76 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
@@ -36,9 +36,12 @@
import com.android.systemui.statusbar.notification.SourceType;
import com.android.systemui.statusbar.notification.emptyshade.ui.view.EmptyShadeView;
import com.android.systemui.statusbar.notification.footer.ui.view.FooterView;
+import com.android.systemui.statusbar.notification.headsup.HeadsUpAnimator;
+import com.android.systemui.statusbar.notification.headsup.NotificationsHunSharedAnimationValues;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.notification.shared.NotificationHeadsUpCycling;
import java.util.ArrayList;
@@ -56,6 +59,9 @@
private static final String TAG = "StackScrollAlgorithm";
private static final SourceType STACK_SCROLL_ALGO = SourceType.from("StackScrollAlgorithm");
private final ViewGroup mHostView;
+ @Nullable
+ private final HeadsUpAnimator mHeadsUpAnimator;
+
private float mPaddingBetweenElements;
private float mGapHeight;
private float mGapHeightOnLockscreen;
@@ -78,8 +84,12 @@
private int mHeadsUpAppearHeightBottom;
private int mHeadsUpCyclingPadding;
- public StackScrollAlgorithm(Context context, ViewGroup hostView) {
+ public StackScrollAlgorithm(
+ Context context,
+ ViewGroup hostView,
+ @Nullable HeadsUpAnimator headsUpAnimator) {
mHostView = hostView;
+ mHeadsUpAnimator = headsUpAnimator;
initView(context);
}
@@ -111,6 +121,9 @@
mQuickQsOffsetHeight = SystemBarUtils.getQuickQsOffsetHeight(context);
mSmallCornerRadius = res.getDimension(R.dimen.notification_corner_radius_small);
mLargeCornerRadius = res.getDimension(R.dimen.notification_corner_radius);
+ if (NotificationsHunSharedAnimationValues.isEnabled()) {
+ mHeadsUpAnimator.updateResources(context);
+ }
}
/**
@@ -250,6 +263,7 @@
}
public void setHeadsUpAppearHeightBottom(int headsUpAppearHeightBottom) {
+ NotificationsHunSharedAnimationValues.assertInLegacyMode();
mHeadsUpAppearHeightBottom = headsUpAppearHeightBottom;
}
@@ -911,7 +925,9 @@
if (SceneContainerFlag.isEnabled()) {
if (shouldHunBeVisibleWhenScrolled(row.isHeadsUp(),
childState.headsUpIsVisible, row.showingPulsing(),
- ambientState.isOnKeyguard(), row.getEntry().isStickyAndNotDemoted())) {
+ ambientState.isOnKeyguard(), NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().canPeek()
+ : row.getEntry().isStickyAndNotDemoted())) {
// the height of this child before clamping it to the top
float unmodifiedChildHeight = childState.height;
clampHunToTop(
@@ -963,7 +979,9 @@
} else {
if (shouldHunBeVisibleWhenScrolled(row.mustStayOnScreen(),
childState.headsUpIsVisible, row.showingPulsing(),
- ambientState.isOnKeyguard(), row.getEntry().isStickyAndNotDemoted())) {
+ ambientState.isOnKeyguard(), NotificationBundleUi.isEnabled()
+ ? row.getEntryAdapter().canPeek()
+ : row.getEntry().isStickyAndNotDemoted())) {
// Ensure that the heads up is always visible even when scrolled off.
// NSSL y starts at top of screen in non-split-shade, but below the qs
// offset
@@ -1037,14 +1055,22 @@
childState.setYTranslation(inSpaceTranslation + extraTranslation);
cyclingInHunHeight = -1;
} else if (!ambientState.isDozing()) {
- if (shouldHunAppearFromBottom(ambientState, childState)) {
- // move to the bottom of the screen
- childState.setYTranslation(
- mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen);
+ boolean shouldHunAppearFromBottom =
+ shouldHunAppearFromBottom(ambientState, childState);
+ if (NotificationsHunSharedAnimationValues.isEnabled()) {
+ int yTranslation =
+ mHeadsUpAnimator.getHeadsUpYTranslation(shouldHunAppearFromBottom);
+ childState.setYTranslation(yTranslation);
} else {
- // move to the top of the screen
- childState.setYTranslation(-ambientState.getStackTopMargin()
- - mHeadsUpAppearStartAboveScreen);
+ if (shouldHunAppearFromBottom) {
+ // move to the bottom of the screen
+ childState.setYTranslation(
+ mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen);
+ } else {
+ // move to the top of the screen
+ childState.setYTranslation(-ambientState.getStackTopMargin()
+ - mHeadsUpAppearStartAboveScreen);
+ }
}
} else {
// Make sure row yTranslation is at maximum the HUN yTranslation,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
index 4da418e..9a5cf9c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
@@ -27,6 +27,7 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
+import android.annotation.Nullable;
import android.content.Context;
import android.util.Property;
import android.view.View;
@@ -39,6 +40,8 @@
import com.android.systemui.shared.clocks.AnimatableClockView;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator;
+import com.android.systemui.statusbar.notification.headsup.HeadsUpAnimator;
+import com.android.systemui.statusbar.notification.headsup.NotificationsHunSharedAnimationValues;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.row.StackScrollerDecorView;
@@ -83,6 +86,9 @@
private final ExpandableViewState mTmpState = new ExpandableViewState();
private final AnimationProperties mAnimationProperties;
public NotificationStackScrollLayout mHostLayout;
+ @Nullable
+ private final HeadsUpAnimator mHeadsUpAnimator;
+
private ArrayList<NotificationStackScrollLayout.AnimationEvent> mNewEvents =
new ArrayList<>();
private ArrayList<View> mNewAddChildren = new ArrayList<>();
@@ -104,8 +110,12 @@
private NotificationShelf mShelf;
private StackStateLogger mLogger;
- public StackStateAnimator(Context context, NotificationStackScrollLayout hostLayout) {
+ public StackStateAnimator(
+ Context context,
+ NotificationStackScrollLayout hostLayout,
+ @Nullable HeadsUpAnimator headsUpAnimator) {
mHostLayout = hostLayout;
+ mHeadsUpAnimator = headsUpAnimator;
initView(context);
mAnimationProperties = new AnimationProperties() {
@@ -543,7 +553,6 @@
mHeadsUpAppearChildren.add(changingView);
mTmpState.copyFrom(changingView.getViewState());
- // translate the HUN in from the top, or the bottom of the screen
mTmpState.setYTranslation(getHeadsUpYTranslationStart(event.headsUpFromBottom));
// set the height and the initial position
mTmpState.applyToView(changingView);
@@ -728,6 +737,10 @@
}
private float getHeadsUpYTranslationStart(boolean headsUpFromBottom) {
+ if (NotificationsHunSharedAnimationValues.isEnabled()) {
+ return mHeadsUpAnimator.getHeadsUpYTranslation(headsUpFromBottom);
+ }
+
if (headsUpFromBottom) {
// start from the bottom of the screen
return mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen;
@@ -814,10 +827,12 @@
}
public void setHeadsUpAppearHeightBottom(int headsUpAppearHeightBottom) {
+ NotificationsHunSharedAnimationValues.assertInLegacyMode();
mHeadsUpAppearHeightBottom = headsUpAppearHeightBottom;
}
public void setStackTopMargin(int stackTopMargin) {
+ NotificationsHunSharedAnimationValues.assertInLegacyMode();
mStackTopMargin = stackTopMargin;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.kt
index 037dda9..323b7d8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.kt
@@ -15,10 +15,8 @@
*/
package com.android.systemui.statusbar.phone.dagger
-import android.view.Display
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Default
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.core.CommandQueueInitializer
@@ -29,7 +27,6 @@
import com.android.systemui.statusbar.core.StatusBarInitializer
import com.android.systemui.statusbar.core.StatusBarInitializerImpl
import com.android.systemui.statusbar.core.StatusBarInitializerStore
-import com.android.systemui.statusbar.core.StatusBarOrchestrator
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.data.repository.DarkIconDispatcherStore
import com.android.systemui.statusbar.data.repository.PrivacyDotViewControllerStoreModule
@@ -50,7 +47,6 @@
import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
-import kotlinx.coroutines.CoroutineScope
/** Similar in purpose to [StatusBarModule], but scoped only to phones */
@Module(
@@ -122,29 +118,6 @@
@Provides
@SysUISingleton
- @Default // Dagger does not support providing @AssistedInject types without a qualifier
- fun orchestrator(
- @Background backgroundApplicationScope: CoroutineScope,
- statusBarWindowStateRepositoryStore: StatusBarWindowStateRepositoryStore,
- statusBarModeRepositoryStore: StatusBarModeRepositoryStore,
- initializerStore: StatusBarInitializerStore,
- statusBarWindowControllerStore: StatusBarWindowControllerStore,
- autoHideControllerStore: AutoHideControllerStore,
- statusBarOrchestratorFactory: StatusBarOrchestrator.Factory,
- ): StatusBarOrchestrator {
- return statusBarOrchestratorFactory.create(
- Display.DEFAULT_DISPLAY,
- backgroundApplicationScope,
- statusBarWindowStateRepositoryStore.defaultDisplay,
- statusBarModeRepositoryStore.defaultDisplay,
- initializerStore.defaultDisplay,
- statusBarWindowControllerStore.defaultDisplay,
- autoHideControllerStore.defaultDisplay,
- )
- }
-
- @Provides
- @SysUISingleton
@IntoMap
@ClassKey(MultiDisplayStatusBarStarter::class)
fun multiDisplayStarter(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
index 949cb0a..b662892 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
@@ -72,7 +72,7 @@
private val swipeStatusBarAwayGestureHandler: SwipeStatusBarAwayGestureHandler,
private val statusBarModeRepository: StatusBarModeRepositoryStore,
@OngoingCallLog private val logger: LogBuffer,
-) : CallbackController<OngoingCallListener>, Dumpable, CoreStartable {
+) : CallbackController<OngoingCallListener>, CoreStartable {
private var isFullscreen: Boolean = false
/** Non-null if there's an active call notification. */
private var callNotificationInfo: CallNotificationInfo? = null
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
index ac301b0..3b40cde 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
@@ -19,8 +19,6 @@
import com.android.systemui.Flags.statusBarStaticInoutIndicators
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
-import com.android.systemui.flags.FeatureFlagsClassic
-import com.android.systemui.flags.Flags.NEW_NETWORK_SLICE_UI
import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.res.R
import com.android.systemui.statusbar.core.NewStatusBarIcons
@@ -79,7 +77,6 @@
iconInteractor: MobileIconInteractor,
airplaneModeInteractor: AirplaneModeInteractor,
constants: ConnectivityConstants,
- flags: FeatureFlagsClassic,
scope: CoroutineScope,
) : MobileIconViewModelCommon {
private val cellProvider by lazy {
@@ -88,7 +85,6 @@
iconInteractor,
airplaneModeInteractor,
constants,
- flags,
scope,
)
}
@@ -179,7 +175,6 @@
iconInteractor: MobileIconInteractor,
airplaneModeInteractor: AirplaneModeInteractor,
constants: ConnectivityConstants,
- flags: FeatureFlagsClassic,
scope: CoroutineScope,
) : MobileIconViewModelCommon {
override val isVisible: StateFlow<Boolean> =
@@ -286,16 +281,13 @@
.stateIn(scope, SharingStarted.WhileSubscribed(), null)
override val networkTypeBackground =
- if (!flags.isEnabled(NEW_NETWORK_SLICE_UI)) {
- flowOf(null)
- } else {
- iconInteractor.showSliceAttribution.map {
- when {
- it && NewStatusBarIcons.isEnabled ->
- Icon.Resource(R.drawable.mobile_network_type_background_updated, null)
- it -> Icon.Resource(R.drawable.mobile_network_type_background, null)
- else -> null
- }
+ iconInteractor.showSliceAttribution
+ .map {
+ when {
+ it && NewStatusBarIcons.isEnabled ->
+ Icon.Resource(R.drawable.mobile_network_type_background_updated, null)
+ it -> Icon.Resource(R.drawable.mobile_network_type_background, null)
+ else -> null
}
}
.stateIn(scope, SharingStarted.WhileSubscribed(), null)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
index 288e49e..494d95e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
@@ -21,7 +21,6 @@
import com.android.systemui.coroutines.newTracingContext
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
-import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
@@ -57,7 +56,6 @@
private val interactor: MobileIconsInteractor,
private val airplaneModeInteractor: AirplaneModeInteractor,
private val constants: ConnectivityConstants,
- private val flags: FeatureFlagsClassic,
@Background private val scope: CoroutineScope,
) {
@VisibleForTesting
@@ -131,7 +129,6 @@
interactor.getMobileConnectionInteractorForSubId(subId),
airplaneModeInteractor,
constants,
- flags,
vmScope,
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index dd742ff..9a81992 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -108,10 +108,6 @@
private boolean mShowSeconds;
private Handler mSecondsHandler;
- // Fields to cache the width so the clock remains at an approximately constant width
- private int mCharsAtCurrentWidth = -1;
- private int mCachedWidth = -1;
-
/**
* Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized.
*/
@@ -326,32 +322,6 @@
setContentDescription(mContentDescriptionFormat.format(mCalendar.getTime()));
}
- /**
- * In order to avoid the clock growing and shrinking due to proportional fonts, we want to
- * cache the drawn width at a given number of characters (removing the cache when it changes),
- * and only use the biggest value. This means that the clock width with grow to the maximum
- * size over time, but reset whenever the number of characters changes (or the configuration
- * changes)
- */
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
- int chars = getText().length();
- if (chars != mCharsAtCurrentWidth) {
- mCharsAtCurrentWidth = chars;
- mCachedWidth = getMeasuredWidth();
- return;
- }
-
- int measuredWidth = getMeasuredWidth();
- if (mCachedWidth > measuredWidth) {
- setMeasuredDimension(mCachedWidth, getMeasuredHeight());
- } else {
- mCachedWidth = measuredWidth;
- }
- }
-
@Override
public void onTuningChanged(String key, String newValue) {
if (CLOCK_SECONDS.equals(key)) {
@@ -402,9 +372,6 @@
}
private void reloadDimens() {
- // reset mCachedWidth so the new width would be updated properly when next onMeasure
- mCachedWidth = -1;
-
FontSizeUtils.updateFontSize(this, R.dimen.status_bar_clock_size);
setPaddingRelative(
mContext.getResources().getDimensionPixelSize(
diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt
index 3c53d2d..6355767 100644
--- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt
+++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt
@@ -34,7 +34,6 @@
import androidx.annotation.VisibleForTesting
import com.android.app.viewcapture.ViewCaptureAwareWindowManager
import com.android.systemui.CoreStartable
-import com.android.systemui.Dumpable
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -81,7 +80,7 @@
private val wakeLockBuilder: WakeLock.Builder,
private val systemClock: SystemClock,
internal val tempViewUiEventLogger: TemporaryViewUiEventLogger,
-) : CoreStartable, Dumpable {
+) : CoreStartable {
/**
* Window layout params that will be used as a starting point for the [windowLayoutParams] of
* all subclasses.
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt
index 86defff..bb8fe46 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt
@@ -17,7 +17,6 @@
package com.android.systemui.volume.dialog
import android.content.Context
-import android.graphics.PixelFormat
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
@@ -51,10 +50,8 @@
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
)
addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY)
-
setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY)
setWindowAnimations(-1)
- setFormat(PixelFormat.TRANSLUCENT)
attributes =
attributes.apply {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt
index b3c92f8..fee49de 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt
@@ -95,6 +95,10 @@
volumeDialogStateRepository.updateState { it.copy(isShowingCsdWarning = model) }
}
+ fun setHovering(isHovering: Boolean) {
+ volumeDialogStateRepository.updateState { it.copy(isHovering = isHovering) }
+ }
+
/** Returns a copy of [model] filled with the values from [VolumeDialogController.State]. */
private fun VolumeDialogController.State.copyIntoModel(
model: VolumeDialogStateModel
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractor.kt
index afe3d7b..bd23e8c 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractor.kt
@@ -18,6 +18,8 @@
import android.annotation.SuppressLint
import android.provider.Settings
+import android.view.accessibility.AccessibilityManager
+import com.android.systemui.accessibility.data.repository.AccessibilityRepository
import com.android.systemui.plugins.VolumeDialogController
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
import com.android.systemui.volume.Events
@@ -25,11 +27,13 @@
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope
import com.android.systemui.volume.dialog.data.VolumeDialogVisibilityRepository
import com.android.systemui.volume.dialog.domain.model.VolumeDialogEventModel
+import com.android.systemui.volume.dialog.shared.model.VolumeDialogSafetyWarningModel
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel.Dismissed
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel.Visible
import com.android.systemui.volume.dialog.utils.VolumeTracer
import javax.inject.Inject
+import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit
@@ -38,7 +42,7 @@
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.filterNotNull
+import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.mapNotNull
@@ -58,12 +62,15 @@
constructor(
@VolumeDialogPlugin coroutineScope: CoroutineScope,
callbacksInteractor: VolumeDialogCallbacksInteractor,
+ private val stateInteractor: VolumeDialogStateInteractor,
private val tracer: VolumeTracer,
private val repository: VolumeDialogVisibilityRepository,
+ private val accessibilityRepository: AccessibilityRepository,
private val controller: VolumeDialogController,
private val secureSettingsRepository: SecureSettingsRepository,
) {
+ /** @see computeTimeout */
private val defaultTimeout = 3.seconds
@SuppressLint("SharedFlowCreation")
@@ -71,20 +78,12 @@
val dialogVisibility: Flow<VolumeDialogVisibilityModel> =
repository.dialogVisibility
.onEach { controller.notifyVisible(it is Visible) }
- .stateIn(coroutineScope, SharingStarted.Eagerly, null)
- .filterNotNull()
+ .stateIn(coroutineScope, SharingStarted.Eagerly, VolumeDialogVisibilityModel.Invisible)
init {
merge(
mutableDismissDialogEvents.mapLatest {
- delay(
- secureSettingsRepository
- .getInt(
- Settings.Secure.VOLUME_DIALOG_DISMISS_TIMEOUT,
- defaultTimeout.toInt(DurationUnit.MILLISECONDS),
- )
- .milliseconds
- )
+ delay(computeTimeout())
VolumeDialogEventModel.DismissRequested(Events.DISMISS_REASON_TIMEOUT)
},
callbacksInteractor.event,
@@ -104,13 +103,7 @@
* [dialogVisibility].
*/
fun dismissDialog(reason: Int) {
- updateVisibility { visibilityModel ->
- if (visibilityModel is Dismissed) {
- visibilityModel
- } else {
- Dismissed(reason)
- }
- }
+ updateVisibility { Dismissed(reason) }
}
/** Resets current dialog timeout. */
@@ -121,7 +114,47 @@
private fun updateVisibility(
update: (VolumeDialogVisibilityModel) -> VolumeDialogVisibilityModel
) {
- repository.updateVisibility { update(it).also(tracer::traceVisibilityStart) }
+ repository.updateVisibility { currentVisibility ->
+ val newVisibility = update(currentVisibility)
+ // Don't update if the visibility is of the same type
+ if (currentVisibility::class == newVisibility::class) {
+ currentVisibility
+ } else {
+ tracer.traceVisibilityStart(newVisibility)
+ newVisibility
+ }
+ }
+ }
+
+ private suspend fun computeTimeout(): Duration {
+ val defaultDialogTimeoutMillis =
+ secureSettingsRepository
+ .getInt(
+ Settings.Secure.VOLUME_DIALOG_DISMISS_TIMEOUT,
+ defaultTimeout.toInt(DurationUnit.MILLISECONDS),
+ )
+ .milliseconds
+ val currentDialogState = stateInteractor.volumeDialogState.first()
+ return when {
+ currentDialogState.isHovering ->
+ accessibilityRepository.getRecommendedTimeout(
+ defaultDialogTimeoutMillis,
+ AccessibilityManager.FLAG_CONTENT_CONTROLS,
+ )
+
+ currentDialogState.isShowingSafetyWarning is VolumeDialogSafetyWarningModel.Visible ->
+ accessibilityRepository.getRecommendedTimeout(
+ defaultDialogTimeoutMillis,
+ AccessibilityManager.FLAG_CONTENT_TEXT or
+ AccessibilityManager.FLAG_CONTENT_CONTROLS,
+ )
+
+ else ->
+ accessibilityRepository.getRecommendedTimeout(
+ defaultDialogTimeoutMillis,
+ AccessibilityManager.FLAG_CONTENT_CONTROLS,
+ )
+ }
}
private fun VolumeDialogEventModel.toVisibilityModel(): VolumeDialogVisibilityModel? {
@@ -129,6 +162,7 @@
is VolumeDialogEventModel.DismissRequested -> Dismissed(reason)
is VolumeDialogEventModel.ShowRequested ->
Visible(reason, keyguardLocked, lockTaskModeState)
+
else -> null
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
index 14eede6..3677d3b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
@@ -17,6 +17,7 @@
package com.android.systemui.volume.dialog.ringer.ui.binder
import android.animation.ArgbEvaluator
+import android.content.res.Configuration
import android.graphics.drawable.GradientDrawable
import android.view.LayoutInflater
import android.view.View
@@ -127,6 +128,16 @@
when (ringerState) {
is RingerViewModelState.Available -> {
val uiModel = ringerState.uiModel
+ val orientation =
+ if (
+ view.context.resources.getBoolean(
+ R.bool.volume_dialog_ringer_drawer_should_open_to_the_side
+ )
+ ) {
+ ringerState.orientation
+ } else {
+ Configuration.ORIENTATION_PORTRAIT
+ }
// Set up view background and visibility
drawerContainer.visibility = View.VISIBLE
@@ -144,7 +155,7 @@
drawerContainer.closeDrawer(
ringerBackgroundView,
uiModel.currentButtonIndex,
- ringerState.orientation,
+ orientation,
)
}
is RingerDrawerState.Closed -> {
@@ -186,7 +197,7 @@
drawerContainer.closeDrawer(
ringerBackgroundView,
uiModel.currentButtonIndex,
- ringerState.orientation,
+ orientation,
)
}
}
@@ -206,11 +217,7 @@
} else {
ringerDrawerTransitionListener.setProgressChangeEnabled(true)
}
- updateOpenState(
- drawerContainer,
- ringerState.orientation,
- ringerBackgroundView,
- )
+ updateOpenState(drawerContainer, orientation, ringerBackgroundView)
drawerContainer
.getTransition(R.id.close_to_open_transition)
.setInterpolatorInfo(
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/model/VolumeDialogStateModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/model/VolumeDialogStateModel.kt
index 89456fe..e5c3e5c 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/model/VolumeDialogStateModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/model/VolumeDialogStateModel.kt
@@ -24,6 +24,7 @@
val isShowingSafetyWarning: VolumeDialogSafetyWarningModel =
VolumeDialogSafetyWarningModel.Invisible,
val isShowingCsdWarning: VolumeDialogCsdWarningModel = VolumeDialogCsdWarningModel.Invisible,
+ val isHovering: Boolean = false,
val streamModels: Map<Int, VolumeDialogStreamModel> = mapOf(),
val ringerModeInternal: Int = 0,
val ringerModeExternal: Int = 0,
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
index a0e3fbd..43d1ef4 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
@@ -29,18 +29,13 @@
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SliderDefaults
-import androidx.compose.material3.SliderState
-import androidx.compose.material3.VerticalSlider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.pointerInput
@@ -49,16 +44,17 @@
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.theme.PlatformTheme
import com.android.compose.ui.graphics.painter.DrawablePainter
+import com.android.systemui.haptics.slider.SliderHapticFeedbackFilter
import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel
-import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderScope
import com.android.systemui.volume.dialog.sliders.ui.compose.VolumeDialogSliderTrack
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogOverscrollViewModel
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSliderViewModel
-import com.android.systemui.volume.haptics.ui.VolumeHapticsConfigsProvider
+import com.android.systemui.volume.ui.slider.AccessibilityParams
+import com.android.systemui.volume.ui.slider.Haptics
+import com.android.systemui.volume.ui.slider.Slider
import javax.inject.Inject
-import kotlin.math.round
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive
@@ -90,7 +86,7 @@
}
}
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun VolumeDialogSlider(
viewModel: VolumeDialogSliderViewModel,
@@ -108,59 +104,8 @@
)
val collectedSliderStateModel by viewModel.state.collectAsStateWithLifecycle(null)
val sliderStateModel = collectedSliderStateModel ?: return
-
- val steps = with(sliderStateModel.valueRange) { endInclusive - start - 1 }.toInt()
-
val interactionSource = remember { MutableInteractionSource() }
- val hapticsViewModel: SliderHapticsViewModel? =
- hapticsViewModelFactory?.let {
- rememberViewModel(traceName = "SliderHapticsViewModel") {
- it.create(
- interactionSource,
- sliderStateModel.valueRange,
- Orientation.Vertical,
- VolumeHapticsConfigsProvider.sliderHapticFeedbackConfig(
- sliderStateModel.valueRange
- ),
- VolumeHapticsConfigsProvider.seekableSliderTrackerConfig,
- )
- }
- }
- val sliderState =
- remember(steps, sliderStateModel.valueRange) {
- SliderState(
- value = sliderStateModel.value,
- valueRange = sliderStateModel.valueRange,
- steps = steps,
- )
- .also { sliderState ->
- sliderState.onValueChangeFinished = {
- viewModel.onSliderChangeFinished(sliderState.value)
- hapticsViewModel?.onValueChangeEnded()
- }
- sliderState.onValueChange = { newValue ->
- sliderState.value = newValue
- hapticsViewModel?.addVelocityDataPoint(newValue)
- overscrollViewModel.setSlider(
- value = sliderState.value,
- min = sliderState.valueRange.start,
- max = sliderState.valueRange.endInclusive,
- )
- viewModel.setStreamVolume(newValue, true)
- }
- }
- }
-
- var lastDiscreteStep by remember { mutableFloatStateOf(round(sliderStateModel.value)) }
- LaunchedEffect(sliderStateModel.value) {
- val value = sliderStateModel.value
- sliderState.value = value
- if (value != lastDiscreteStep) {
- lastDiscreteStep = value
- hapticsViewModel?.onValueChange(value)
- }
- }
LaunchedEffect(interactionSource) {
interactionSource.interactions.collect {
when (it) {
@@ -171,24 +116,33 @@
}
}
- VerticalSlider(
- state = sliderState,
- enabled = !sliderStateModel.isDisabled,
- reverseDirection = true,
+ Slider(
+ value = sliderStateModel.value,
+ valueRange = sliderStateModel.valueRange,
+ onValueChanged = { value ->
+ overscrollViewModel.setSlider(
+ value = value,
+ min = sliderStateModel.valueRange.start,
+ max = sliderStateModel.valueRange.endInclusive,
+ )
+ viewModel.setStreamVolume(value, true)
+ },
+ onValueChangeFinished = { viewModel.onSliderChangeFinished(it) },
+ isEnabled = !sliderStateModel.isDisabled,
+ isReverseDirection = true,
+ isVertical = true,
colors = colors,
interactionSource = interactionSource,
- modifier =
- modifier.pointerInput(Unit) {
- coroutineScope {
- val currentContext = currentCoroutineContext()
- awaitPointerEventScope {
- while (currentContext.isActive) {
- viewModel.onTouchEvent(awaitPointerEvent())
- }
- }
- }
- },
- track = {
+ haptics =
+ hapticsViewModelFactory?.let {
+ Haptics.Enabled(
+ hapticsViewModelFactory = it,
+ hapticFilter = SliderHapticFeedbackFilter(),
+ orientation = Orientation.Vertical,
+ )
+ } ?: Haptics.Disabled,
+ stepDistance = 1f,
+ track = { sliderState ->
VolumeDialogSliderTrack(
sliderState,
colors = colors,
@@ -201,6 +155,18 @@
},
)
},
+ accessibilityParams = AccessibilityParams(label = sliderStateModel.label),
+ modifier =
+ modifier.pointerInput(Unit) {
+ coroutineScope {
+ val currentContext = currentCoroutineContext()
+ awaitPointerEventScope {
+ while (currentContext.isActive) {
+ viewModel.onTouchEvent(awaitPointerEvent())
+ }
+ }
+ }
+ },
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderStateModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderStateModel.kt
index b01046b..88a061f 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderStateModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderStateModel.kt
@@ -16,17 +16,21 @@
package com.android.systemui.volume.dialog.sliders.ui.viewmodel
+import android.content.Context
import android.graphics.drawable.Drawable
import com.android.systemui.volume.dialog.shared.model.VolumeDialogStreamModel
+import com.android.systemui.volume.dialog.shared.model.streamLabel
data class VolumeDialogSliderStateModel(
val value: Float,
val isDisabled: Boolean,
val valueRange: ClosedFloatingPointRange<Float>,
val icon: Drawable,
+ val label: String,
)
fun VolumeDialogStreamModel.toStateModel(
+ context: Context,
isDisabled: Boolean,
icon: Drawable,
): VolumeDialogSliderStateModel {
@@ -35,5 +39,6 @@
isDisabled = isDisabled,
valueRange = levelMin.toFloat()..levelMax.toFloat(),
icon = icon,
+ label = streamLabel(context),
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
index 19b2880..1f11f2d 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
@@ -16,6 +16,7 @@
package com.android.systemui.volume.dialog.sliders.ui.viewmodel
+import android.content.Context
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.PointerEventType
@@ -63,6 +64,7 @@
class VolumeDialogSliderViewModel
@Inject
constructor(
+ private val context: Context,
private val sliderType: VolumeDialogSliderType,
private val interactor: VolumeDialogSliderInteractor,
private val visibilityInteractor: VolumeDialogVisibilityInteractor,
@@ -114,7 +116,7 @@
}
},
) { isDisabledByZenMode, model, icon ->
- model.toStateModel(icon = icon, isDisabled = isDisabledByZenMode)
+ model.toStateModel(context = context, icon = icon, isDisabled = isDisabledByZenMode)
}
.stateIn(coroutineScope, SharingStarted.Eagerly, null)
.filterNotNull()
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
index feb4769..5de8fe5 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
@@ -18,10 +18,12 @@
import android.app.Dialog
import android.content.Context
+import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.view.WindowInsets
+import android.view.accessibility.AccessibilityEvent
import androidx.compose.ui.util.lerp
import androidx.core.view.updatePadding
import androidx.dynamicanimation.animation.DynamicAnimation
@@ -47,6 +49,7 @@
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.scan
@@ -81,9 +84,18 @@
// Root view of the Volume Dialog.
val root: ViewGroup = dialog.requireViewById(R.id.volume_dialog)
+ root.accessibilityDelegate = Accessibility(viewModel)
+ root.setOnHoverListener { _, event ->
+ viewModel.onHover(
+ event.actionMasked == MotionEvent.ACTION_HOVER_ENTER ||
+ event.actionMasked == MotionEvent.ACTION_HOVER_MOVE
+ )
+ true
+ }
animateVisibility(root, dialog, viewModel.dialogVisibilityModel)
viewModel.dialogTitle
+ .filter { it.isNotEmpty() }
.onEach { dialog.window?.setTitle(it) }
.launchInTraced("VDVB#dialogTitle", this)
viewModel.isHalfOpened
@@ -150,6 +162,7 @@
jankListenerFactory.show(view).also(animation::addUpdateListener)
animation.suspendAnimate(FRACTION_SHOW)
}
+
is VolumeDialogVisibilityModel.Dismissed -> {
tracer.traceVisibilityEnd(it)
junkListener?.let(animation::removeUpdateListener)
@@ -158,6 +171,7 @@
animation.suspendAnimate(FRACTION_HIDE)
dialog.dismiss()
}
+
is VolumeDialogVisibilityModel.Invisible -> {
// do nothing
}
@@ -200,4 +214,29 @@
}
animate().setDuration(150).translationY(offsetPx).suspendAnimate()
}
+
+ private class Accessibility(private val viewModel: VolumeDialogViewModel) :
+ View.AccessibilityDelegate() {
+
+ override fun dispatchPopulateAccessibilityEvent(
+ host: View,
+ event: AccessibilityEvent,
+ ): Boolean {
+ // Activities populate their title here. Follow that example.
+ val title = viewModel.dialogTitle.value
+ if (title.isNotEmpty()) {
+ event.text.add(title)
+ }
+ return true
+ }
+
+ override fun onRequestSendAccessibilityEvent(
+ host: ViewGroup,
+ child: View,
+ event: AccessibilityEvent,
+ ): Boolean {
+ viewModel.resetDialogTimeout()
+ return super.onRequestSendAccessibilityEvent(host, child, event)
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModel.kt
index 8bfbc36..2d8674b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModel.kt
@@ -27,6 +27,7 @@
import com.android.systemui.statusbar.policy.DevicePostureController
import com.android.systemui.statusbar.policy.devicePosture
import com.android.systemui.statusbar.policy.onConfigChanged
+import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogStateInteractor
import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibilityInteractor
@@ -36,11 +37,14 @@
import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialogSlidersInteractor
import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType
import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
+import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.suspendCancellableCoroutine
/** Provides a state for the Volume Dialog. */
@@ -49,9 +53,10 @@
@Inject
constructor(
private val context: Context,
- dialogVisibilityInteractor: VolumeDialogVisibilityInteractor,
+ @VolumeDialog coroutineScope: CoroutineScope,
+ private val dialogVisibilityInteractor: VolumeDialogVisibilityInteractor,
volumeDialogSlidersInteractor: VolumeDialogSlidersInteractor,
- volumeDialogStateInteractor: VolumeDialogStateInteractor,
+ private val volumeDialogStateInteractor: VolumeDialogStateInteractor,
devicePostureController: DevicePostureController,
configurationController: ConfigurationController,
) {
@@ -67,16 +72,16 @@
}
val dialogVisibilityModel: Flow<VolumeDialogVisibilityModel> =
dialogVisibilityInteractor.dialogVisibility
- val dialogTitle: Flow<String> =
+ val dialogTitle: StateFlow<String> =
combine(
volumeDialogStateInteractor.volumeDialogState,
volumeDialogSlidersInteractor.sliders.map { it.slider },
) { state: VolumeDialogStateModel, sliderType: VolumeDialogSliderType ->
state.streamModels[sliderType.audioStream]?.let { model ->
context.getString(R.string.volume_dialog_title, model.streamLabel(context))
- }
+ } ?: ""
}
- .filterNotNull()
+ .stateIn(coroutineScope, SharingStarted.Eagerly, "")
private val touchableBoundsViews: MutableCollection<View> = mutableSetOf()
@@ -101,4 +106,13 @@
touchableBoundsViews.addAll(views)
it.invokeOnCancellation { touchableBoundsViews.removeAll(views.toSet()) }
}
+
+ fun onHover(isHovering: Boolean) {
+ volumeDialogStateInteractor.setHovering(isHovering)
+ resetDialogTimeout()
+ }
+
+ fun resetDialogTimeout() {
+ dialogVisibilityInteractor.resetDismissTimeout()
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioSharingStreamSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioSharingStreamSliderViewModel.kt
index 3efb2b4..3d98eba 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioSharingStreamSliderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioSharingStreamSliderViewModel.kt
@@ -116,8 +116,8 @@
override val isEnabled: Boolean
get() = true
- override val a11yStep: Int
- get() = 1
+ override val a11yStep: Float
+ get() = 1f
override val disabledMessage: String?
get() = null
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioStreamSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioStreamSliderViewModel.kt
index f9d776b..9d32285 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioStreamSliderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/AudioStreamSliderViewModel.kt
@@ -165,7 +165,7 @@
label = label,
disabledMessage = disabledMessage,
isEnabled = isEnabled,
- a11yStep = volumeRange.step,
+ a11yStep = volumeRange.step.toFloat(),
a11yClickDescription =
if (isAffectedByMute) {
context.getString(
@@ -307,7 +307,7 @@
override val label: String,
override val disabledMessage: String?,
override val isEnabled: Boolean,
- override val a11yStep: Int,
+ override val a11yStep: Float,
override val a11yClickDescription: String?,
override val a11yStateDescription: String?,
override val isMutable: Boolean,
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/CastVolumeSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/CastVolumeSliderViewModel.kt
index d74a433..a6c8091 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/CastVolumeSliderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/CastVolumeSliderViewModel.kt
@@ -86,7 +86,7 @@
icon = Icon.Resource(R.drawable.ic_cast, null),
label = context.getString(R.string.media_device_cast),
isEnabled = true,
- a11yStep = 1,
+ a11yStep = 1f,
)
}
@@ -96,7 +96,7 @@
override val icon: Icon,
override val label: String,
override val isEnabled: Boolean,
- override val a11yStep: Int,
+ override val a11yStep: Float,
) : SliderState {
override val hapticFilter: SliderHapticFeedbackFilter
get() = SliderHapticFeedbackFilter()
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/SliderState.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/SliderState.kt
index f135371..4bc237b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/SliderState.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/volume/slider/ui/viewmodel/SliderState.kt
@@ -36,7 +36,7 @@
* A11y slider controls works by adjusting one step up or down. The default slider step isn't
* enough to trigger rounding to the correct value.
*/
- val a11yStep: Int
+ val a11yStep: Float
val a11yClickDescription: String?
val a11yStateDescription: String?
val disabledMessage: String?
@@ -49,7 +49,7 @@
override val icon: Icon? = null
override val label: String = ""
override val disabledMessage: String? = null
- override val a11yStep: Int = 0
+ override val a11yStep: Float = 0f
override val a11yClickDescription: String? = null
override val a11yStateDescription: String? = null
override val isEnabled: Boolean = true
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt b/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt
new file mode 100644
index 0000000..720d550
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+
+@file:OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
+
+package com.android.systemui.volume.ui.slider
+
+import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.SpringSpec
+import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
+import androidx.compose.material3.Slider
+import androidx.compose.material3.SliderColors
+import androidx.compose.material3.SliderDefaults
+import androidx.compose.material3.SliderState
+import androidx.compose.material3.VerticalSlider
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.ProgressBarRangeInfo
+import androidx.compose.ui.semantics.SemanticsPropertyReceiver
+import androidx.compose.ui.semantics.clearAndSetSemantics
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.disabled
+import androidx.compose.ui.semantics.progressBarRangeInfo
+import androidx.compose.ui.semantics.setProgress
+import androidx.compose.ui.semantics.stateDescription
+import com.android.systemui.haptics.slider.SliderHapticFeedbackFilter
+import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel
+import com.android.systemui.lifecycle.rememberViewModel
+import com.android.systemui.res.R
+import com.android.systemui.volume.haptics.ui.VolumeHapticsConfigsProvider
+import kotlin.math.round
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.launch
+
+private val defaultSpring =
+ SpringSpec<Float>(dampingRatio = Spring.DampingRatioNoBouncy, stiffness = Spring.StiffnessHigh)
+private val defaultTrack: @Composable (SliderState) -> Unit =
+ @Composable { SliderDefaults.Track(it) }
+
+@Composable
+fun Slider(
+ value: Float,
+ valueRange: ClosedFloatingPointRange<Float>,
+ onValueChanged: (Float) -> Unit,
+ onValueChangeFinished: ((Float) -> Unit)?,
+ stepDistance: Float,
+ isEnabled: Boolean,
+ accessibilityParams: AccessibilityParams,
+ modifier: Modifier = Modifier,
+ colors: SliderColors = SliderDefaults.colors(),
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
+ haptics: Haptics = Haptics.Disabled,
+ isVertical: Boolean = false,
+ isReverseDirection: Boolean = false,
+ track: (@Composable (SliderState) -> Unit)? = null,
+) {
+ require(stepDistance > 0) { "stepDistance must be positive" }
+ val coroutineScope = rememberCoroutineScope()
+ val snappedValue = snapValue(value, valueRange, stepDistance)
+ val hapticsViewModel = haptics.createViewModel(snappedValue, valueRange, interactionSource)
+
+ val animatable = remember { Animatable(snappedValue) }
+ var animationJob: Job? by remember { mutableStateOf(null) }
+ val sliderState =
+ remember(valueRange) { SliderState(value = snappedValue, valueRange = valueRange) }
+ val valueChange: (Float) -> Unit = { newValue ->
+ hapticsViewModel?.onValueChange(newValue)
+ val snappedNewValue = snapValue(newValue, valueRange, stepDistance)
+ if (animatable.targetValue != snappedNewValue) {
+ onValueChanged(snappedNewValue)
+ animationJob?.cancel()
+ animationJob =
+ coroutineScope.launch {
+ animatable.animateTo(
+ targetValue = snappedNewValue,
+ animationSpec = defaultSpring,
+ )
+ }
+ }
+ }
+ val semantics =
+ accessibilityParams.createSemantics(
+ animatable.targetValue,
+ valueRange,
+ valueChange,
+ isEnabled,
+ stepDistance,
+ )
+
+ LaunchedEffect(snappedValue) {
+ if (!animatable.isRunning && animatable.targetValue != snappedValue) {
+ animationJob?.cancel()
+ animationJob =
+ coroutineScope.launch {
+ animatable.animateTo(targetValue = snappedValue, animationSpec = defaultSpring)
+ }
+ }
+ }
+
+ sliderState.onValueChangeFinished = {
+ hapticsViewModel?.onValueChangeEnded()
+ onValueChangeFinished?.invoke(animatable.targetValue)
+ }
+ sliderState.onValueChange = valueChange
+ sliderState.value = animatable.value
+
+ if (isVertical) {
+ VerticalSlider(
+ state = sliderState,
+ enabled = isEnabled,
+ reverseDirection = isReverseDirection,
+ interactionSource = interactionSource,
+ colors = colors,
+ track = track ?: defaultTrack,
+ modifier = modifier.clearAndSetSemantics(semantics),
+ )
+ } else {
+ Slider(
+ state = sliderState,
+ enabled = isEnabled,
+ interactionSource = interactionSource,
+ colors = colors,
+ track = track ?: defaultTrack,
+ modifier = modifier.clearAndSetSemantics(semantics),
+ )
+ }
+}
+
+private fun snapValue(
+ value: Float,
+ valueRange: ClosedFloatingPointRange<Float>,
+ stepDistance: Float,
+): Float {
+ if (stepDistance == 0f) {
+ return value
+ }
+ val coercedValue = value.coerceIn(valueRange)
+ return Math.round(coercedValue / stepDistance) * stepDistance
+}
+
+@Composable
+private fun AccessibilityParams.createSemantics(
+ value: Float,
+ valueRange: ClosedFloatingPointRange<Float>,
+ onValueChanged: (Float) -> Unit,
+ isEnabled: Boolean,
+ stepDistance: Float,
+): SemanticsPropertyReceiver.() -> Unit {
+ val semanticsContentDescription =
+ disabledMessage
+ ?.takeIf { !isEnabled }
+ ?.let { message ->
+ stringResource(R.string.volume_slider_disabled_message_template, label, message)
+ } ?: label
+ return {
+ contentDescription = semanticsContentDescription
+ if (isEnabled) {
+ currentStateDescription?.let { stateDescription = it }
+ progressBarRangeInfo = ProgressBarRangeInfo(value, valueRange)
+ } else {
+ disabled()
+ }
+ setProgress { targetValue ->
+ val targetDirection =
+ when {
+ targetValue > value -> 1
+ targetValue < value -> -1
+ else -> 0
+ }
+
+ val newValue =
+ (value + targetDirection * stepDistance).coerceIn(
+ valueRange.start,
+ valueRange.endInclusive,
+ )
+ onValueChanged(newValue)
+ true
+ }
+ }
+}
+
+@Composable
+private fun Haptics.createViewModel(
+ value: Float,
+ valueRange: ClosedFloatingPointRange<Float>,
+ interactionSource: MutableInteractionSource,
+): SliderHapticsViewModel? {
+ return when (this) {
+ is Haptics.Disabled -> null
+ is Haptics.Enabled -> {
+ hapticsViewModelFactory.let {
+ rememberViewModel(traceName = "SliderHapticsViewModel") {
+ it.create(
+ interactionSource,
+ valueRange,
+ orientation,
+ VolumeHapticsConfigsProvider.sliderHapticFeedbackConfig(
+ valueRange,
+ hapticFilter,
+ ),
+ VolumeHapticsConfigsProvider.seekableSliderTrackerConfig,
+ )
+ }
+ .also { hapticsViewModel ->
+ var lastDiscreteStep by remember { mutableFloatStateOf(value) }
+ LaunchedEffect(value) {
+ snapshotFlow { value }
+ .map { round(it) }
+ .filter { it != lastDiscreteStep }
+ .distinctUntilChanged()
+ .collect { discreteStep ->
+ lastDiscreteStep = discreteStep
+ hapticsViewModel.onValueChange(discreteStep)
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+data class AccessibilityParams(
+ val label: String,
+ val currentStateDescription: String? = null,
+ val disabledMessage: String? = null,
+)
+
+sealed interface Haptics {
+ data object Disabled : Haptics
+
+ data class Enabled(
+ val hapticsViewModelFactory: SliderHapticsViewModel.Factory,
+ val hapticFilter: SliderHapticFeedbackFilter,
+ val orientation: Orientation,
+ ) : Haptics
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModel.kt b/packages/SystemUI/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModel.kt
index 4cd49d0..1e78b12 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/ui/viewmodel/WallpaperFocalAreaViewModel.kt
@@ -26,6 +26,7 @@
import javax.inject.Inject
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
class WallpaperFocalAreaViewModel
@@ -39,25 +40,31 @@
val wallpaperFocalAreaBounds =
combine(
wallpaperFocalAreaInteractor.wallpaperFocalAreaBounds,
+ keyguardTransitionInteractor.startedKeyguardTransitionStep,
+ // Emit transition state when FINISHED instead of STARTED to avoid race with
+ // wakingup command, causing layout change command not be received.
keyguardTransitionInteractor
.transition(
edge = Edge.create(to = Scenes.Lockscreen),
edgeWithoutSceneContainer = Edge.create(to = KeyguardState.LOCKSCREEN),
)
- .filter { transitionStep ->
- // Should not filter by TransitionState.STARTED, it may race with
- // wakingup command, causing layout change command not be received.
- transitionStep.transitionState == TransitionState.FINISHED
- },
- ::Pair,
+ .filter { it.transitionState == TransitionState.FINISHED },
+ ::Triple,
)
- .map { (bounds, _) -> bounds }
+ .map { (bounds, startedStep, _) ->
+ // Avoid sending wrong bounds when transitioning from LOCKSCREEN to GONE
+ if (
+ startedStep.to == KeyguardState.LOCKSCREEN &&
+ startedStep.from != KeyguardState.LOCKSCREEN
+ ) {
+ bounds
+ } else {
+ null
+ }
+ }
+ .filterNotNull()
fun setFocalAreaBounds(bounds: RectF) {
wallpaperFocalAreaInteractor.setFocalAreaBounds(bounds)
}
-
- fun setTapPosition(x: Float, y: Float) {
- wallpaperFocalAreaInteractor.setTapPosition(x, y)
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
index b23efce..8a447f7 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
@@ -70,6 +70,7 @@
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProvider;
import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
@@ -444,8 +445,8 @@
}
@Override
- public void onEntryUpdated(NotificationEntry entry, boolean fromSystem) {
- BubblesManager.this.onEntryUpdated(entry, fromSystem);
+ public void onEntryUpdated(NotificationEntry entry, UpdateSource source) {
+ BubblesManager.this.onEntryUpdated(entry, source != UpdateSource.SystemUi);
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
index b6c6347..0e68fce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
@@ -28,6 +28,7 @@
import android.graphics.Rect
import android.graphics.drawable.BitmapDrawable
import android.hardware.biometrics.BiometricFingerprintConstants
+import android.hardware.biometrics.BiometricPrompt
import android.hardware.biometrics.PromptContentItemBulletedText
import android.hardware.biometrics.PromptContentView
import android.hardware.biometrics.PromptContentViewWithMoreOptionsButton
@@ -42,6 +43,7 @@
import android.view.HapticFeedbackConstants
import android.view.MotionEvent
import android.view.Surface
+import android.view.accessibility.accessibilityManager
import androidx.test.filters.SmallTest
import com.android.app.activityTaskManager
import com.android.keyguard.AuthInteractionProperties
@@ -200,6 +202,8 @@
overrideResource(R.dimen.biometric_dialog_face_icon_size, mockFaceIconSize)
kosmos.applicationContext = context
+ whenever(kosmos.accessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt()))
+ .thenReturn(BiometricPrompt.HIDE_DIALOG_DELAY)
if (testCase.fingerprint?.isAnyUdfpsType == true) {
kosmos.authController = authController
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModelTest.kt
index e035a02..f394c80 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/viewmodel/SeekBarViewModelTest.kt
@@ -16,6 +16,9 @@
package com.android.systemui.media.controls.ui.viewmodel
+import android.icu.text.MeasureFormat
+import android.icu.util.Measure
+import android.icu.util.MeasureUnit
import android.media.MediaMetadata
import android.media.session.MediaController
import android.media.session.MediaSession
@@ -34,6 +37,7 @@
import com.android.systemui.util.concurrency.FakeRepeatableExecutor
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
+import java.util.Locale
import org.junit.After
import org.junit.Before
import org.junit.Ignore
@@ -155,6 +159,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN the duration is extracted
assertThat(viewModel.progress.value!!.duration).isEqualTo(duration)
assertThat(viewModel.progress.value!!.enabled).isTrue()
@@ -173,6 +178,7 @@
whenever(mockController.getMetadata()).thenReturn(metadata)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN the duration is extracted
assertThat(viewModel.progress.value!!.duration).isEqualTo(duration)
assertThat(viewModel.progress.value!!.enabled).isFalse()
@@ -197,6 +203,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN the seek bar is disabled
assertThat(viewModel.progress.value!!.enabled).isFalse()
}
@@ -220,6 +227,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN the seek bar is disabled
assertThat(viewModel.progress.value!!.enabled).isFalse()
}
@@ -238,6 +246,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN the seek bar is disabled
assertThat(viewModel.progress.value!!.enabled).isFalse()
}
@@ -254,6 +263,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN elapsed time is captured
assertThat(viewModel.progress.value!!.elapsedTime).isEqualTo(200.toInt())
}
@@ -536,6 +546,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN the controller is updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN a task is queued
assertThat(fakeExecutor.numPending()).isEqualTo(1)
}
@@ -551,6 +562,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN an update task is not queued
assertThat(fakeExecutor.numPending()).isEqualTo(0)
}
@@ -572,6 +584,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN an update task is queued
assertThat(fakeExecutor.numPending()).isEqualTo(1)
}
@@ -593,6 +606,7 @@
whenever(mockController.getPlaybackState()).thenReturn(state)
// WHEN updated
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// THEN an update task is not queued
assertThat(fakeExecutor.numPending()).isEqualTo(0)
}
@@ -719,6 +733,7 @@
}
whenever(mockController.getPlaybackState()).thenReturn(state)
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
// WHEN start listening
viewModel.listening = true
// THEN an update task is queued
@@ -820,6 +835,7 @@
whenever(mockController.playbackState).thenReturn(state)
val captor = ArgumentCaptor.forClass(MediaController.Callback::class.java)
viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
verify(mockController).registerCallback(captor.capture())
assertThat(viewModel.progress.value!!.elapsedTime).isEqualTo(firstPosition.toInt())
@@ -831,8 +847,48 @@
build()
}
captor.value.onPlaybackStateChanged(secondState)
+ fakeExecutor.runNextReady()
// THEN then elapsed time should be updated
assertThat(viewModel.progress.value!!.elapsedTime).isEqualTo(secondPosition.toInt())
}
+
+ @Test
+ fun contentDescriptionUpdated() {
+ // When there is a duration and position
+ val duration = (1.5 * 60 * 60 * 1000).toLong()
+ val metadata =
+ MediaMetadata.Builder().run {
+ putLong(MediaMetadata.METADATA_KEY_DURATION, duration)
+ build()
+ }
+ whenever(mockController.getMetadata()).thenReturn(metadata)
+
+ val elapsedTime = 3000L
+ val state =
+ PlaybackState.Builder().run {
+ setState(PlaybackState.STATE_PLAYING, elapsedTime, 1f)
+ build()
+ }
+ whenever(mockController.getPlaybackState()).thenReturn(state)
+
+ viewModel.updateController(mockController)
+ fakeExecutor.runNextReady()
+
+ // Then the content description is set
+ val result = viewModel.progress.value!!
+
+ val expectedProgress =
+ MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
+ .formatMeasures(Measure(3, MeasureUnit.SECOND))
+ val expectedDuration =
+ MeasureFormat.getInstance(Locale.getDefault(), MeasureFormat.FormatWidth.WIDE)
+ .formatMeasures(
+ Measure(1, MeasureUnit.HOUR),
+ Measure(30, MeasureUnit.MINUTE),
+ Measure(0, MeasureUnit.SECOND),
+ )
+ assertThat(result.durationDescription).isEqualTo(expectedDuration)
+ assertThat(result.elapsedTimeDescription).isEqualTo(expectedProgress)
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacyTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacyTest.java
index 3d0a8f6..ebbe023 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacyTest.java
@@ -878,4 +878,18 @@
mMobileDataLayout.setVisibility(mobileDataVisible ? View.VISIBLE : View.GONE);
mConnectedWifi.setVisibility(connectedWifiVisible ? View.VISIBLE : View.GONE);
}
+
+ @Test
+ public void updateDialog_wifiIsDisabled_turnOffProgressBar() {
+ when(mInternetDetailsContentController.isWifiEnabled()).thenReturn(false);
+ mInternetDialogDelegateLegacy.mIsProgressBarVisible = true;
+
+ mInternetDialogDelegateLegacy.updateDialog(false);
+
+ mBgExecutor.runAllReady();
+ mInternetDialogDelegateLegacy.mDataInternetContent.observe(
+ mInternetDialogDelegateLegacy.mLifecycleOwner, i -> {
+ assertThat(mInternetDialogDelegateLegacy.mIsProgressBarVisible).isFalse();
+ });
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogControllerTest.kt
index c5b19ab..0b2fea5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ChannelEditorDialogControllerTest.kt
@@ -31,13 +31,13 @@
import android.view.View
import com.android.systemui.SysuiTestCase
+import com.android.systemui.shade.domain.interactor.FakeShadeDialogContextInteractor
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.runner.RunWith
import org.junit.Test
import org.mockito.Answers
-import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
import org.mockito.Mockito
@@ -66,11 +66,14 @@
@Mock
private lateinit var dialog: ChannelEditorDialog
+ private val shadeDialogContextInteractor = FakeShadeDialogContextInteractor(mContext)
+
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
`when`(dialogBuilder.build()).thenReturn(dialog)
- controller = ChannelEditorDialogController(mContext, mockNoMan, dialogBuilder)
+ controller =
+ ChannelEditorDialogController(shadeDialogContextInteractor, mockNoMan, dialogBuilder)
channel1 = NotificationChannel(TEST_CHANNEL, TEST_CHANNEL_NAME, IMPORTANCE_DEFAULT)
channel2 = NotificationChannel(TEST_CHANNEL2, TEST_CHANNEL_NAME2, IMPORTANCE_NONE)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index 955de273..2a58890 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -82,13 +82,16 @@
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.collection.EntryAdapter;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
+import com.android.systemui.statusbar.notification.data.repository.HeadsUpRepository;
import com.android.systemui.statusbar.notification.emptyshade.shared.ModesEmptyShadeFix;
import com.android.systemui.statusbar.notification.emptyshade.ui.view.EmptyShadeView;
import com.android.systemui.statusbar.notification.footer.ui.view.FooterView;
import com.android.systemui.statusbar.notification.headsup.AvalancheController;
+import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.shared.NotificationThrottleHun;
@@ -157,6 +160,7 @@
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@Mock private LargeScreenShadeInterpolator mLargeScreenShadeInterpolator;
@Mock private AvalancheController mAvalancheController;
+ @Mock private HeadsUpRepository mHeadsUpRepository;
public NotificationStackScrollLayoutTest(FlagsParameterization flags) {
super();
@@ -176,6 +180,7 @@
mBypassController,
mStatusBarKeyguardViewManager,
mLargeScreenShadeInterpolator,
+ mHeadsUpRepository,
mAvalancheController
));
@@ -728,6 +733,9 @@
NotificationEntry entry = mock(NotificationEntry.class);
when(row.getEntry()).thenReturn(entry);
when(entry.isAmbient()).thenReturn(false);
+ EntryAdapter entryAdapter = mock(EntryAdapter.class);
+ when(entryAdapter.isAmbient()).thenReturn(false);
+ when(row.getEntryAdapter()).thenReturn(entryAdapter);
mStackScroller.addContainerView(row);
// speed bump = 1
@@ -744,6 +752,9 @@
NotificationEntry entry = mock(NotificationEntry.class);
when(row.getEntry()).thenReturn(entry);
when(entry.isAmbient()).thenReturn(true);
+ EntryAdapter entryAdapter = mock(EntryAdapter.class);
+ when(entryAdapter.isAmbient()).thenReturn(true);
+ when(row.getEntryAdapter()).thenReturn(entryAdapter);
mStackScroller.addContainerView(row);
// speed bump is set to 0
@@ -760,6 +771,9 @@
NotificationEntry entry = mock(NotificationEntry.class);
when(row.getEntry()).thenReturn(entry);
when(entry.isAmbient()).thenReturn(false);
+ EntryAdapter entryAdapter = mock(EntryAdapter.class);
+ when(entryAdapter.isAmbient()).thenReturn(false);
+ when(row.getEntryAdapter()).thenReturn(entryAdapter);
mStackScroller.addContainerView(row);
// speed bump is 1
@@ -1373,6 +1387,9 @@
when(row.canViewBeCleared()).thenReturn(true);
when(row.getEntry()).thenReturn(entry);
when(entry.isClearable()).thenReturn(true);
+ EntryAdapter entryAdapter = mock(EntryAdapter.class);
+ when(entryAdapter.isClearable()).thenReturn(true);
+ when(row.getEntryAdapter()).thenReturn(entryAdapter);
return row;
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionParameterizedTest.kt
similarity index 100%
rename from packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionParameterizedTest.kt
rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionParameterizedTest.kt
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
similarity index 100%
rename from packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt
index ce99e59..cbe986b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/view/ModernStatusBarMobileViewTest.kt
@@ -26,8 +26,6 @@
import android.widget.ImageView
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FakeFeatureFlagsClassic
-import com.android.systemui.flags.Flags
import com.android.systemui.log.table.logcatTableLogBuffer
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
@@ -62,7 +60,6 @@
private lateinit var testableLooper: TestableLooper
private val testDispatcher = UnconfinedTestDispatcher()
private val testScope = TestScope(testDispatcher)
- private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) }
@Mock private lateinit var viewLogger: MobileViewLogger
@Mock private lateinit var constants: ConnectivityConstants
@@ -102,12 +99,7 @@
@Test
fun setVisibleState_icon_iconShownDotHidden() {
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
view.setVisibleState(StatusBarIconView.STATE_ICON, /* animate= */ false)
@@ -123,12 +115,7 @@
@Test
fun setVisibleState_dot_iconHiddenDotShown() {
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
view.setVisibleState(StatusBarIconView.STATE_DOT, /* animate= */ false)
ViewUtils.attachView(view)
@@ -143,12 +130,7 @@
@Test
fun setVisibleState_hidden_iconAndDotHidden() {
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
view.setVisibleState(StatusBarIconView.STATE_HIDDEN, /* animate= */ false)
ViewUtils.attachView(view)
@@ -166,12 +148,7 @@
createViewModel()
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -186,12 +163,7 @@
createViewModel()
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -205,12 +177,7 @@
airplaneModeRepository.setIsAirplaneMode(false)
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -224,12 +191,7 @@
airplaneModeRepository.setIsAirplaneMode(true)
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -241,12 +203,7 @@
@Test
fun onDarkChanged_iconHasNewColor() {
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -263,12 +220,7 @@
@Test
fun setStaticDrawableColor_iconHasNewColor() {
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -285,17 +237,11 @@
@Test
fun colorChange_layersUpdateWithContrast() {
// Allow the slice, and set it to visible. This cause us to use special color logic
- flags.set(Flags.NEW_NETWORK_SLICE_UI, true)
interactor.showSliceAttribution.value = true
createViewModel()
val view =
- ModernStatusBarMobileView.constructAndBind(
- context,
- viewLogger,
- SLOT_NAME,
- viewModel,
- )
+ ModernStatusBarMobileView.constructAndBind(context, viewLogger, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -340,7 +286,6 @@
interactor,
airplaneModeInteractor,
constants,
- flags,
testScope.backgroundScope,
)
viewModel = QsMobileIconViewModel(viewModelCommon)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
similarity index 97%
rename from packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
index 804e7d63..6ae6fe6 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
@@ -31,7 +31,6 @@
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.FakeFeatureFlagsClassic
import com.android.systemui.flags.Flags
-import com.android.systemui.flags.Flags.NEW_NETWORK_SLICE_UI
import com.android.systemui.log.table.logcatTableLogBuffer
import com.android.systemui.res.R
import com.android.systemui.statusbar.connectivity.MobileIconCarrierIdOverridesFake
@@ -94,7 +93,6 @@
private val flags =
FakeFeatureFlagsClassic().also {
- it.set(Flags.NEW_NETWORK_SLICE_UI, false)
it.set(Flags.FILTER_PROVISIONING_NETWORK_SUBSCRIPTIONS, true)
}
private val testDispatcher = UnconfinedTestDispatcher()
@@ -430,6 +428,7 @@
assertWithMessage("Level $i is expected to be 'no signal'")
.that((latest as MobileContentDescription.Cellular).levelDescriptionRes)
.isEqualTo(NO_SIGNAL)
+
else ->
assertWithMessage("Level $i is expected not to be null")
.that(latest)
@@ -454,6 +453,7 @@
assertWithMessage("Level $i is expected to be 'no signal'")
.that((latest as MobileContentDescription.Cellular).levelDescriptionRes)
.isEqualTo(NO_SIGNAL)
+
else ->
assertWithMessage("Level $i is not expected to be null")
.that(latest)
@@ -834,22 +834,8 @@
}
@Test
- fun netTypeBackground_flagOff_isNull() =
+ fun netTypeBackground_nullWhenNoPrioritizedCapabilities() =
testScope.runTest {
- flags.set(NEW_NETWORK_SLICE_UI, false)
- createAndSetViewModel()
-
- val latest by collectLastValue(underTest.networkTypeBackground)
-
- repository.hasPrioritizedNetworkCapabilities.value = true
-
- assertThat(latest).isNull()
- }
-
- @Test
- fun netTypeBackground_flagOn_nullWhenNoPrioritizedCapabilities() =
- testScope.runTest {
- flags.set(NEW_NETWORK_SLICE_UI, true)
createAndSetViewModel()
val latest by collectLastValue(underTest.networkTypeBackground)
@@ -861,9 +847,8 @@
@Test
@EnableFlags(NewStatusBarIcons.FLAG_NAME, StatusBarRootModernization.FLAG_NAME)
- fun netTypeBackground_sliceUiEnabled_notNullWhenPrioritizedCapabilities_newIcons() =
+ fun netTypeBackground_notNullWhenPrioritizedCapabilities_newIcons() =
testScope.runTest {
- flags.set(NEW_NETWORK_SLICE_UI, true)
createAndSetViewModel()
val latest by collectLastValue(underTest.networkTypeBackground)
@@ -876,9 +861,8 @@
@Test
@DisableFlags(NewStatusBarIcons.FLAG_NAME, StatusBarRootModernization.FLAG_NAME)
- fun netTypeBackground_sliceUiDisabled_notNullWhenPrioritizedCapabilities_oldIcons() =
+ fun netTypeBackground_notNullWhenPrioritizedCapabilities_oldIcons() =
testScope.runTest {
- flags.set(NEW_NETWORK_SLICE_UI, true)
createAndSetViewModel()
val latest by collectLastValue(underTest.networkTypeBackground)
@@ -1075,7 +1059,6 @@
interactor,
airplaneModeInteractor,
constants,
- flags,
testScope.backgroundScope,
)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
index 68d84ec..8281132 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -135,11 +135,14 @@
import com.android.systemui.statusbar.RankingBuilder;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
+import com.android.systemui.statusbar.notification.collection.GroupEntry;
+import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.interruption.AvalancheProvider;
@@ -150,6 +153,7 @@
import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProviderTestUtil;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
+import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -214,6 +218,9 @@
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
+import platform.test.runner.parameterized.Parameters;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -222,9 +229,6 @@
import java.util.Optional;
import java.util.concurrent.Executor;
-import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
-import platform.test.runner.parameterized.Parameters;
-
@SmallTest
@RunWith(ParameterizedAndroidJunit4.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -890,7 +894,7 @@
assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
// Send update
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
// Nothing should have changed
// Notif is suppressed after expansion
@@ -1058,7 +1062,8 @@
@Test
public void testAddNotif_notBubble() {
mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());
- mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry(), /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry(),
+ /* source= */ UpdateSource.App);
assertThat(mBubbleController.hasBubbles()).isFalse();
}
@@ -1096,7 +1101,7 @@
NotificationListenerService.Ranking ranking = new RankingBuilder(
mRow.getRanking()).setCanBubble(false).build();
mRow.setRanking(ranking);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertFalse(mBubbleController.hasBubbles());
verify(mDeleteIntent, never()).send();
@@ -1227,8 +1232,36 @@
}
@Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
public void testBubbleSummaryDismissal_suppressesSummaryAndBubbleFromShade() throws Exception {
// GIVEN a group summary with a bubble child
+ NotificationEntry groupedBubble = mNotificationTestHelper.createBubbleEntryInGroup();
+ GroupEntry groupSummary = mNotificationTestHelper.createGroupEntry(
+ 0, List.of(groupedBubble));
+ mEntryListener.onEntryAdded(groupedBubble);
+ when(mCommonNotifCollection.getEntry(groupedBubble.getKey()))
+ .thenReturn(groupedBubble);
+ assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getKey()));
+
+ // WHEN the summary is dismissed
+ mBubblesManager.handleDismissalInterception(groupSummary.getSummary());
+
+ // THEN the summary and bubbled child are suppressed from the shade
+ assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+ groupedBubble.getKey(),
+ groupedBubble.getSbn().getGroupKey()));
+ assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
+ groupedBubble.getKey(),
+ groupedBubble.getSbn().getGroupKey()));
+ assertTrue(mBubbleData.isSummarySuppressed(
+ groupSummary.getSummary().getSbn().getGroupKey()));
+ }
+
+ @Test
+ @DisableFlags(NotificationBundleUi.FLAG_NAME)
+ public void testBubbleSummaryDismissal_suppressesSummaryAndBubbleFromShade_rows()
+ throws Exception {
+ // GIVEN a group summary with a bubble child
ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
mEntryListener.onEntryAdded(groupedBubble.getEntry());
@@ -1251,8 +1284,33 @@
}
@Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
public void testAppRemovesSummary_removesAllBubbleChildren() throws Exception {
// GIVEN a group summary with a bubble child
+ NotificationEntry groupedBubble = mNotificationTestHelper.createBubbleEntryInGroup();
+ GroupEntry groupSummary = mNotificationTestHelper.createGroupEntry(
+ 0, List.of(groupedBubble));
+ mEntryListener.onEntryAdded(groupedBubble);
+ when(mCommonNotifCollection.getEntry(groupedBubble.getKey()))
+ .thenReturn(groupedBubble);
+ assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getKey()));
+
+ // GIVEN the summary is dismissed
+ mBubblesManager.handleDismissalInterception(groupSummary.getSummary());
+
+ // WHEN the summary is cancelled by the app
+ mEntryListener.onEntryRemoved(groupSummary.getSummary(), REASON_APP_CANCEL);
+
+ // THEN the summary and its children are removed from bubble data
+ assertFalse(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getKey()));
+ assertFalse(mBubbleData.isSummarySuppressed(
+ groupSummary.getSummary().getSbn().getGroupKey()));
+ }
+
+ @Test
+ @DisableFlags(NotificationBundleUi.FLAG_NAME)
+ public void testAppRemovesSummary_removesAllBubbleChildren_rows() throws Exception {
+ // GIVEN a group summary with a bubble child
ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
mEntryListener.onEntryAdded(groupedBubble.getEntry());
@@ -1274,9 +1332,52 @@
}
@Test
+ @EnableFlags(NotificationBundleUi.FLAG_NAME)
public void testSummaryDismissalMarksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
throws Exception {
// GIVEN a group summary with two (non-bubble) children and one bubble child
+ NotificationEntry groupedBubble = mNotificationTestHelper.createBubbleEntryInGroup();
+ GroupEntry groupSummary = mNotificationTestHelper.createGroupEntry(
+ 2, List.of(groupedBubble));
+ mEntryListener.onEntryAdded(groupedBubble);
+ when(mCommonNotifCollection.getEntry(groupedBubble.getKey()))
+ .thenReturn(groupedBubble);
+
+ // WHEN the summary is dismissed
+ mBubblesManager.handleDismissalInterception(groupSummary.getSummary());
+
+ // THEN only the NON-bubble children are dismissed
+ List<NotificationEntry> children = groupSummary.getChildren();
+ verify(mNotifCallback, times(1)).removeNotification(
+ eq(children.get(0)), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
+ verify(mNotifCallback, times(1)).removeNotification(
+ eq(children.get(1)), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
+ verify(mNotifCallback, never()).removeNotification(eq(groupedBubble),
+ any(), anyInt());
+
+ // THEN the bubble child still exists as a bubble and is suppressed from the shade
+ assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getKey()));
+ assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+ groupedBubble.getKey(),
+ groupedBubble.getSbn().getGroupKey()));
+ assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
+ groupedBubble.getKey(),
+ groupedBubble.getSbn().getGroupKey()));
+
+ // THEN the summary is also suppressed from the shade
+ assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+ groupSummary.getSummary().getKey(),
+ groupSummary.getSummary().getSbn().getGroupKey()));
+ assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
+ groupSummary.getSummary().getKey(),
+ groupSummary.getSummary().getSbn().getGroupKey()));
+ }
+
+ @Test
+ @DisableFlags(NotificationBundleUi.FLAG_NAME)
+ public void testSummaryDismissalMarksBubblesHiddenFromShadeAndDismissesNonBubbledChildren_row()
+ throws Exception {
+ // GIVEN a group summary with two (non-bubble) children and one bubble child
ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(2);
ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
mEntryListener.onEntryAdded(groupedBubble.getEntry());
@@ -1845,7 +1946,7 @@
@Test
public void testNonInterruptiveUpdate_doesntBubbleFromOverflow() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
// Dismiss the bubble so it's in the overflow
@@ -1873,7 +1974,7 @@
@Test
public void testNonInterruptiveUpdate_doesntTriggerInflate() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
// Update the entry to not show in shade
@@ -1896,7 +1997,7 @@
@Test
public void testNonInterruptiveUpdate_doesntOverrideOverflowFlagBubble() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
// Dismiss the bubble so it's in the overflow
@@ -1923,9 +2024,9 @@
mEntryListener.onEntryAdded(mRow);
assertThat(mBubbleController.hasBubbles()).isTrue();
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.SystemUi);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.SystemUi);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.SystemUi);
// Check that it wasn't inflated (1 because it would've been inflated via onEntryAdded)
verify(mBubbleController, times(1)).inflateAndAdd(
@@ -2443,7 +2544,7 @@
@Test
public void showBubbleOverflow_hasOverflowContents() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
BubbleStackView stackView = mBubbleController.getStackView();
@@ -2460,7 +2561,7 @@
@Test
public void showBubbleOverflow_isEmpty() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
BubbleStackView stackView = mBubbleController.getStackView();
@@ -2481,7 +2582,7 @@
@Test
public void showBubbleOverflow_ignored() {
mEntryListener.onEntryAdded(mRow);
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
BubbleStackView stackView = mBubbleController.getStackView();
@@ -2522,7 +2623,7 @@
mEntryListener.onEntryAdded(mRow);
// Mark the notification as updated
NotificationEntryHelper.modifyRanking(mRow).setTextChanged(true).build();
- mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+ mEntryListener.onEntryUpdated(mRow, /* source= */ UpdateSource.App);
verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()),
eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_UPDATED));
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
index 923b636..c369237 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
@@ -20,6 +20,8 @@
import dagger.Binds
import dagger.Module
import javax.inject.Inject
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.MutableStateFlow
@SysUISingleton
@@ -28,6 +30,16 @@
override val isEnabled: MutableStateFlow<Boolean>,
) : AccessibilityRepository {
@Inject constructor() : this(MutableStateFlow(false), MutableStateFlow(false))
+
+ private var recommendedTimeout: Duration = 0.milliseconds
+
+ fun setRecommendedTimeout(duration: Duration) {
+ recommendedTimeout = duration
+ }
+
+ override fun getRecommendedTimeout(originalTimeout: Duration, uiFlags: Int): Duration {
+ return recommendedTimeout
+ }
}
@Module
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
index 43b57de..d6b625b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.biometrics.ui.viewmodel
import android.content.applicationContext
+import android.view.accessibility.accessibilityManager
import com.android.app.activityTaskManager
import com.android.launcher3.icons.IconProvider
import com.android.systemui.biometrics.domain.interactor.biometricStatusInteractor
@@ -27,7 +28,6 @@
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.util.mockito.mock
-import org.mockito.Mockito.mock
val Kosmos.promptViewModel by Fixture {
PromptViewModel(
@@ -39,6 +39,7 @@
udfpsUtils = udfpsUtils,
iconProvider = iconProvider,
activityTaskManager = activityTaskManager,
+ accessibilityManager = accessibilityManager,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayRepository.kt
index a64fc24..d6f0e06 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/FakeDisplayRepository.kt
@@ -104,6 +104,8 @@
private val _displayChangeEvent = MutableSharedFlow<Int>(replay = 1)
override val displayChangeEvent: Flow<Int> = _displayChangeEvent
+ override val displayIdsWithSystemDecorations: StateFlow<Set<Int>> = MutableStateFlow(emptySet())
+
suspend fun emitDisplayChangeEvent(displayId: Int) = _displayChangeEvent.emit(displayId)
fun setDefaultDisplayOff(defaultDisplayOff: Boolean) {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/FakeQSTile.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/FakeQSTile.kt
index 4714969..c7ea6db 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/FakeQSTile.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/FakeQSTile.kt
@@ -22,7 +22,7 @@
class FakeQSTile(var user: Int, var available: Boolean = true) : QSTile {
private var tileSpec: String? = null
- var destroyed = false
+ private var destroyed = false
var hasDetailsViewModel: Boolean = true
private var state = QSTile.State()
val callbacks = mutableListOf<QSTile.Callback>()
@@ -64,6 +64,10 @@
user = currentUser
}
+ override fun getCurrentTileUser(): Int {
+ return user
+ }
+
override fun getMetricsCategory(): Int {
return 0
}
@@ -76,6 +80,10 @@
destroyed = true
}
+ override fun isDestroyed(): Boolean {
+ return destroyed
+ }
+
override fun getTileLabel(): CharSequence {
return ""
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/external/TileLifecycleManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/external/TileLifecycleManagerKosmos.kt
index 4978558..f038fdd 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/external/TileLifecycleManagerKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/external/TileLifecycleManagerKosmos.kt
@@ -26,7 +26,7 @@
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.time.fakeSystemClock
-val Kosmos.tileLifecycleManagerFactory: TileLifecycleManager.Factory by
+var Kosmos.tileLifecycleManagerFactory: TileLifecycleManager.Factory by
Kosmos.Fixture {
TileLifecycleManager.Factory { intent, userHandle ->
TileLifecycleManager(
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLoggerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLoggerKosmos.kt
index 7d52f5d..c153183 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLoggerKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/pipeline/shared/logging/QSPipelineLoggerKosmos.kt
@@ -17,7 +17,14 @@
package com.android.systemui.qs.pipeline.shared.logging
import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.util.mockito.mock
+import com.android.systemui.log.logcatLogBuffer
/** mock */
-var Kosmos.qsLogger: QSPipelineLogger by Kosmos.Fixture { mock<QSPipelineLogger>() }
+var Kosmos.qsLogger: QSPipelineLogger by
+ Kosmos.Fixture {
+ QSPipelineLogger(
+ logcatLogBuffer(QSPipelineLogger.TILE_LIST_TAG),
+ logcatLogBuffer(QSPipelineLogger.AUTO_ADD_TAG),
+ logcatLogBuffer(QSPipelineLogger.RESTORE_TAG),
+ )
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/base/interactor/FakeQSTileUserActionInteractor.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/base/interactor/FakeQSTileUserActionInteractor.kt
index bc1c60c..c058490 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/base/interactor/FakeQSTileUserActionInteractor.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/base/interactor/FakeQSTileUserActionInteractor.kt
@@ -33,7 +33,4 @@
override suspend fun handleInput(input: QSTileInput<T>) {
mutex.withLock { mutableInputs.add(input) }
}
-
- override var detailsViewModel: TileDetailsViewModel? =
- FakeTileDetailsViewModel("FakeQSTileUserActionInteractor")
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/di/NewQSTileFactoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/di/NewQSTileFactoryKosmos.kt
index 6787b8e..c223be4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/di/NewQSTileFactoryKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/tiles/di/NewQSTileFactoryKosmos.kt
@@ -19,6 +19,7 @@
import android.os.UserHandle
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.qs.instanceIdSequenceFake
+import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.qs.shared.model.TileCategory
import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory
@@ -56,7 +57,11 @@
override val config: QSTileConfig = config
override val isAvailable: StateFlow<Boolean> = MutableStateFlow(true)
- override fun onUserChanged(user: UserHandle) {}
+ override var currentTileUser = currentTilesInteractor.userId.value
+
+ override fun onUserChanged(user: UserHandle) {
+ currentTileUser = user.identifier
+ }
override fun forceUpdate() {}
@@ -68,7 +73,7 @@
}
}
-val Kosmos.newQSTileFactory by
+var Kosmos.newQSTileFactory by
Kosmos.Fixture {
NewQSTileFactory(
qSTileConfigProvider,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/core/StatusBarOrchestratorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/core/StatusBarOrchestratorKosmos.kt
index bdcab5f..9776fd9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/core/StatusBarOrchestratorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/core/StatusBarOrchestratorKosmos.kt
@@ -34,14 +34,29 @@
import com.android.systemui.statusbar.data.repository.privacyDotWindowControllerStore
import com.android.systemui.statusbar.data.repository.statusBarModeRepository
import com.android.systemui.statusbar.mockNotificationRemoteInputManager
+import com.android.systemui.statusbar.phone.fakeAutoHideControllerStore
import com.android.systemui.statusbar.phone.mockAutoHideController
-import com.android.systemui.statusbar.phone.multiDisplayAutoHideControllerStore
import com.android.systemui.statusbar.window.data.repository.fakeStatusBarWindowStatePerDisplayRepository
import com.android.systemui.statusbar.window.data.repository.statusBarWindowStateRepositoryStore
import com.android.systemui.statusbar.window.fakeStatusBarWindowController
import com.android.systemui.statusbar.window.statusBarWindowControllerStore
import com.android.wm.shell.bubbles.bubblesOptional
+val Kosmos.multiDisplayStatusBarOrchestratorStore by
+ Kosmos.Fixture {
+ MultiDisplayStatusBarOrchestratorStore(
+ applicationCoroutineScope,
+ displayRepository,
+ statusBarOrchestratorFactory,
+ statusBarWindowControllerStore,
+ statusBarModeRepository,
+ statusBarInitializerStore,
+ fakeAutoHideControllerStore,
+ displayScopeRepository,
+ statusBarWindowStateRepositoryStore,
+ )
+ }
+
val Kosmos.statusBarOrchestrator by
Kosmos.Fixture {
StatusBarOrchestrator(
@@ -74,15 +89,9 @@
Kosmos.Fixture {
MultiDisplayStatusBarStarter(
applicationCoroutineScope,
- displayScopeRepository,
- statusBarOrchestratorFactory,
- statusBarWindowStateRepositoryStore,
- statusBarModeRepository,
+ multiDisplayStatusBarOrchestratorStore,
displayRepository,
statusBarInitializerStore,
- statusBarWindowControllerStore,
- statusBarInitializerStore,
- multiDisplayAutoHideControllerStore,
privacyDotWindowControllerStore,
lightBarControllerStore,
mockIWindowManager,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt
new file mode 100644
index 0000000..085d386
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification
+
+import com.android.systemui.kosmos.Kosmos
+import org.mockito.kotlin.mock
+
+val Kosmos.visibilityLocationProvider: VisibilityLocationProvider by Kosmos.Fixture { mock() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorKosmos.kt
index 358d251..1a5c61a 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorKosmos.kt
@@ -16,7 +16,41 @@
package com.android.systemui.statusbar.notification.collection.coordinator
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.concurrency.fakeExecutor
+import com.android.systemui.dump.dumpManager
+import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
+import com.android.systemui.keyguard.wakefulnessLifecycle
import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.util.mockito.mock
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.plugins.statusbar.statusBarStateController
+import com.android.systemui.shade.domain.interactor.shadeAnimationInteractor
+import com.android.systemui.shade.domain.interactor.shadeInteractor
+import com.android.systemui.statusbar.notification.collection.provider.visualStabilityProvider
+import com.android.systemui.statusbar.notification.domain.interactor.seenNotificationsInteractor
+import com.android.systemui.statusbar.notification.stack.data.repository.headsUpNotificationRepository
+import com.android.systemui.statusbar.notification.visibilityLocationProvider
+import com.android.systemui.statusbar.policy.keyguardStateController
+import com.android.systemui.util.kotlin.JavaAdapter
-var Kosmos.visualStabilityCoordinator by Kosmos.Fixture { mock<VisualStabilityCoordinator>() }
+var Kosmos.visualStabilityCoordinator: VisualStabilityCoordinator by
+ Kosmos.Fixture {
+ VisualStabilityCoordinator(
+ fakeExecutor,
+ fakeExecutor,
+ dumpManager,
+ headsUpNotificationRepository,
+ shadeAnimationInteractor,
+ JavaAdapter(testScope.backgroundScope),
+ seenNotificationsInteractor,
+ statusBarStateController,
+ visibilityLocationProvider,
+ visualStabilityProvider,
+ wakefulnessLifecycle,
+ communalSceneInteractor,
+ shadeInteractor,
+ keyguardTransitionInteractor,
+ keyguardStateController,
+ visualStabilityCoordinatorLogger,
+ )
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt
new file mode 100644
index 0000000..6645cdc
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification.collection.coordinator
+
+import com.android.systemui.kosmos.Kosmos
+import org.mockito.kotlin.mock
+
+val Kosmos.visualStabilityCoordinatorLogger: VisualStabilityCoordinatorLogger by
+ Kosmos.Fixture { mock() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt
index d65a4a0..4f1bf95 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/AmbientStateKosmos.kt
@@ -22,6 +22,7 @@
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.shade.transition.largeScreenShadeInterpolator
import com.android.systemui.statusbar.notification.headsup.mockAvalancheController
+import com.android.systemui.statusbar.notification.stack.data.repository.headsUpNotificationRepository
import com.android.systemui.statusbar.phone.statusBarKeyguardViewManager
val Kosmos.ambientState by Fixture {
@@ -32,6 +33,7 @@
/*bypassController=*/ stackScrollAlgorithmBypassController,
/*statusBarKeyguardViewManager=*/ statusBarKeyguardViewManager,
/*largeScreenShadeInterpolator=*/ largeScreenShadeInterpolator,
+ /*headsUpRepository=*/ headsUpNotificationRepository,
/*avalancheController=*/ mockAvalancheController,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKosmos.kt
index c5f6557..f2f75c4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelKosmos.kt
@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel
-import com.android.systemui.flags.featureFlagsClassic
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.airplaneModeInteractor
@@ -31,7 +30,6 @@
interactor = mobileIconsInteractor,
airplaneModeInteractor = airplaneModeInteractor,
constants = mock(),
- flags = featureFlagsClassic,
scope = applicationCoroutineScope,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorKosmos.kt
index 888b7e6..07c4ec5 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogVisibilityInteractorKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.volume.dialog.domain.interactor
+import com.android.systemui.accessibility.data.repository.accessibilityRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.plugins.volumeDialogController
@@ -28,8 +29,10 @@
VolumeDialogVisibilityInteractor(
applicationCoroutineScope,
volumeDialogCallbacksInteractor,
+ volumeDialogStateInteractor,
volumeTracer,
volumeDialogVisibilityRepository,
+ accessibilityRepository,
volumeDialogController,
secureSettingsRepository,
)
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
index c9396f5..e177399 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.volume.dialog.sliders.ui.viewmodel
+import android.content.applicationContext
import com.android.internal.logging.uiEventLogger
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -29,6 +30,7 @@
val Kosmos.volumeDialogSliderViewModel by
Kosmos.Fixture {
VolumeDialogSliderViewModel(
+ context = applicationContext,
sliderType = volumeDialogSliderType,
interactor = volumeDialogSliderInteractor,
inputEventsInteractor = volumeDialogSliderInputEventsInteractor,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModelKosmos.kt
index 05ef462..f08c08a 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogViewModelKosmos.kt
@@ -18,6 +18,7 @@
import android.content.applicationContext
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.statusbar.policy.configurationController
import com.android.systemui.statusbar.policy.devicePostureController
import com.android.systemui.volume.dialog.domain.interactor.volumeDialogStateInteractor
@@ -28,6 +29,7 @@
Kosmos.Fixture {
VolumeDialogViewModel(
applicationContext,
+ applicationCoroutineScope,
volumeDialogVisibilityInteractor,
volumeDialogSlidersInteractor,
volumeDialogStateInteractor,
diff --git a/proto/src/metrics_constants/OWNERS b/proto/src/metrics_constants/OWNERS
index 7009282..b032841 100644
--- a/proto/src/metrics_constants/OWNERS
+++ b/proto/src/metrics_constants/OWNERS
@@ -1,4 +1,3 @@
cwren@android.com
-yanglu@google.com
yaochen@google.com
yro@google.com
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java
index 3ebef02..b616766 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodAwareTestRunner.java
@@ -23,13 +23,10 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.os.Bundle;
import android.platform.test.annotations.RavenwoodTestRunnerInitializing;
import android.platform.test.annotations.internal.InnerRunner;
import android.util.Log;
-import androidx.test.platform.app.InstrumentationRegistry;
-
import com.android.ravenwood.common.RavenwoodCommonUtils;
import org.junit.rules.TestRule;
@@ -285,11 +282,6 @@
private boolean onBefore(Description description, Scope scope, Order order) {
Log.v(TAG, "onBefore: description=" + description + ", " + scope + ", " + order);
- if (scope == Scope.Instance && order == Order.Outer) {
- // Start of a test method.
- mState.enterTestMethod(description);
- }
-
final var classDescription = getDescription();
// Class-level annotations are checked by the runner already, so we only check
@@ -299,6 +291,12 @@
return false;
}
}
+
+ if (scope == Scope.Instance && order == Order.Outer) {
+ // Start of a test method.
+ mState.enterTestMethod(description);
+ }
+
return true;
}
@@ -314,8 +312,7 @@
if (scope == Scope.Instance && order == Order.Outer) {
// End of a test method.
- mState.exitTestMethod();
-
+ mState.exitTestMethod(description);
}
// If RUN_DISABLED_TESTS is set, and the method did _not_ throw, make it an error.
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java
index 70bc52b..705186e 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRunnerState.java
@@ -81,12 +81,15 @@
RavenwoodRuntimeEnvironmentController.exitTestClass();
}
+ /** Called when a test method is about to start */
public void enterTestMethod(Description description) {
mMethodDescription = description;
- RavenwoodRuntimeEnvironmentController.initForMethod();
+ RavenwoodRuntimeEnvironmentController.enterTestMethod(description);
}
- public void exitTestMethod() {
+ /** Called when a test method finishes */
+ public void exitTestMethod(Description description) {
+ RavenwoodRuntimeEnvironmentController.exitTestMethod(description);
mMethodDescription = null;
}
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
index f205d23..d935626 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
@@ -51,6 +51,7 @@
import android.os.Bundle;
import android.os.HandlerThread;
import android.os.Looper;
+import android.os.Message;
import android.os.Process_ravenwood;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
@@ -74,6 +75,7 @@
import com.android.server.LocalServices;
import com.android.server.compat.PlatformCompat;
+import org.junit.AssumptionViolatedException;
import org.junit.internal.management.ManagementFactory;
import org.junit.runner.Description;
@@ -81,6 +83,7 @@
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
@@ -93,6 +96,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
/**
* Responsible for initializing and the environment.
@@ -107,32 +111,60 @@
@SuppressWarnings("UnusedVariable")
private static final PrintStream sStdErr = System.err;
- private static final String MAIN_THREAD_NAME = "RavenwoodMain";
+ private static final String MAIN_THREAD_NAME = "Ravenwood:Main";
+ private static final String TESTS_THREAD_NAME = "Ravenwood:Test";
+
private static final String LIBRAVENWOOD_INITIALIZER_NAME = "ravenwood_initializer";
private static final String RAVENWOOD_NATIVE_RUNTIME_NAME = "ravenwood_runtime";
private static final String ANDROID_LOG_TAGS = "ANDROID_LOG_TAGS";
private static final String RAVENWOOD_ANDROID_LOG_TAGS = "RAVENWOOD_" + ANDROID_LOG_TAGS;
+ static volatile Thread sTestThread;
+ static volatile Thread sMainThread;
+
/**
* When enabled, attempt to dump all thread stacks just before we hit the
* overall Tradefed timeout, to aid in debugging deadlocks.
+ *
+ * Note, this timeout will _not_ stop the test, as there isn't really a clean way to do it.
+ * It'll merely print stacktraces.
*/
private static final boolean ENABLE_TIMEOUT_STACKS =
- "1".equals(System.getenv("RAVENWOOD_ENABLE_TIMEOUT_STACKS"));
+ !"0".equals(System.getenv("RAVENWOOD_ENABLE_TIMEOUT_STACKS"));
- private static final int TIMEOUT_MILLIS = 9_000;
+ private static final boolean TOLERATE_LOOPER_ASSERTS =
+ !"0".equals(System.getenv("RAVENWOOD_TOLERATE_LOOPER_ASSERTS"));
+
+ static final int DEFAULT_TIMEOUT_SECONDS = 10;
+ private static final int TIMEOUT_MILLIS = getTimeoutSeconds() * 1000;
+
+ static int getTimeoutSeconds() {
+ var e = System.getenv("RAVENWOOD_TIMEOUT_SECONDS");
+ if (e == null || e.isEmpty()) {
+ return DEFAULT_TIMEOUT_SECONDS;
+ }
+ return Integer.parseInt(e);
+ }
+
private static final ScheduledExecutorService sTimeoutExecutor =
- Executors.newScheduledThreadPool(1);
+ Executors.newScheduledThreadPool(1, (Runnable r) -> {
+ Thread t = Executors.defaultThreadFactory().newThread(r);
+ t.setName("Ravenwood:TimeoutMonitor");
+ t.setDaemon(true);
+ return t;
+ });
- private static ScheduledFuture<?> sPendingTimeout;
+ private static volatile ScheduledFuture<?> sPendingTimeout;
/**
* When enabled, attempt to detect uncaught exceptions from background threads.
*/
private static final boolean ENABLE_UNCAUGHT_EXCEPTION_DETECTION =
- "1".equals(System.getenv("RAVENWOOD_ENABLE_UNCAUGHT_EXCEPTION_DETECTION"));
+ !"0".equals(System.getenv("RAVENWOOD_ENABLE_UNCAUGHT_EXCEPTION_DETECTION"));
+
+ private static final boolean DIE_ON_UNCAUGHT_EXCEPTION = true;
/**
* When set, an unhandled exception was discovered (typically on a background thread), and we
@@ -141,12 +173,6 @@
private static final AtomicReference<Throwable> sPendingUncaughtException =
new AtomicReference<>();
- private static final Thread.UncaughtExceptionHandler sUncaughtExceptionHandler =
- (thread, throwable) -> {
- // Remember the first exception we discover
- sPendingUncaughtException.compareAndSet(null, throwable);
- };
-
// TODO: expose packCallingIdentity function in libbinder and use it directly
// See: packCallingIdentity in frameworks/native/libs/binder/IPCThreadState.cpp
private static long packBinderIdentityToken(
@@ -187,6 +213,8 @@
* Initialize the global environment.
*/
public static void globalInitOnce() {
+ sTestThread = Thread.currentThread();
+ Thread.currentThread().setName(TESTS_THREAD_NAME);
synchronized (sInitializationLock) {
if (!sInitialized) {
// globalInitOnce() is called from class initializer, which cause
@@ -194,6 +222,7 @@
sInitialized = true;
// This is the first call.
+ final long start = System.currentTimeMillis();
try {
globalInitInner();
} catch (Throwable th) {
@@ -202,6 +231,9 @@
sExceptionFromGlobalInit = th;
SneakyThrow.sneakyThrow(th);
}
+ final long end = System.currentTimeMillis();
+ // TODO Show user/system time too
+ Log.e(TAG, "globalInit() took " + (end - start) + "ms");
} else {
// Subsequent calls. If the first call threw, just throw the same error, to prevent
// the test from running.
@@ -220,7 +252,8 @@
RavenwoodCommonUtils.log(TAG, "globalInitInner()");
if (ENABLE_UNCAUGHT_EXCEPTION_DETECTION) {
- Thread.setDefaultUncaughtExceptionHandler(sUncaughtExceptionHandler);
+ Thread.setDefaultUncaughtExceptionHandler(
+ RavenwoodRuntimeEnvironmentController::reportUncaughtExceptions);
}
// Some process-wide initialization:
@@ -304,6 +337,7 @@
ActivityManager.init$ravenwood(SYSTEM.getIdentifier());
final var main = new HandlerThread(MAIN_THREAD_NAME);
+ sMainThread = main;
main.start();
Looper.setMainLooperForTest(main.getLooper());
@@ -350,9 +384,20 @@
var systemServerContext =
new RavenwoodContext(ANDROID_PACKAGE_NAME, main, systemResourcesLoader);
- sInstrumentation = new Instrumentation();
- sInstrumentation.basicInit(instContext, targetContext, null);
- InstrumentationRegistry.registerInstance(sInstrumentation, Bundle.EMPTY);
+ var instArgs = Bundle.EMPTY;
+ RavenwoodUtils.runOnMainThreadSync(() -> {
+ try {
+ // TODO We should get the instrumentation class name from the build file or
+ // somewhere.
+ var InstClass = Class.forName("android.app.Instrumentation");
+ sInstrumentation = (Instrumentation) InstClass.getConstructor().newInstance();
+ sInstrumentation.basicInit(instContext, targetContext, null);
+ sInstrumentation.onCreate(instArgs);
+ } catch (Exception e) {
+ SneakyThrow.sneakyThrow(e);
+ }
+ });
+ InstrumentationRegistry.registerInstance(sInstrumentation, instArgs);
RavenwoodSystemServer.init(systemServerContext);
@@ -399,22 +444,46 @@
SystemProperties.clearChangeCallbacksForTest();
- if (ENABLE_TIMEOUT_STACKS) {
- sPendingTimeout = sTimeoutExecutor.schedule(
- RavenwoodRuntimeEnvironmentController::dumpStacks,
- TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
- }
- if (ENABLE_UNCAUGHT_EXCEPTION_DETECTION) {
- maybeThrowPendingUncaughtException(false);
- }
+ maybeThrowPendingUncaughtException();
}
/**
- * Partially reset and initialize before each test method invocation
+ * Called when a test method is about to be started.
*/
- public static void initForMethod() {
+ public static void enterTestMethod(Description description) {
// TODO(b/375272444): this is a hacky workaround to ensure binder identity
Binder.restoreCallingIdentity(sCallingIdentity);
+
+ scheduleTimeout();
+ }
+
+ /**
+ * Called when a test method finished.
+ */
+ public static void exitTestMethod(Description description) {
+ cancelTimeout();
+ maybeThrowPendingUncaughtException();
+ }
+
+ private static void scheduleTimeout() {
+ if (!ENABLE_TIMEOUT_STACKS) {
+ return;
+ }
+ cancelTimeout();
+
+ sPendingTimeout = sTimeoutExecutor.schedule(
+ RavenwoodRuntimeEnvironmentController::onTestTimedOut,
+ TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+ }
+
+ private static void cancelTimeout() {
+ if (!ENABLE_TIMEOUT_STACKS) {
+ return;
+ }
+ var pt = sPendingTimeout;
+ if (pt != null) {
+ pt.cancel(false);
+ }
}
private static void initializeCompatIds() {
@@ -473,15 +542,36 @@
}
/**
+ * Return if an exception is benign and okay to continue running the main looper even
+ * if we detect it.
+ */
+ private static boolean isThrowableBenign(Throwable th) {
+ return th instanceof AssertionError || th instanceof AssumptionViolatedException;
+ }
+
+ static void dispatchMessage(Message msg) {
+ try {
+ msg.getTarget().dispatchMessage(msg);
+ } catch (Throwable th) {
+ var desc = String.format("Detected %s on looper thread %s", th.getClass().getName(),
+ Thread.currentThread());
+ sStdErr.println(desc);
+ if (TOLERATE_LOOPER_ASSERTS && isThrowableBenign(th)) {
+ sStdErr.printf("*** Continuing the test because it's %s ***\n",
+ th.getClass().getSimpleName());
+ var e = new Exception(desc, th);
+ sPendingUncaughtException.compareAndSet(null, e);
+ return;
+ }
+ throw th;
+ }
+ }
+
+ /**
* A callback when a test class finishes its execution, mostly only for debugging.
*/
public static void exitTestClass() {
- if (ENABLE_TIMEOUT_STACKS) {
- sPendingTimeout.cancel(false);
- }
- if (ENABLE_UNCAUGHT_EXCEPTION_DETECTION) {
- maybeThrowPendingUncaughtException(true);
- }
+ maybeThrowPendingUncaughtException();
}
public static void logTestRunner(String label, Description description) {
@@ -491,35 +581,70 @@
+ "(" + description.getTestClass().getName() + ")");
}
- private static void dumpStacks() {
- final PrintStream out = System.err;
- out.println("-----BEGIN ALL THREAD STACKS-----");
- final Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces();
- for (Map.Entry<Thread, StackTraceElement[]> stack : stacks.entrySet()) {
- out.println();
- Thread t = stack.getKey();
- out.println(t.toString() + " ID=" + t.getId());
- for (StackTraceElement e : stack.getValue()) {
- out.println("\tat " + e);
- }
+ private static void maybeThrowPendingUncaughtException() {
+ final Throwable pending = sPendingUncaughtException.getAndSet(null);
+ if (pending != null) {
+ throw new IllegalStateException("Found an uncaught exception", pending);
}
- out.println("-----END ALL THREAD STACKS-----");
}
/**
- * If there's a pending uncaught exception, consume and throw it now. Typically used to
- * report an exception on a background thread as a failure for the currently running test.
+ * Prints the stack trace from all threads.
*/
- private static void maybeThrowPendingUncaughtException(boolean duringReset) {
- final Throwable pending = sPendingUncaughtException.getAndSet(null);
- if (pending != null) {
- if (duringReset) {
- throw new IllegalStateException(
- "Found an uncaught exception during this test", pending);
- } else {
- throw new IllegalStateException(
- "Found an uncaught exception before this test started", pending);
+ private static void onTestTimedOut() {
+ sStdErr.println("********* SLOW TEST DETECTED ********");
+ dumpStacks(null, null);
+ }
+
+ private static final Object sDumpStackLock = new Object();
+
+ /**
+ * Prints the stack trace from all threads.
+ */
+ private static void dumpStacks(
+ @Nullable Thread exceptionThread, @Nullable Throwable throwable) {
+ cancelTimeout();
+ synchronized (sDumpStackLock) {
+ final PrintStream out = sStdErr;
+ out.println("-----BEGIN ALL THREAD STACKS-----");
+
+ var stacks = Thread.getAllStackTraces();
+ var threads = stacks.keySet().stream().sorted(
+ Comparator.comparingLong(Thread::getId)).collect(Collectors.toList());
+
+ // Put the test and the main thread at the top.
+ var testThread = sTestThread;
+ var mainThread = sMainThread;
+ if (mainThread != null) {
+ threads.remove(mainThread);
+ threads.add(0, mainThread);
}
+ if (testThread != null) {
+ threads.remove(testThread);
+ threads.add(0, testThread);
+ }
+ // Put the exception thread at the top.
+ // Also inject the stacktrace from the exception.
+ if (exceptionThread != null) {
+ threads.remove(exceptionThread);
+ threads.add(0, exceptionThread);
+ stacks.put(exceptionThread, throwable.getStackTrace());
+ }
+ for (var th : threads) {
+ out.println();
+
+ out.print("Thread");
+ if (th == exceptionThread) {
+ out.print(" [** EXCEPTION THREAD **]");
+ }
+ out.print(": " + th.getName() + " / " + th);
+ out.println();
+
+ for (StackTraceElement e : stacks.get(th)) {
+ out.println("\tat " + e);
+ }
+ }
+ out.println("-----END ALL THREAD STACKS-----");
}
}
@@ -545,13 +670,17 @@
() -> Class.forName("org.mockito.Matchers"));
}
- // TODO: use the real UiAutomation class instead of a mock
- private static UiAutomation createMockUiAutomation() {
- sAdoptedPermissions = Collections.emptySet();
- var mock = mock(UiAutomation.class, inv -> {
+ static <T> T makeDefaultThrowMock(Class<T> clazz) {
+ return mock(clazz, inv -> {
HostTestUtils.onThrowMethodCalled();
return null;
});
+ }
+
+ // TODO: use the real UiAutomation class instead of a mock
+ private static UiAutomation createMockUiAutomation() {
+ sAdoptedPermissions = Collections.emptySet();
+ var mock = makeDefaultThrowMock(UiAutomation.class);
doAnswer(inv -> {
sAdoptedPermissions = UiAutomation.ALL_PERMISSIONS;
return null;
@@ -586,6 +715,23 @@
}
}
+ private static void reportUncaughtExceptions(Thread th, Throwable e) {
+ sStdErr.printf("Uncaught exception detected: %s: %s\n",
+ th, RavenwoodCommonUtils.getStackTraceString(e));
+
+ doBugreport(th, e, DIE_ON_UNCAUGHT_EXCEPTION);
+ }
+
+ private static void doBugreport(
+ @Nullable Thread exceptionThread, @Nullable Throwable throwable,
+ boolean killSelf) {
+ // TODO: Print more information
+ dumpStacks(exceptionThread, throwable);
+ if (killSelf) {
+ System.exit(13);
+ }
+ }
+
private static void dumpJavaProperties() {
Log.v(TAG, "JVM properties:");
dumpMap(System.getProperties());
@@ -601,7 +747,6 @@
Log.v(TAG, " " + key + "=" + map.get(key));
}
}
-
private static void dumpOtherInfo() {
Log.v(TAG, "Other key information:");
var jloc = Locale.getDefault();
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodSystemProperties.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodSystemProperties.java
index 70c161c1..819d93a 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodSystemProperties.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodSystemProperties.java
@@ -26,6 +26,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
@@ -45,6 +46,9 @@
/** The default values. */
static final Map<String, String> sDefaultValues = new HashMap<>();
+ static final Set<String> sReadableKeys = new HashSet<>();
+ static final Set<String> sWritableKeys = new HashSet<>();
+
private static final String[] PARTITIONS = {
"bootimage",
"odm",
@@ -88,9 +92,24 @@
ravenwoodProps.forEach((key, origValue) -> {
final String value;
- // If a value starts with "$$$", then this is a reference to the device-side value.
if (origValue.startsWith("$$$")) {
+ // If a value starts with "$$$", then:
+ // - If it's "$$$r", the key is allowed to read.
+ // - If it's "$$$w", the key is allowed to write.
+ // - Otherwise, it's a reference to the device-side value.
+ // In case of $$$r and $$$w, if the key ends with a '.', then it'll be treaded
+ // as a prefix match.
var deviceKey = origValue.substring(3);
+ if ("r".equals(deviceKey)) {
+ sReadableKeys.add(key);
+ Log.v(TAG, key + " (readable)");
+ return;
+ } else if ("w".equals(deviceKey)) {
+ sWritableKeys.add(key);
+ Log.v(TAG, key + " (writable)");
+ return;
+ }
+
var deviceValue = deviceProps.get(deviceKey);
if (deviceValue == null) {
throw new RuntimeException("Failed to initialize system properties. Key '"
@@ -131,50 +150,38 @@
sDefaultValues.forEach(RavenwoodRuntimeNative::setSystemProperty);
}
+ private static boolean checkAllowedInner(String key, Set<String> allowed) {
+ if (allowed.contains(key)) {
+ return true;
+ }
+
+ // Also search for a prefix match.
+ for (var k : allowed) {
+ if (k.endsWith(".") && key.startsWith(k)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean checkAllowed(String key, Set<String> allowed) {
+ return checkAllowedInner(key, allowed) || checkAllowedInner(getKeyRoot(key), allowed);
+ }
+
private static boolean isKeyReadable(String key) {
- // All writable keys are also readable
- if (isKeyWritable(key)) return true;
-
- final String root = getKeyRoot(key);
-
- // This set is carefully curated to help identify situations where a test may
- // accidentally depend on a default value of an obscure property whose owner hasn't
- // decided how Ravenwood should behave.
- if (root.startsWith("boot.")) return true;
- if (root.startsWith("build.")) return true;
- if (root.startsWith("product.")) return true;
- if (root.startsWith("soc.")) return true;
- if (root.startsWith("system.")) return true;
-
// All core values should be readable
- if (sDefaultValues.containsKey(key)) return true;
-
- // Hardcoded allowlist
- return switch (key) {
- case "gsm.version.baseband",
- "no.such.thing",
- "qemu.sf.lcd_density",
- "ro.bootloader",
- "ro.hardware",
- "ro.hw_timeout_multiplier",
- "ro.odm.build.media_performance_class",
- "ro.sf.lcd_density",
- "ro.treble.enabled",
- "ro.vndk.version",
- "ro.icu.data.path" -> true;
- default -> false;
- };
+ if (sDefaultValues.containsKey(key)) {
+ return true;
+ }
+ if (checkAllowed(key, sReadableKeys)) {
+ return true;
+ }
+ // All writable keys are also readable
+ return isKeyWritable(key);
}
private static boolean isKeyWritable(String key) {
- final String root = getKeyRoot(key);
-
- if (root.startsWith("debug.")) return true;
-
- // For PropertyInvalidatedCache
- if (root.startsWith("cache_key.")) return true;
-
- return false;
+ return checkAllowed(key, sWritableKeys);
}
static boolean isKeyAccessible(String key, boolean write) {
diff --git a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodUtils.java b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodUtils.java
index 19c1bff..3e2c405 100644
--- a/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodUtils.java
+++ b/ravenwood/junit-src/android/platform/test/ravenwood/RavenwoodUtils.java
@@ -15,7 +15,20 @@
*/
package android.platform.test.ravenwood;
+import static com.android.ravenwood.common.RavenwoodCommonUtils.ReflectedMethod.reflectMethod;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Handler;
+import android.os.Looper;
+
import com.android.ravenwood.common.RavenwoodCommonUtils;
+import com.android.ravenwood.common.SneakyThrow;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
/**
* Utilities for writing (bivalent) ravenwood tests.
@@ -47,4 +60,129 @@
public static void loadJniLibrary(String libname) {
RavenwoodCommonUtils.loadJniLibrary(libname);
}
+
+ private class MainHandlerHolder {
+ static Handler sMainHandler = new Handler(Looper.getMainLooper());
+ }
+
+ /**
+ * Returns the main thread handler.
+ */
+ public static Handler getMainHandler() {
+ return MainHandlerHolder.sMainHandler;
+ }
+
+ /**
+ * Run a Callable on Handler and wait for it to complete.
+ */
+ @Nullable
+ public static <T> T runOnHandlerSync(@NonNull Handler h, @NonNull Callable<T> c) {
+ var result = new AtomicReference<T>();
+ var thrown = new AtomicReference<Throwable>();
+ var latch = new CountDownLatch(1);
+ h.post(() -> {
+ try {
+ result.set(c.call());
+ } catch (Throwable th) {
+ thrown.set(th);
+ }
+ latch.countDown();
+ });
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException("Interrupted while waiting on the Runnable", e);
+ }
+ var th = thrown.get();
+ if (th != null) {
+ SneakyThrow.sneakyThrow(th);
+ }
+ return result.get();
+ }
+
+
+ /**
+ * Run a Runnable on Handler and wait for it to complete.
+ */
+ @Nullable
+ public static void runOnHandlerSync(@NonNull Handler h, @NonNull Runnable r) {
+ runOnHandlerSync(h, () -> {
+ r.run();
+ return null;
+ });
+ }
+
+ /**
+ * Run a Callable on main thread and wait for it to complete.
+ */
+ @Nullable
+ public static <T> T runOnMainThreadSync(@NonNull Callable<T> c) {
+ return runOnHandlerSync(getMainHandler(), c);
+ }
+
+ /**
+ * Run a Runnable on main thread and wait for it to complete.
+ */
+ @Nullable
+ public static void runOnMainThreadSync(@NonNull Runnable r) {
+ runOnHandlerSync(getMainHandler(), r);
+ }
+
+ public static class MockitoHelper {
+ private MockitoHelper() {
+ }
+
+ /**
+ * Allow verifyZeroInteractions to work on ravenwood. It was replaced with a different
+ * method on. (Maybe we should do it in Ravenizer.)
+ */
+ public static void verifyZeroInteractions(Object... mocks) {
+ if (RavenwoodRule.isOnRavenwood()) {
+ // Mockito 4 or later
+ reflectMethod("org.mockito.Mockito", "verifyNoInteractions", Object[].class)
+ .callStatic(new Object[]{mocks});
+ } else {
+ // Mockito 2
+ reflectMethod("org.mockito.Mockito", "verifyZeroInteractions", Object[].class)
+ .callStatic(new Object[]{mocks});
+ }
+ }
+ }
+
+
+ /**
+ * Wrap the given {@link Supplier} to become memoized.
+ *
+ * The underlying {@link Supplier} will only be invoked once, and that result will be cached
+ * and returned for any future requests.
+ */
+ static <T> Supplier<T> memoize(ThrowingSupplier<T> supplier) {
+ return new Supplier<>() {
+ private T mInstance;
+
+ @Override
+ public T get() {
+ synchronized (this) {
+ if (mInstance == null) {
+ mInstance = create();
+ }
+ return mInstance;
+ }
+ }
+
+ private T create() {
+ try {
+ return supplier.get();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+
+ /** Used by {@link #memoize(ThrowingSupplier)} */
+ public interface ThrowingSupplier<T> {
+ /** */
+ T get() throws Exception;
+ }
}
diff --git a/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java b/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
index a967a3f..893b354 100644
--- a/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
+++ b/ravenwood/runtime-common-src/com/android/ravenwood/common/RavenwoodCommonUtils.java
@@ -26,10 +26,12 @@
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
+import java.util.Objects;
import java.util.function.Supplier;
public class RavenwoodCommonUtils {
@@ -329,4 +331,70 @@
public static <T> T withDefault(@Nullable T value, @Nullable T def) {
return value != null ? value : def;
}
+
+ /**
+ * Utility for calling a method with reflections. Used to call a method by name.
+ * Note, this intentionally does _not_ support non-public methods, as we generally
+ * shouldn't violate java visibility in ravenwood.
+ *
+ * @param <TTHIS> class owning the method.
+ */
+ public static class ReflectedMethod<TTHIS> {
+ private final Class<TTHIS> mThisClass;
+ private final Method mMethod;
+
+ private ReflectedMethod(Class<TTHIS> thisClass, Method method) {
+ mThisClass = thisClass;
+ mMethod = method;
+ }
+
+ /** Factory method. */
+ @SuppressWarnings("unchecked")
+ public static <TTHIS> ReflectedMethod<TTHIS> reflectMethod(
+ @NonNull Class<TTHIS> clazz, @NonNull String methodName,
+ @NonNull Class<?>... argTypes) {
+ try {
+ return new ReflectedMethod(clazz, clazz.getMethod(methodName, argTypes));
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Factory method. */
+ @SuppressWarnings("unchecked")
+ public static <TTHIS> ReflectedMethod<TTHIS> reflectMethod(
+ @NonNull String className, @NonNull String methodName,
+ @NonNull Class<?>... argTypes) {
+ try {
+ return reflectMethod((Class<TTHIS>) Class.forName(className), methodName, argTypes);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Call the instance method */
+ @SuppressWarnings("unchecked")
+ public <RET> RET call(@NonNull TTHIS thisObject, @NonNull Object... args) {
+ try {
+ return (RET) mMethod.invoke(Objects.requireNonNull(thisObject), args);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Call the static method */
+ @SuppressWarnings("unchecked")
+ public <RET> RET callStatic(@NonNull Object... args) {
+ try {
+ return (RET) mMethod.invoke(null, args);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ /** Handy method to create an array */
+ public static <T> T[] arr(@NonNull T... objects) {
+ return objects;
+ }
}
diff --git a/ravenwood/runtime-helper-src/framework/android/util/Log_ravenwood.java b/ravenwood/runtime-helper-src/framework/android/util/Log_ravenwood.java
index 7ab9cda..855a4ff 100644
--- a/ravenwood/runtime-helper-src/framework/android/util/Log_ravenwood.java
+++ b/ravenwood/runtime-helper-src/framework/android/util/Log_ravenwood.java
@@ -21,7 +21,6 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.RuntimeInit;
import com.android.ravenwood.RavenwoodRuntimeNative;
-import com.android.ravenwood.common.RavenwoodCommonUtils;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
@@ -164,7 +163,7 @@
* Return the "real" {@code System.out} if it's been swapped by {@code RavenwoodRuleImpl}, so
* that we don't end up in a recursive loop.
*/
- private static PrintStream getRealOut() {
+ public static PrintStream getRealOut() {
if (RuntimeInit.sOut$ravenwood != null) {
return RuntimeInit.sOut$ravenwood;
} else {
diff --git a/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/VMRuntime.java b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/VMRuntime.java
index eaadac6..50cfd3b 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/VMRuntime.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/VMRuntime.java
@@ -57,4 +57,12 @@
public int getTargetSdkVersion() {
return RavenwoodRuntimeState.sTargetSdkLevel;
}
+
+ /** Ignored on ravenwood. */
+ public void registerNativeAllocation(long bytes) {
+ }
+
+ /** Ignored on ravenwood. */
+ public void registerNativeFree(long bytes) {
+ }
}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
index cf1a513..985e00e 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
@@ -97,6 +97,9 @@
if (referent == null) {
throw new IllegalArgumentException("referent is null");
}
+ if (mFreeFunction == 0) {
+ return () -> {}; // do nothing
+ }
if (nativePtr == 0) {
throw new IllegalArgumentException("nativePtr is null");
}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NonNull.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NonNull.java
index db3cd8ed..1153a77 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NonNull.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NonNull.java
@@ -35,14 +35,4 @@
@Retention(SOURCE)
@Target({FIELD, METHOD, PARAMETER, TYPE_USE})
@libcore.api.IntraCoreApi
-public @interface NonNull {
- /**
- * Min Android API level (inclusive) to which this annotation is applied.
- */
- int from() default Integer.MIN_VALUE;
-
- /**
- * Max Android API level to which this annotation is applied.
- */
- int to() default Integer.MAX_VALUE;
-}
+public @interface NonNull {}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/Nullable.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/Nullable.java
index 3371978..295f083 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/Nullable.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/Nullable.java
@@ -35,14 +35,4 @@
@Retention(SOURCE)
@Target({FIELD, METHOD, PARAMETER, TYPE_USE})
@libcore.api.IntraCoreApi
-public @interface Nullable {
- /**
- * Min Android API level (inclusive) to which this annotation is applied.
- */
- int from() default Integer.MIN_VALUE;
-
- /**
- * Max Android API level to which this annotation is applied.
- */
- int to() default Integer.MAX_VALUE;
-}
+public @interface Nullable {}
diff --git a/ravenwood/scripts/add-annotations.sh b/ravenwood/scripts/add-annotations.sh
index 3e86037..8c394f5 100755
--- a/ravenwood/scripts/add-annotations.sh
+++ b/ravenwood/scripts/add-annotations.sh
@@ -35,7 +35,7 @@
# We add this line to each methods found.
# Note, if we used a single @, that'd be handled as an at file. Use
# the double-at instead.
-annotation="@@android.platform.test.annotations.DisabledOnRavenwood"
+annotation="@@android.platform.test.annotations.DisabledOnRavenwood(reason = \"bulk-disabled by script\")"
while getopts "t:" opt; do
case "$opt" in
t)
diff --git a/ravenwood/tests/coretest/Android.bp b/ravenwood/tests/coretest/Android.bp
index 9dd7cc6..182a7cf 100644
--- a/ravenwood/tests/coretest/Android.bp
+++ b/ravenwood/tests/coretest/Android.bp
@@ -33,3 +33,34 @@
},
auto_gen_config: true,
}
+
+// Same as RavenwoodCoreTest, but it excludes tests using platform-parametric-runner-lib,
+// because that modules has too many dependencies and slow to build incrementally.
+android_ravenwood_test {
+ name: "RavenwoodCoreTest-light",
+
+ static_libs: [
+ "androidx.annotation_annotation",
+ "androidx.test.ext.junit",
+ "androidx.test.rules",
+
+ // This library should be removed by Ravenizer
+ "mockito-target-minus-junit4",
+ ],
+ libs: [
+ // We access internal private classes
+ "ravenwood-junit-impl",
+ ],
+ srcs: [
+ "test/**/*.java",
+ "test/**/*.kt",
+ ],
+
+ exclude_srcs: [
+ "test/com/android/ravenwoodtest/runnercallbacktests/*",
+ ],
+ ravenizer: {
+ strip_mockito: true,
+ },
+ auto_gen_config: true,
+}
diff --git a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodMainThreadTest.java b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodMainThreadTest.java
new file mode 100644
index 0000000..68387d7
--- /dev/null
+++ b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodMainThreadTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2025 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.ravenwoodtest.coretest;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+
+import android.platform.test.ravenwood.RavenwoodUtils;
+
+import org.junit.Test;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+public class RavenwoodMainThreadTest {
+ private static final boolean RUN_UNSAFE_TESTS =
+ "1".equals(System.getenv("RAVENWOOD_RUN_UNSAFE_TESTS"));
+
+ @Test
+ public void testRunOnMainThread() {
+ AtomicReference<Thread> thr = new AtomicReference<>();
+ RavenwoodUtils.runOnMainThreadSync(() -> {
+ thr.set(Thread.currentThread());
+ });
+ var th = thr.get();
+ assertThat(th).isNotNull();
+ assertThat(th).isNotEqualTo(Thread.currentThread());
+ }
+
+ /**
+ * Sleep a long time on the main thread. This test would then "pass", but Ravenwood
+ * should show the stack traces.
+ *
+ * This is "unsafe" because this test is slow.
+ */
+ @Test
+ public void testUnsafeMainThreadHang() {
+ assumeTrue(RUN_UNSAFE_TESTS);
+
+ // The test should time out.
+ RavenwoodUtils.runOnMainThreadSync(() -> {
+ try {
+ Thread.sleep(30_000);
+ } catch (InterruptedException e) {
+ fail("Interrupted");
+ }
+ });
+ }
+
+ /**
+ * AssertionError on the main thread would be swallowed and reported "normally".
+ * (Other kinds of exceptions would be caught by the unhandled exception handler, and kills
+ * the process)
+ *
+ * This is "unsafe" only because this feature can be disabled via the env var.
+ */
+ @Test
+ public void testUnsafeAssertFailureOnMainThread() {
+ assumeTrue(RUN_UNSAFE_TESTS);
+
+ assertThrows(AssertionError.class, () -> {
+ RavenwoodUtils.runOnMainThreadSync(() -> {
+ fail();
+ });
+ });
+ }
+}
diff --git a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodReflectorTest.java b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodReflectorTest.java
new file mode 100644
index 0000000..421fb50
--- /dev/null
+++ b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodReflectorTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2025 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.ravenwoodtest.coretest;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.android.ravenwood.common.RavenwoodCommonUtils.ReflectedMethod;
+
+import org.junit.Test;
+
+/**
+ * Tests for {@link ReflectedMethod}.
+ */
+public class RavenwoodReflectorTest {
+ /** test target */
+ public class Target {
+ private final int mVar;
+
+ /** test target */
+ public Target(int var) {
+ mVar = var;
+ }
+
+ /** test target */
+ public int foo(int x) {
+ return x + mVar;
+ }
+
+ /** test target */
+ public static int bar(int x) {
+ return x + 1;
+ }
+ }
+
+ /** Test for a non-static method call */
+ @Test
+ public void testNonStatic() {
+ var obj = new Target(5);
+
+ var m = ReflectedMethod.reflectMethod(Target.class, "foo", int.class);
+ assertThat((int) m.call(obj, 2)).isEqualTo(7);
+ }
+
+ /** Test for a static method call */
+ @Test
+ public void testStatic() {
+ var m = ReflectedMethod.reflectMethod(Target.class, "bar", int.class);
+ assertThat((int) m.callStatic(1)).isEqualTo(2);
+ }
+}
diff --git a/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodSystemPropertiesTest.java b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodSystemPropertiesTest.java
new file mode 100644
index 0000000..454f5a9
--- /dev/null
+++ b/ravenwood/tests/coretest/test/com/android/ravenwoodtest/coretest/RavenwoodSystemPropertiesTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2025 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.ravenwoodtest.coretest;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.fail;
+
+import android.os.SystemProperties;
+
+import org.junit.Test;
+
+public class RavenwoodSystemPropertiesTest {
+ @Test
+ public void testRead() {
+ assertThat(SystemProperties.get("ro.board.first_api_level")).isEqualTo("1");
+ }
+
+ @Test
+ public void testWrite() {
+ SystemProperties.set("debug.xxx", "5");
+ assertThat(SystemProperties.get("debug.xxx")).isEqualTo("5");
+ }
+
+ private static void assertException(String expectedMessage, Runnable r) {
+ try {
+ r.run();
+ fail("Excepted exception with message '" + expectedMessage + "' but wasn't thrown");
+ } catch (RuntimeException e) {
+ if (e.getMessage().contains(expectedMessage)) {
+ return;
+ }
+ fail("Excepted exception with message '" + expectedMessage + "' but was '"
+ + e.getMessage() + "'");
+ }
+ }
+
+
+ @Test
+ public void testReadDisallowed() {
+ assertException("Read access to system property 'nonexisitent' denied", () -> {
+ SystemProperties.get("nonexisitent");
+ });
+ }
+
+ @Test
+ public void testWriteDisallowed() {
+ assertException("failed to set system property \"ro.board.first_api_level\" ", () -> {
+ SystemProperties.set("ro.board.first_api_level", "2");
+ });
+ }
+}
diff --git a/ravenwood/tests/minimum-test/test/com/android/ravenwoodtest/RavenwoodMinimumTest.java b/ravenwood/tests/minimum-test/test/com/android/ravenwoodtest/RavenwoodMinimumTest.java
index 30abaa2..b1a40f0 100644
--- a/ravenwood/tests/minimum-test/test/com/android/ravenwoodtest/RavenwoodMinimumTest.java
+++ b/ravenwood/tests/minimum-test/test/com/android/ravenwoodtest/RavenwoodMinimumTest.java
@@ -16,28 +16,27 @@
package com.android.ravenwoodtest;
import android.platform.test.annotations.IgnoreUnderRavenwood;
-import android.platform.test.ravenwood.RavenwoodRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Assert;
-import org.junit.Rule;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class RavenwoodMinimumTest {
- @Rule
- public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder()
- .setProcessApp()
- .build();
-
@Test
public void testSimple() {
Assert.assertTrue(android.os.Process.isApplicationUid(android.os.Process.myUid()));
}
@Test
+ public void testAssumeNot() {
+ Assume.assumeFalse(android.os.Process.isApplicationUid(android.os.Process.myUid()));
+ }
+
+ @Test
@IgnoreUnderRavenwood
public void testIgnored() {
throw new RuntimeException("Shouldn't be executed under ravenwood");
diff --git a/ravenwood/texts/ravenwood-build.prop b/ravenwood/texts/ravenwood-build.prop
index 37c50f1..512b459 100644
--- a/ravenwood/texts/ravenwood-build.prop
+++ b/ravenwood/texts/ravenwood-build.prop
@@ -8,9 +8,41 @@
ro.soc.model=Ravenwood
ro.debuggable=1
-# For the graphics stack
-ro.hwui.max_texture_allocation_size=104857600
persist.sys.locale=en-US
+ro.product.locale=en-US
+
+ro.hwui.max_texture_allocation_size=104857600
+
+# Allowlist control:
+# This set is carefully curated to help identify situations where a test may
+# accidentally depend on a default value of an obscure property whose owner hasn't
+# decided how Ravenwood should behave.
+
+boot.=$$$r
+build.=$$$r
+product.=$$$r
+soc.=$$$r
+system.=$$$r
+wm.debug.=$$$r
+wm.extensions.=$$$r
+
+gsm.version.baseband=$$$r
+no.such.thing=$$$r
+qemu.sf.lcd_density=$$$r
+ro.bootloader=$$$r
+ro.hardware=$$$r
+ro.hw_timeout_multiplier=$$$r
+ro.odm.build.media_performance_class=$$$r
+ro.sf.lcd_density=$$$r
+ro.treble.enabled=$$$r
+ro.vndk.version=$$$r
+ro.icu.data.path=$$$r
+
+# Writable keys
+debug.=$$$w
+
+# For PropertyInvalidatedCache
+cache_key.=$$$w
# The ones starting with "ro.product" or "ro.build" will be copied to all "partitions" too.
# See RavenwoodSystemProperties.
diff --git a/ravenwood/texts/ravenwood-services-jarjar-rules.txt b/ravenwood/texts/ravenwood-services-jarjar-rules.txt
index 8fdd340..64a0e25 100644
--- a/ravenwood/texts/ravenwood-services-jarjar-rules.txt
+++ b/ravenwood/texts/ravenwood-services-jarjar-rules.txt
@@ -5,7 +5,7 @@
# Rename all other service internals so that tests can continue to statically
# link services code when owners aren't ready to support on Ravenwood
-rule com.android.server.** repackaged.@0
+rule com.android.server.** repackaged.services.@0
# TODO: support AIDL generated Parcelables via hoststubgen
-rule android.hardware.power.stats.** repackaged.@0
+rule android.hardware.power.stats.** repackaged.services.@0
diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/FilterRemapper.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/FilterRemapper.kt
index c5a2f9f..bba4681 100644
--- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/FilterRemapper.kt
+++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/FilterRemapper.kt
@@ -15,6 +15,7 @@
*/
package com.android.hoststubgen.filters
+import com.android.hoststubgen.log
import org.objectweb.asm.commons.Remapper
/**
@@ -23,19 +24,25 @@
class FilterRemapper(val filter: OutputFilter) : Remapper() {
private val cache = mutableMapOf<String, String>()
- override fun mapType(typeInternalName: String?): String? {
+
+ override fun map(typeInternalName: String?): String? {
if (typeInternalName == null) {
return null
}
cache[typeInternalName]?.let {
+ // log.d("Cached rename from $typeInternalName to $it")
return it
}
- var mapped = filter.remapType(typeInternalName) ?: typeInternalName
+ var mapped = filter.remapType(typeInternalName)
+ if (mapped != null) {
+ log.d("Renaming type $typeInternalName to $mapped")
+ } else {
+ // log.d("Not renaming type $typeInternalName")
+ }
+ mapped = mapped ?: typeInternalName
cache[typeInternalName] = mapped
return mapped
}
-
- // TODO Do we need to implement mapPackage(), etc too?
}
\ No newline at end of file
diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyRemapperFilter.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyRemapperFilter.kt
index a78c655..bc90d12 100644
--- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyRemapperFilter.kt
+++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyRemapperFilter.kt
@@ -15,7 +15,6 @@
*/
package com.android.hoststubgen.filters
-import com.android.hoststubgen.log
import java.util.regex.Pattern
/**
@@ -34,17 +33,12 @@
val typeInternalNamePrefix: String,
)
- private val cache = mutableMapOf<String, String>()
-
override fun remapType(className: String): String? {
- var mapped: String = className
typeRenameSpecs.forEach {
if (it.typeInternalNamePattern.matcher(className).matches()) {
- mapped = it.typeInternalNamePrefix + className
- log.d("Renaming type $className to $mapped")
+ return it.typeInternalNamePrefix + className
}
}
- cache[className] = mapped
- return mapped
+ return null
}
}
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/01-hoststubgen-test-tiny-framework-orig-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/01-hoststubgen-test-tiny-framework-orig-dump.txt
index 635f66d..e846d6e 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/01-hoststubgen-test-tiny-framework-orig-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/01-hoststubgen-test-tiny-framework-orig-dump.txt
@@ -3198,7 +3198,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 2, attributes: 2
+ interfaces: 0, fields: 0, methods: 3, attributes: 2
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkRenamedClassCaller();
@@ -3229,6 +3229,22 @@
LocalVariableTable:
Start Length Slot Name Signature
0 12 0 value I
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=2, locals=1, args_size=1
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 value I
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeInvisibleAnnotations:
@@ -3242,7 +3258,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 2, attributes: 2
+ interfaces: 0, fields: 1, methods: 3, attributes: 2
Constant pool:
{
private final int mValue;
@@ -3278,6 +3294,26 @@
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: iconst_1
+ x: anewarray #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 16 0 value I
}
SourceFile: "TinyFrameworkToBeRenamed.java"
RuntimeInvisibleAnnotations:
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/03-hoststubgen-test-tiny-framework-host-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/03-hoststubgen-test-tiny-framework-host-dump.txt
index 51a3355..be95fe0 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/03-hoststubgen-test-tiny-framework-host-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/03-hoststubgen-test-tiny-framework-host-dump.txt
@@ -3392,7 +3392,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 2, attributes: 3
+ interfaces: 0, fields: 0, methods: 3, attributes: 3
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkRenamedClassCaller();
@@ -3429,6 +3429,25 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=2, locals=1, args_size=1
+ x: iload_0
+ x: invokestatic #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 value I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeVisibleAnnotations:
@@ -3867,7 +3886,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 2, attributes: 3
+ interfaces: 0, fields: 1, methods: 3, attributes: 3
Constant pool:
{
private final int mValue;
@@ -3891,7 +3910,7 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 0 10 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
0 10 1 value I
RuntimeVisibleAnnotations:
x: #x()
@@ -3908,7 +3927,30 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 0 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 0 5 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static rename_prefix.com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: iconst_1
+ x: anewarray #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 16 0 value I
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/13-hoststubgen-test-tiny-framework-host-ext-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
index a466a2e..667981f 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output.RELEASE_TARGET_JAVA_21/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
@@ -4241,7 +4241,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 3
+ interfaces: 0, fields: 0, methods: 4, attributes: 3
Constant pool:
{
private static {};
@@ -4298,6 +4298,30 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
+ x: ldc #x // String bar
+ x: ldc #x // String (I)I
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
+ x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+ x: iload_0
+ x: invokestatic #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 10 0 value I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeVisibleAnnotations:
@@ -4947,7 +4971,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 3, attributes: 3
+ interfaces: 0, fields: 1, methods: 4, attributes: 3
Constant pool:
{
private final int mValue;
@@ -4962,8 +4986,8 @@
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=2, locals=0, args_size=0
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
- x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logClassLoaded
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logClassLoaded
x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.onClassLoaded:(Ljava/lang/Class;Ljava/lang/String;)V
x: return
@@ -4972,7 +4996,7 @@
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=2, args_size=2
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
x: ldc #x // String <init>
x: ldc #x // String (I)V
x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
@@ -4986,7 +5010,7 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 11 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 11 10 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
11 10 1 value I
RuntimeVisibleAnnotations:
x: #x()
@@ -4997,7 +5021,7 @@
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
x: ldc #x // String getValue
x: ldc #x // String ()I
x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
@@ -5008,7 +5032,35 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 11 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 11 5 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static rename_prefix.com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // String getArray
+ x: ldc #x // String (I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
+ x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+ x: iconst_1
+ x: anewarray #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 16 0 value I
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/01-hoststubgen-test-tiny-framework-orig-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/01-hoststubgen-test-tiny-framework-orig-dump.txt
index 78341d7..8f56f0e 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/01-hoststubgen-test-tiny-framework-orig-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/01-hoststubgen-test-tiny-framework-orig-dump.txt
@@ -3219,7 +3219,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 2, attributes: 2
+ interfaces: 0, fields: 0, methods: 3, attributes: 2
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkRenamedClassCaller();
@@ -3250,6 +3250,22 @@
LocalVariableTable:
Start Length Slot Name Signature
0 12 0 value I
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=2, locals=1, args_size=1
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 value I
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeInvisibleAnnotations:
@@ -3263,7 +3279,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 2, attributes: 2
+ interfaces: 0, fields: 1, methods: 3, attributes: 2
Constant pool:
{
private final int mValue;
@@ -3299,6 +3315,26 @@
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: iconst_1
+ x: anewarray #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 16 0 value I
}
SourceFile: "TinyFrameworkToBeRenamed.java"
RuntimeInvisibleAnnotations:
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/03-hoststubgen-test-tiny-framework-host-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/03-hoststubgen-test-tiny-framework-host-dump.txt
index 2e0b182..c918bf8 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/03-hoststubgen-test-tiny-framework-host-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/03-hoststubgen-test-tiny-framework-host-dump.txt
@@ -3422,7 +3422,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 2, attributes: 3
+ interfaces: 0, fields: 0, methods: 3, attributes: 3
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkRenamedClassCaller();
@@ -3459,6 +3459,25 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=2, locals=1, args_size=1
+ x: iload_0
+ x: invokestatic #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 value I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeVisibleAnnotations:
@@ -3897,7 +3916,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 2, attributes: 3
+ interfaces: 0, fields: 1, methods: 3, attributes: 3
Constant pool:
{
private final int mValue;
@@ -3921,7 +3940,7 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 0 10 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
0 10 1 value I
RuntimeVisibleAnnotations:
x: #x()
@@ -3938,7 +3957,30 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 0 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 0 5 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static rename_prefix.com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: iconst_1
+ x: anewarray #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 16 0 value I
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/13-hoststubgen-test-tiny-framework-host-ext-dump.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
index 51f7925..28065bf 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/golden-output/13-hoststubgen-test-tiny-framework-host-ext-dump.txt
@@ -4271,7 +4271,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 3
+ interfaces: 0, fields: 0, methods: 4, attributes: 3
Constant pool:
{
private static {};
@@ -4328,6 +4328,30 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static int bar(int);
+ descriptor: (I)I
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller
+ x: ldc #x // String bar
+ x: ldc #x // String (I)I
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
+ x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+ x: iload_0
+ x: invokestatic #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getArray:(I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: iconst_0
+ x: aaload
+ x: invokevirtual #x // Method rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.getValue:()I
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 10 0 value I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
SourceFile: "TinyFrameworkRenamedClassCaller.java"
RuntimeVisibleAnnotations:
@@ -4977,7 +5001,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
super_class: #x // java/lang/Object
- interfaces: 0, fields: 1, methods: 3, attributes: 3
+ interfaces: 0, fields: 1, methods: 4, attributes: 3
Constant pool:
{
private final int mValue;
@@ -4992,8 +5016,8 @@
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=2, locals=0, args_size=0
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
- x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logClassLoaded
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logClassLoaded
x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.onClassLoaded:(Ljava/lang/Class;Ljava/lang/String;)V
x: return
@@ -5002,7 +5026,7 @@
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=2, args_size=2
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
x: ldc #x // String <init>
x: ldc #x // String (I)V
x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
@@ -5016,7 +5040,7 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 11 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 11 10 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
11 10 1 value I
RuntimeVisibleAnnotations:
x: #x()
@@ -5027,7 +5051,7 @@
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
- x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
x: ldc #x // String getValue
x: ldc #x // String ()I
x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
@@ -5038,7 +5062,35 @@
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
- 11 5 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ 11 5 0 this Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static rename_prefix.com.android.hoststubgen.test.tinyframework.TinyFrameworkToBeRenamed[] getArray(int);
+ descriptor: (I)[Lrename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=6, locals=1, args_size=1
+ x: ldc #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: ldc #x // String getArray
+ x: ldc #x // String (I)[Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed;
+ x: ldc #x // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
+ x: invokestatic #x // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+ x: iconst_1
+ x: anewarray #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iconst_0
+ x: new #x // class rename_prefix/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method "<init>":(I)V
+ x: aastore
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 16 0 value I
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller.java b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller.java
index 707bc0e..74e4610 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller.java
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkRenamedClassCaller.java
@@ -25,4 +25,9 @@
// so this code should work as-is.
return new TinyFrameworkToBeRenamed(value).getValue();
}
+
+ /** Calls the class that'll be renamed. */
+ public static int bar(int value) {
+ return TinyFrameworkToBeRenamed.getArray(value)[0].getValue();
+ }
}
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.java b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.java
index 8319ced..7dcc83e 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.java
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkToBeRenamed.java
@@ -31,4 +31,8 @@
public int getValue() {
return mValue;
}
+
+ public static TinyFrameworkToBeRenamed[] getArray(int value) {
+ return new TinyFrameworkToBeRenamed[] { new TinyFrameworkToBeRenamed(value) };
+ }
}
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-test/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkClassTest.java b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-test/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkClassTest.java
index 68673dc..b8d6be4 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-test/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkClassTest.java
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-test/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkClassTest.java
@@ -308,6 +308,11 @@
}
@Test
+ public void testTypeRenameArray() {
+ assertThat(TinyFrameworkRenamedClassCaller.bar(2)).isEqualTo(2);
+ }
+
+ @Test
public void testMethodCallReplaceNonStatic() throws Exception {
assertThat(TinyFrameworkMethodCallReplace.nonStaticMethodCallReplaceTester())
.isEqualTo(true);
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index 4b04248..47aa8f5 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -1115,14 +1115,12 @@
if (svcConnTracingEnabled()) {
logTraceSvcConn("performGlobalAction", "action=" + action);
}
- int currentUserId;
synchronized (mLock) {
if (!hasRightsToCurrentUserLocked()) {
return false;
}
- currentUserId = mSystemSupport.getCurrentUserIdLocked();
}
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
final long identity = Binder.clearCallingIdentity();
try {
return mSystemActionPerformer.performSystemAction(action);
@@ -2791,11 +2789,7 @@
@RequiresNoPermission
@Override
public void setAnimationScale(float scale) {
- int currentUserId;
- synchronized (mLock) {
- currentUserId = mSystemSupport.getCurrentUserIdLocked();
- }
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
final long identity = Binder.clearCallingIdentity();
try {
Settings.Global.putFloat(
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 9eb8442..42834ce 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1402,11 +1402,7 @@
@EnforcePermission(MANAGE_ACCESSIBILITY)
public void registerSystemAction(RemoteAction action, int actionId) {
registerSystemAction_enforcePermission();
- int currentUserId;
- synchronized (mLock) {
- currentUserId = mCurrentUserId;
- }
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
mTraceManager.logTrace(LOG_TAG + ".registerSystemAction",
FLAGS_ACCESSIBILITY_MANAGER, "action=" + action + ";actionId=" + actionId);
@@ -1423,11 +1419,7 @@
@EnforcePermission(MANAGE_ACCESSIBILITY)
public void unregisterSystemAction(int actionId) {
unregisterSystemAction_enforcePermission();
- int currentUserId;
- synchronized (mLock) {
- currentUserId = mCurrentUserId;
- }
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
mTraceManager.logTrace(LOG_TAG + ".unregisterSystemAction",
FLAGS_ACCESSIBILITY_MANAGER, "actionId=" + actionId);
@@ -1759,7 +1751,7 @@
synchronized (mLock) {
currentUserId = mCurrentUserId;
}
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
mTraceManager.logTrace(LOG_TAG + ".notifyAccessibilityButtonClicked",
FLAGS_ACCESSIBILITY_MANAGER,
@@ -1807,11 +1799,7 @@
@EnforcePermission(STATUS_BAR_SERVICE)
public void notifyAccessibilityButtonVisibilityChanged(boolean shown) {
notifyAccessibilityButtonVisibilityChanged_enforcePermission();
- int currentUserId;
- synchronized (mLock) {
- currentUserId = mCurrentUserId;
- }
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
mTraceManager.logTrace(LOG_TAG + ".notifyAccessibilityButtonVisibilityChanged",
FLAGS_ACCESSIBILITY_MANAGER, "shown=" + shown);
@@ -2149,9 +2137,6 @@
this, 0, oldUserState.mUserId));
}
- // Announce user changes only if more than one exist.
- final boolean announceNewUser = mUserManager.getUsers().size() > 1;
-
// The user changed.
mCurrentUserId = userId;
AccessibilityUserState userState = getCurrentUserStateLocked();
@@ -2178,13 +2163,6 @@
// As an initialization step, update the shortcuts for the current user.
updateShortcutsForCurrentNavigationMode();
- if (announceNewUser) {
- // Schedule announcement of the current user if needed.
- mMainHandler.sendMessageDelayed(
- obtainMessage(AccessibilityManagerService::announceNewUserIfNeeded, this),
- WAIT_FOR_USER_STATE_FULLY_INITIALIZED_MILLIS);
- }
-
for (IUserInitializationCompleteCallback callback
: mUserInitializationCompleteCallbacks) {
try {
@@ -2198,20 +2176,6 @@
}
}
- private void announceNewUserIfNeeded() {
- synchronized (mLock) {
- AccessibilityUserState userState = getCurrentUserStateLocked();
- if (userState.isHandlingAccessibilityEventsLocked()) {
- String message = mContext.getString(R.string.user_switched,
- mUserManager.getUserInfo(mCurrentUserId).name);
- AccessibilityEvent event = AccessibilityEvent.obtain(
- AccessibilityEvent.TYPE_ANNOUNCEMENT);
- event.getText().add(message);
- sendAccessibilityEventLocked(event, mCurrentUserId);
- }
- }
- }
-
private void unlockUser(int userId) {
synchronized (mLock) {
int parentUserId = mSecurityPolicy.resolveProfileParentLocked(userId);
@@ -5002,11 +4966,7 @@
throws RemoteException {
registerProxyForDisplay_enforcePermission();
mSecurityPolicy.checkForAccessibilityPermissionOrRole();
- int currentUserId;
- synchronized (mLock) {
- currentUserId = mCurrentUserId;
- }
- enforceCurrentUserIfVisibleBackgroundEnabled(currentUserId);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
if (client == null) {
return false;
}
diff --git a/services/art-profile b/services/art-profile
index 712fca9..2c7e754 100644
--- a/services/art-profile
+++ b/services/art-profile
@@ -49,7 +49,7 @@
HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidActive(I)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidCached(IZ)V+]Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl$1;,Lcom/android/server/alarm/AlarmManagerService$7;,Lcom/android/server/job/controllers/BackgroundJobsController$2;
HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->removeUid(IZ)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
-HPLcom/android/server/AppStateTrackerImpl;->areAlarmsRestrictedByBatterySaver(ILjava/lang/String;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
+HSPLcom/android/server/AppStateTrackerImpl;->areAlarmsRestrictedByBatterySaver(ILjava/lang/String;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
HSPLcom/android/server/AppStateTrackerImpl;->areJobsRestricted(ILjava/lang/String;Z)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
HSPLcom/android/server/AppStateTrackerImpl;->cloneListeners()[Lcom/android/server/AppStateTrackerImpl$Listener;
HSPLcom/android/server/AppStateTrackerImpl;->findForcedAppStandbyUidPackageIndexLocked(ILjava/lang/String;)I
@@ -57,12 +57,13 @@
HSPLcom/android/server/AppStateTrackerImpl;->isRunAnyInBackgroundAppOpsAllowed(ILjava/lang/String;)Z+]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;
HSPLcom/android/server/AppStateTrackerImpl;->isRunAnyRestrictedLocked(ILjava/lang/String;)Z
HSPLcom/android/server/AppStateTrackerImpl;->isUidActive(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-HPLcom/android/server/AppStateTrackerImpl;->isUidPowerSaveUserExempt(I)Z
+HSPLcom/android/server/AppStateTrackerImpl;->isUidPowerSaveUserExempt(I)Z
HSPLcom/android/server/AppStateTrackerImpl;->setPowerSaveExemptionListAppIds([I[I[I)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
HSPLcom/android/server/BatteryService$Led;->updateLightsLocked()V+]Lcom/android/server/lights/LogicalLight;Lcom/android/server/lights/LightsService$LightImpl;
HSPLcom/android/server/BatteryService;->processValuesLocked(Z)V+]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/internal/logging/MetricsLogger;Lcom/android/internal/logging/MetricsLogger;
HSPLcom/android/server/BatteryService;->rateLimitBatteryChangedBroadcast(Z)Z
HSPLcom/android/server/BatteryService;->sendBatteryChangedIntentLocked(Z)V
+HSPLcom/android/server/BatteryService;->shouldSendBatteryLowLocked()Z
HSPLcom/android/server/BatteryService;->traceBatteryChangedBroadcastEvent(Landroid/content/Intent;Z)V+]Landroid/content/Intent;Landroid/content/Intent;
HSPLcom/android/server/BatteryService;->update(Landroid/hardware/health/HealthInfo;)V+]Landroid/os/ConditionVariable;Landroid/os/ConditionVariable;
HSPLcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;->getCallingUid()I
@@ -73,6 +74,7 @@
HSPLcom/android/server/DeviceIdleController;->reportTempWhitelistChangedLocked(IZ)V+]Landroid/content/Context;Landroid/app/ContextImpl;
HSPLcom/android/server/DeviceIdleController;->updateTempWhitelistAppIdsLocked(IZJIILjava/lang/String;I)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Lcom/android/server/DropBoxManagerService$EntryFile;)I
+HSPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Ljava/lang/Object;)I
HSPLcom/android/server/DropBoxManagerService$EntryFile;->getExtension()Ljava/lang/String;
HSPLcom/android/server/DropBoxManagerService$EntryFile;->getFilename()Ljava/lang/String;
HSPLcom/android/server/DropBoxManagerService;->addEntry(Ljava/lang/String;Lcom/android/server/DropBoxManagerInternal$EntrySource;I)V+]Lcom/android/server/DropBoxManagerInternal$EntrySource;Lcom/android/server/DropBoxManagerService$SimpleEntrySource;]Lcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;Lcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;]Ljava/lang/Thread;Lcom/android/server/IoThread;,Lcom/android/server/ServiceThread;,Lcom/android/server/am/ActivityManagerService$13;,Ljava/lang/Thread;
@@ -114,7 +116,7 @@
HSPLcom/android/server/StorageManagerService$WatchedUnlockedUsers;->contains(I)Z
HSPLcom/android/server/StorageManagerService;->getMountModeInternal(ILjava/lang/String;)I+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/internal/app/IAppOpsService;Lcom/android/server/appop/AppOpsService;
HSPLcom/android/server/StorageManagerService;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/storage/VolumeInfo;Landroid/os/storage/VolumeInfo;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
-HSPLcom/android/server/StorageManagerService;->getVolumes(I)[Landroid/os/storage/VolumeInfo;
+HSPLcom/android/server/StorageManagerService;->getVolumes(I)[Landroid/os/storage/VolumeInfo;+]Lcom/android/server/storage/WatchedVolumeInfo;Lcom/android/server/storage/WatchedVolumeInfo;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/StorageManagerService;->isCeStorageUnlocked(I)Z+]Lcom/android/server/StorageManagerService$WatchedUnlockedUsers;Lcom/android/server/StorageManagerService$WatchedUnlockedUsers;
HPLcom/android/server/StorageManagerService;->monitor()V+]Landroid/os/IVold;Landroid/os/IVold$Stub$Proxy;
HSPLcom/android/server/StorageManagerService;->updateLegacyStorageApps(Ljava/lang/String;IZ)V+]Ljava/util/Set;Landroid/util/ArraySet;
@@ -122,12 +124,12 @@
HSPLcom/android/server/SystemConfig;->readPermissionAllowlist(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;Ljava/lang/String;)V
HSPLcom/android/server/SystemConfig;->readPermissionsFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/io/File;I)V
HSPLcom/android/server/SystemService;->getContext()Landroid/content/Context;
-HSPLcom/android/server/SystemServiceManager;->onUser(Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/String;Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$UserCompletedEventType;)V+]Lcom/android/server/SystemService;megamorphic_types]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/ThreadPoolExecutor;
-HSPLcom/android/server/SystemServiceManager;->startBootPhase(Lcom/android/server/utils/TimingsTraceAndSlog;I)V
+HPLcom/android/server/TelephonyRegistry$Record;->matchTelephonyCallbackEvent(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
HSPLcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;IIZ)Lcom/android/server/TelephonyRegistry$Record;+]Landroid/os/IBinder;megamorphic_types]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/TelephonyRegistry;->listen(ZZLjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;Ljava/util/Set;ZI)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Ljava/util/HashSet;
HSPLcom/android/server/ThreadPriorityBooster;->boost()V+]Ljava/lang/ThreadLocal;Lcom/android/server/ThreadPriorityBooster$1;
HSPLcom/android/server/ThreadPriorityBooster;->reset()V+]Ljava/lang/ThreadLocal;Lcom/android/server/ThreadPriorityBooster$1;
+HSPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V+]Lcom/android/server/UiModeManagerService$IntProperty;Lcom/android/server/UiModeManagerService$1;,Lcom/android/server/UiModeManagerService$2;]Lcom/android/server/twilight/TwilightManager;Lcom/android/server/twilight/TwilightService$1;
HPLcom/android/server/Watchdog$HandlerChecker;->getCompletionStateLocked()I+]Ljava/time/Clock;Landroid/os/SystemClock$1;
HSPLcom/android/server/Watchdog$HandlerChecker;->isHandlerPolling()Z
HSPLcom/android/server/Watchdog$HandlerChecker;->run()V+]Lcom/android/server/Watchdog$Monitor;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -136,6 +138,7 @@
HSPLcom/android/server/Watchdog$HandlerCheckerAndTimeout;->customTimeoutMillis()Ljava/util/Optional;
HPLcom/android/server/Watchdog;->evaluateCheckerCompletionLocked()I+]Lcom/android/server/Watchdog$HandlerChecker;Lcom/android/server/Watchdog$HandlerChecker;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/Watchdog;->run()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getEnabledAccessibilityServiceList(II)Ljava/util/List;+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Lcom/android/server/accessibility/ProxyManager;Lcom/android/server/accessibility/ProxyManager;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/accounts/AccountManagerService$7;->onResult(Landroid/os/Bundle;)V
HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;ILjava/lang/String;Z)V
HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V+]Landroid/accounts/IAccountAuthenticator;Landroid/accounts/IAccountAuthenticator$Stub$Proxy;]Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;
@@ -149,13 +152,14 @@
HPLcom/android/server/accounts/AccountManagerService$Session;->onResult(Landroid/os/Bundle;)V+]Landroid/accounts/IAccountManagerResponse;Landroid/accounts/IAccountManagerResponse$Stub$Proxy;]Lcom/android/server/accounts/AccountManagerService$Session;Lcom/android/server/accounts/AccountManagerService$12;,Lcom/android/server/accounts/AccountManagerService$7;,Lcom/android/server/accounts/AccountManagerService$RemoveAccountSession;
HPLcom/android/server/accounts/AccountManagerService$Session;->unbind()V+]Landroid/content/Context;Landroid/app/ContextImpl;
HPLcom/android/server/accounts/AccountManagerService;->accountExistsCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Z+]Ljava/util/HashMap;Ljava/util/LinkedHashMap;
+HPLcom/android/server/accounts/AccountManagerService;->calculatePackageSignatureDigest(Ljava/lang/String;I)[B+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
HPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V+]Landroid/app/INotificationManager;Lcom/android/server/notification/NotificationManagerService$12;,Lcom/android/server/notification/NotificationManagerService$13;]Lcom/android/server/accounts/AccountManagerService$Injector;Lcom/android/server/accounts/AccountManagerService$Injector;
-HPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
+HSPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
HSPLcom/android/server/accounts/AccountManagerService;->filterAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;[Landroid/accounts/Account;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Ljava/util/Map;Ljava/util/LinkedHashMap;]Ljava/util/Set;Ljava/util/LinkedHashMap$LinkedKeySet;
HSPLcom/android/server/accounts/AccountManagerService;->filterSharedAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/util/Map;ILjava/lang/String;)Ljava/util/Map;+]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
HPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I+]Ljava/util/Map;Ljava/util/HashMap;
HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUserForPackage(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUserForPackage(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/accounts/AccountManagerService;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/accounts/AccountManagerService;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
HSPLcom/android/server/accounts/AccountManagerService;->getAccountsFromCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Ljava/util/Collection;Ljava/util/LinkedHashMap$LinkedValues;]Ljava/util/HashMap;Ljava/util/LinkedHashMap;]Ljava/util/Iterator;Ljava/util/LinkedHashMap$LinkedValueIterator;
@@ -172,17 +176,18 @@
HPLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z+]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;I[Ljava/lang/String;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
HPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z+]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z+]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/accounts/AccountManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z+]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
HPLcom/android/server/accounts/AccountManagerService;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
-HPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
+HSPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;]Ljava/util/Map;Ljava/util/HashMap;
HPLcom/android/server/accounts/AccountManagerService;->readUserDataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;+]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
HPLcom/android/server/accounts/AccountManagerService;->saveAuthTokenToDatabase(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
HPLcom/android/server/accounts/AccountManagerService;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
HPLcom/android/server/accounts/AccountManagerService;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
HPLcom/android/server/accounts/AccountManagerService;->setUserdataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;I)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
+HPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->getWritableDatabaseUserIsUnlocked()Landroid/database/sqlite/SQLiteDatabase;
HPLcom/android/server/accounts/AccountsDb;->beginTransaction()V+]Landroid/database/sqlite/SQLiteOpenHelper;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;
HPLcom/android/server/accounts/AccountsDb;->findDeAccountId(Landroid/accounts/Account;)J+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteOpenHelper;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;
HPLcom/android/server/accounts/AccountsDb;->findExtrasIdByAccountId(JLjava/lang/String;)J+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;]Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;
@@ -200,7 +205,6 @@
HSPLcom/android/server/alarm/Alarm;->matches(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z+]Landroid/app/IAlarmListener;Landroid/app/AlarmManager$ListenerWrapper;,Landroid/app/IAlarmListener$Stub$Proxy;,Lcom/android/server/alarm/AlarmManagerService$2;]Landroid/os/IBinder;Landroid/app/AlarmManager$ListenerWrapper;,Landroid/os/BinderProxy;,Lcom/android/server/alarm/AlarmManagerService$2;
HSPLcom/android/server/alarm/Alarm;->setPolicyElapsed(IJ)Z
HSPLcom/android/server/alarm/Alarm;->updateWhenElapsed()Z
-HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda13;-><init>(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda15;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
HPLcom/android/server/alarm/AlarmManagerService$4;->canScheduleExactAlarms(Ljava/lang/String;)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
@@ -210,7 +214,7 @@
HSPLcom/android/server/alarm/AlarmManagerService$7;->updateAlarmsForUid(I)V+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;
HSPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
HSPLcom/android/server/alarm/AlarmManagerService$AlarmThread;->run()V
-HPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->getTotalWakeupsInWindow(Ljava/lang/String;I)I+]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
+HSPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->getTotalWakeupsInWindow(Ljava/lang/String;I)I+]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
HSPLcom/android/server/alarm/AlarmManagerService$ClockReceiver;->scheduleTimeTickEvent()V+]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
HSPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->alarmComplete(Landroid/os/IBinder;)V
HSPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->deliverLocked(Lcom/android/server/alarm/Alarm;J)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/IAlarmListener;Landroid/app/AlarmManager$ListenerWrapper;,Landroid/app/IAlarmListener$Stub$Proxy;,Lcom/android/server/alarm/AlarmManagerService$2;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/os/IBinder;Landroid/app/AlarmManager$ListenerWrapper;,Landroid/os/BinderProxy;,Lcom/android/server/alarm/AlarmManagerService$2;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -224,7 +228,7 @@
HSPLcom/android/server/alarm/AlarmManagerService$Injector;->getElapsedRealtimeMillis()J
HSPLcom/android/server/alarm/AlarmManagerService$Injector;->isAlarmDriverPresent()Z
HSPLcom/android/server/alarm/AlarmManagerService$Injector;->setAlarm(IJ)V
-HPLcom/android/server/alarm/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
+HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->shouldGetBucketElevation(Ljava/lang/String;I)Z+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
HPLcom/android/server/alarm/AlarmManagerService$RemovedAlarm;-><init>(Lcom/android/server/alarm/Alarm;IJJ)V
HPLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$WZFEMPWy81l-szSzhRJHOwNjF-M([ILcom/android/server/alarm/Alarm;)Z
@@ -270,6 +274,7 @@
HSPLcom/android/server/alarm/LazyAlarmStore;->updateAlarmDeliveries(Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;)Z+]Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
HSPLcom/android/server/alarm/MetricsHelper;->pushAlarmScheduled(Lcom/android/server/alarm/Alarm;I)V
HSPLcom/android/server/alarm/UserWakeupStore;->getNextWakeupTime()J+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
+HSPLcom/android/server/alarm/UserWakeupStore;->getUserIdsToWakeup(J)[I+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
HSPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/server/am/ActiveServices$ProcessAnrTimer;->getPid(Lcom/android/server/am/ProcessRecord;)I+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ActiveServices$ProcessAnrTimer;->getPid(Ljava/lang/Object;)I+]Lcom/android/server/am/ActiveServices$ProcessAnrTimer;Lcom/android/server/am/ActiveServices$ProcessAnrTimer;
@@ -335,7 +340,7 @@
HSPLcom/android/server/am/ActiveServices;->stopServiceAndUpdateAllowlistManagerLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;
HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Lcom/android/server/am/ServiceRecord;Z)V+]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;
-HPLcom/android/server/am/ActiveServices;->stopServiceTokenLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z+]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ActiveServices;->stopServiceTokenLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z+]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ActiveServices;->traceInstant(Ljava/lang/String;Lcom/android/server/am/ServiceRecord;)V
HPLcom/android/server/am/ActiveServices;->unbindFinishedLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;)V+]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ActiveServices;->unbindServiceLocked(Landroid/app/IServiceConnection;)Z+]Landroid/app/IServiceConnection;Landroid/app/IServiceConnection$Stub$Proxy;,Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -357,14 +362,15 @@
HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentUserId()I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
HSPLcom/android/server/am/ActivityManagerService$LocalService;->getRestrictionLevel(I)I
HSPLcom/android/server/am/ActivityManagerService$LocalService;->getUidProcessState(I)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Ljava/lang/String;I)Z
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppStartModeDisabled(ILjava/lang/String;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAssociatedCompanionApp(II)Z+]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/ArraySet;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->isAssociatedCompanionApp(II)Z+]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBgAutoRestrictedBucketFeatureFlagEnabled()Z
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isDeviceOwner(I)Z
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isPendingTopUid(I)Z
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isProfileOwner(I)Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->isTempAllowlistedForFgsWhileInUse(I)Z+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isTempAllowlistedForFgsWhileInUse(I)Z+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
HSPLcom/android/server/am/ActivityManagerService$LocalService;->isUidActive(I)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HSPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V
HSPLcom/android/server/am/ActivityManagerService$LocalService;->onUidBlockedReasonsChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
@@ -372,24 +378,25 @@
HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempAllowlist([IIZJIILjava/lang/String;I)V+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/am/ActivityManagerService$MainHandler;->$r8$lambda$-BaOH0nhWmB1j4fAdRCLVwJvRCA(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BindServiceEventListener;)V+]Landroid/app/ActivityManagerInternal$BindServiceEventListener;Lcom/android/server/am/AppBindServiceEventsTracker;
HSPLcom/android/server/am/ActivityManagerService$MainHandler;->$r8$lambda$bz9CTa7TXqawLiiOdBfpNP_dnbI(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BroadcastEventListener;)V+]Landroid/app/ActivityManagerInternal$BroadcastEventListener;Lcom/android/server/am/AppBroadcastEventsTracker;
-HSPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/app/IUiAutomationConnection;Landroid/app/IUiAutomationConnection$Stub$Proxy;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
HSPLcom/android/server/am/ActivityManagerService$PendingTempAllowlist;-><init>(IJILjava/lang/String;II)V
HSPLcom/android/server/am/ActivityManagerService$PidMap;->get(I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/ActivityManagerService$UiHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$Dp0egYYO_wvfUqcu1s5QAPQddjA([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ActivityManagerService;->addCreatorToken(Landroid/content/Intent;Ljava/lang/String;)V+]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/am/ActivityManagerService;->addErrorToDropBox(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/Float;Landroid/os/incremental/IncrementalMetrics;Ljava/util/UUID;Lcom/android/server/am/ActivityManagerService$VolatileDropboxEntryStates;)V+]Landroid/os/DropBoxManager;Landroid/os/DropBoxManager;]Landroid/os/incremental/IncrementalMetrics;Landroid/os/incremental/IncrementalMetrics;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;]Lcom/android/server/am/DropboxRateLimiter;Lcom/android/server/am/DropboxRateLimiter;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ActivityManagerService;->addPidLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
HSPLcom/android/server/am/ActivityManagerService;->addStartInfoTimestampInternal(IJII)V
HSPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;ZLjava/lang/String;)V+]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Lcom/android/server/am/ApplicationThreadDeferred;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->attachApplication(Landroid/app/IApplicationThread;J)V
HSPLcom/android/server/am/ActivityManagerService;->attachApplicationLocked(Landroid/app/IApplicationThread;IIJ)V+]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/autofill/AutofillManagerInternal;Lcom/android/server/autofill/AutofillManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;]Lcom/android/server/graphics/fonts/FontManagerInternal;Lcom/android/server/graphics/fonts/FontManagerService$Lifecycle$1;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ActivityManagerService;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;Ljava/lang/String;I)I
HSPLcom/android/server/am/ActivityManagerService;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;ZILjava/lang/String;Landroid/app/IApplicationThread;Ljava/lang/String;I)I+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HSPLcom/android/server/am/ActivityManagerService;->boostPriorityForLockedSection()V+]Lcom/android/server/ThreadPriorityBooster;Lcom/android/server/ThreadPriorityBooster;
HSPLcom/android/server/am/ActivityManagerService;->boostPriorityForProcLockedSection()V+]Lcom/android/server/ThreadPriorityBooster;Lcom/android/server/ThreadPriorityBooster;
HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I+]Lcom/android/server/am/BroadcastController;Lcom/android/server/am/BroadcastController;
-HPLcom/android/server/am/ActivityManagerService;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
+HSPLcom/android/server/am/ActivityManagerService;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
HSPLcom/android/server/am/ActivityManagerService;->checkCallingPermission(Ljava/lang/String;)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HSPLcom/android/server/am/ActivityManagerService;->checkComponentPermission(Ljava/lang/String;IIIIZ)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/am/ActivityManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
@@ -434,8 +441,9 @@
HSPLcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;[I)Z+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueImpl;,Lcom/android/server/am/BroadcastQueueModernImpl;
HSPLcom/android/server/am/ActivityManagerService;->isSingleton(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Z
HSPLcom/android/server/am/ActivityManagerService;->isUidActiveLOSP(I)Z
+HPLcom/android/server/am/ActivityManagerService;->lambda$checkExcessivePowerUsage$22(JJZZLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->logStrictModeViolationToDropBox(Lcom/android/server/am/ProcessRecord;Landroid/os/StrictMode$ViolationInfo;)V
HSPLcom/android/server/am/ActivityManagerService;->maybeSendBootCompletedLocked(Lcom/android/server/am/ProcessRecord;Z)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
-HSPLcom/android/server/am/ActivityManagerService;->noteUidProcessState(III)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/stats/pull/StatsPullAtomServiceInternal;Lcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomServiceInternalImpl;
HSPLcom/android/server/am/ActivityManagerService;->notifyPackageUse(Ljava/lang/String;I)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HPLcom/android/server/am/ActivityManagerService;->onProcessFreezableChangedLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueImpl;,Lcom/android/server/am/BroadcastQueueModernImpl;
HSPLcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -457,7 +465,7 @@
HSPLcom/android/server/am/ActivityManagerService;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
HSPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
HPLcom/android/server/am/ActivityManagerService;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)I+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActivityManagerService;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
+HSPLcom/android/server/am/ActivityManagerService;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
HSPLcom/android/server/am/ActivityManagerService;->tempAllowlistUidLocked(IJILjava/lang/String;II)V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
HSPLcom/android/server/am/ActivityManagerService;->traceBegin(JLjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(ZI)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -473,6 +481,7 @@
HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)V+]Ljava/io/File;Ljava/io/File;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->getExitInfosLocked(IILjava/util/List;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/am/AppExitInfoTracker$KillHandler;->handleMessage(Landroid/os/Message;)V
HSPLcom/android/server/am/AppExitInfoTracker;->forEachPackageLocked(Ljava/util/function/BiFunction;)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Ljava/util/function/BiFunction;Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda10;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda14;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda16;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda6;
HSPLcom/android/server/am/AppExitInfoTracker;->getExitInfo(Ljava/lang/String;IIILjava/util/List;)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppExitInfoTracker;->lambda$updateExitInfoIfNecessaryLocked$2(II[ZLjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -491,7 +500,7 @@
HSPLcom/android/server/am/AppProfiler;->$r8$lambda$O0KXijwG7-p0M_PB8ZuTBcOSGho(Lcom/android/server/am/ProcessRecord;)V+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HPLcom/android/server/am/AppProfiler;->collectRssInBackground()V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppProfiler;->isLastMemoryLevelNormal()Z
-HPLcom/android/server/am/AppProfiler;->isProfilingPss()Z
+HSPLcom/android/server/am/AppProfiler;->isProfilingPss()Z
HPLcom/android/server/am/AppProfiler;->recordRssSampleLPf(Lcom/android/server/am/ProcessProfileRecord;IJIJJ)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
HPLcom/android/server/am/AppProfiler;->requestPssLPf(Lcom/android/server/am/ProcessProfileRecord;I)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppProfiler;->setupProfilerInfoLocked(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActiveInstrumentation;)Landroid/app/ProfilerInfo;+]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/am/AppProfiler$ProfileData;Lcom/android/server/am/AppProfiler$ProfileData;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -499,20 +508,23 @@
HSPLcom/android/server/am/AppProfiler;->updateLowMemStateLSP(IIIJ)V+]Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
HSPLcom/android/server/am/AppProfiler;->updateNextPssTimeLPf(ILcom/android/server/am/ProcessProfileRecord;JZ)V+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
HSPLcom/android/server/am/AppRestrictionController$BgHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;
-HSPLcom/android/server/am/AppRestrictionController$Injector;->getActivityManagerService()Lcom/android/server/am/ActivityManagerService;
HSPLcom/android/server/am/AppRestrictionController$Injector;->getAppStandbyInternal()Lcom/android/server/usage/AppStandbyInternal;
HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;->update(III)I
HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->forEachPackageInUidLocked(ILcom/android/internal/util/function/TriConsumer;)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/internal/util/function/TriConsumer;Lcom/android/server/am/AppRestrictionController$$ExternalSyntheticLambda3;
HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->getRestrictionLevel(I)I+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
+HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->loadOneFromXml(Lcom/android/modules/utils/TypedXmlPullParser;J[JZ)V+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
HSPLcom/android/server/am/AppRestrictionController;->applyRestrictionLevel(Ljava/lang/String;IILcom/android/server/am/AppRestrictionController$TrackerInfo;IZII)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
HSPLcom/android/server/am/AppRestrictionController;->calcAppRestrictionLevel(IILjava/lang/String;IZZ)Landroid/util/Pair;+]Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/apphibernation/AppHibernationManagerInternal;Lcom/android/server/apphibernation/AppHibernationService$LocalService;
HSPLcom/android/server/am/AppRestrictionController;->getBackgroundRestrictionExemptionReason(I)I+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;
HSPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(I)I+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
-HSPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(ILjava/lang/String;)I+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
-HSPLcom/android/server/am/AppRestrictionController;->getPotentialUserAllowedExemptionReason(ILjava/lang/String;)I+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;
-HSPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
-HSPLcom/android/server/am/AppRestrictionController;->isOnDeviceIdleAllowlist(I)Z
+HPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(ILjava/lang/String;)I+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
+HPLcom/android/server/am/AppRestrictionController;->getPotentialUserAllowedExemptionReason(ILjava/lang/String;)I+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;
+HSPLcom/android/server/am/AppRestrictionController;->handleUidInactive(IZ)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/AppRestrictionController;->isBgAutoRestrictedBucketFeatureFlagEnabled()Z
+HPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
+HPLcom/android/server/am/AppRestrictionController;->isOnDeviceIdleAllowlist(I)Z
HSPLcom/android/server/am/AppRestrictionController;->isOnSystemDeviceIdleAllowlist(I)Z
+HPLcom/android/server/am/AppRestrictionController;->isSystemModule(Ljava/lang/String;)Z+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Ljava/io/File;Ljava/io/File;]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/am/AppRestrictionController;->refreshAppRestrictionLevelForUser(III)V
HSPLcom/android/server/am/AppStartInfoTracker$AppStartInfoContainer;->addStartInfoLocked(Landroid/app/ApplicationStartInfo;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppStartInfoTracker$AppStartInfoContainer;->addTimestampToStartLocked(IJ)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -521,19 +533,18 @@
HPLcom/android/server/am/AppStartInfoTracker$AppStartInfoContainer;->writeToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/AppStartInfoTracker;->addBaseFieldsFromProcessRecord(Landroid/app/ApplicationStartInfo;Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/AppStartInfoTracker;->addStartInfoLocked(Landroid/app/ApplicationStartInfo;)Landroid/app/ApplicationStartInfo;+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
+HSPLcom/android/server/am/AppStartInfoTracker;->addTimestampToStart(Lcom/android/server/am/ProcessRecord;JI)V
HSPLcom/android/server/am/AppStartInfoTracker;->addTimestampToStart(Ljava/lang/String;IJI)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
HSPLcom/android/server/am/ApplicationThreadDeferred;-><init>(Landroid/app/IApplicationThread;Z)V
HSPLcom/android/server/am/ApplicationThreadDeferred;->asBinder()Landroid/os/IBinder;+]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;,Landroid/app/IApplicationThread$Stub$Proxy;
-HSPLcom/android/server/am/BaseAppStateEvents;->getEarliest(J)J+]Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;Lcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;,Lcom/android/server/am/AppBroadcastEventsTracker$AppBroadcastEventsPolicy;,Lcom/android/server/am/AppFGSTracker$AppFGSPolicy;,Lcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;
-HSPLcom/android/server/am/BaseAppStateEvents;->getTotalEvents(JI)I+]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;
+HPLcom/android/server/am/BaseAppStateEvents;->getEarliest(J)J+]Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;Lcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;,Lcom/android/server/am/AppBroadcastEventsTracker$AppBroadcastEventsPolicy;,Lcom/android/server/am/AppFGSTracker$AppFGSPolicy;,Lcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;
HSPLcom/android/server/am/BaseAppStateEventsTracker$BaseAppStateEventsPolicy;->getMaxTrackingDuration()J
HSPLcom/android/server/am/BaseAppStateEventsTracker;->isUidOnTop(I)Z
-HSPLcom/android/server/am/BaseAppStatePolicy;->isEnabled()Z
HSPLcom/android/server/am/BaseAppStatePolicy;->shouldExemptUid(I)I
-HSPLcom/android/server/am/BaseAppStateTimeSlotEvents;->addEvent(JI)V+]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/LinkedList;Ljava/util/LinkedList;
-HSPLcom/android/server/am/BaseAppStateTimeSlotEvents;->getTotalEventsSince(JJI)I+]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/Iterator;Ljava/util/LinkedList$DescendingIterator;]Ljava/util/LinkedList;Ljava/util/LinkedList;
-HSPLcom/android/server/am/BaseAppStateTimeSlotEvents;->trimEvents(JI)V+]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/LinkedList;Ljava/util/LinkedList;
-HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getNumOfEventsThreshold()I
+HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->addEvent(JI)V+]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/LinkedList;Ljava/util/LinkedList;
+HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->getTotalEventsSince(JJI)I+]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/Iterator;Ljava/util/LinkedList$DescendingIterator;]Ljava/util/LinkedList;Ljava/util/LinkedList;
+HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->trimEvents(JI)V+]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/LinkedList;Ljava/util/LinkedList;
+HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getNumOfEventsThreshold()I
HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->shouldExempt(Ljava/lang/String;I)I+]Lcom/android/server/am/BaseAppStateEventsTracker;Lcom/android/server/am/AppBindServiceEventsTracker;,Lcom/android/server/am/AppBroadcastEventsTracker;]Lcom/android/server/am/BaseAppStatePolicy;Lcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;,Lcom/android/server/am/AppBroadcastEventsTracker$AppBroadcastEventsPolicy;
HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$H;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker;Lcom/android/server/am/AppBindServiceEventsTracker;,Lcom/android/server/am/AppBroadcastEventsTracker;
HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->handleNewEvent(Ljava/lang/String;I)V+]Lcom/android/server/am/BaseAppStateEvents$Factory;Lcom/android/server/am/AppBindServiceEventsTracker;,Lcom/android/server/am/AppBroadcastEventsTracker;]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;Lcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;,Lcom/android/server/am/AppBroadcastEventsTracker$AppBroadcastEventsPolicy;]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
@@ -542,25 +553,25 @@
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda104;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda11;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda16;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IZJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda1;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda25;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda25;->run()V
HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda29;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda29;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda31;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda31;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda34;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda34;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda34;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda58;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda58;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IIJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda73;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;IJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda73;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda76;->run()V
@@ -570,8 +581,8 @@
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;->run()V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IJJ)V
HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda9;->run()V
+HSPLcom/android/server/am/BatteryStatsService$LocalService;->getOwnerUid(I)I+]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;
HPLcom/android/server/am/BatteryStatsService$StatsPerUidLogger;->addStatsForPowerComponent(Ljava/util/List;Lcom/android/server/am/BatteryStatsService$StatsPerUidLogger$SessionInfo;IIFJLandroid/os/BatteryConsumer;I)Z+]Landroid/os/BatteryConsumer;Landroid/os/AggregateBatteryConsumer;,Landroid/os/UidBatteryConsumer;
-HPLcom/android/server/am/BatteryStatsService$StatsPerUidLogger;->clampPowerMah(DLjava/lang/String;)F
HPLcom/android/server/am/BatteryStatsService$StatsPerUidLogger;->logStats(Landroid/os/BatteryUsageStats;Ljava/util/List;)I+]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->run()V
HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->waitWakeup()Ljava/lang/String;+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
@@ -580,10 +591,11 @@
HSPLcom/android/server/am/BatteryStatsService;->getSubsystemLowPowerStats()Ljava/lang/String;+]Landroid/power/PowerStatsInternal;Lcom/android/server/powerstats/PowerStatsService$LocalService;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;
HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartLaunch$107(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartRunning$105(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopLaunch$108(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopLaunch$108(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartWakelock$24(IILjava/lang/String;Ljava/lang/String;IZJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelock$25(IILjava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/am/BatteryStatsService;->lambda$noteUidProcessState$14(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats;Lcom/android/server/power/stats/wakeups/CpuWakeupStats;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$97(IIIIIIIIJJJJ)V+]Lcom/android/server/power/stats/BatteryExternalStatsWorker;Lcom/android/server/power/stats/BatteryExternalStatsWorker;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HPLcom/android/server/am/BatteryStatsService;->monitor()V
HSPLcom/android/server/am/BatteryStatsService;->noteAlarmFinish(Ljava/lang/String;Landroid/os/WorkSource;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
HSPLcom/android/server/am/BatteryStatsService;->noteAlarmStart(Ljava/lang/String;Landroid/os/WorkSource;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
@@ -594,7 +606,7 @@
HSPLcom/android/server/am/BatteryStatsService;->noteServiceStartLaunch(ILjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/am/BatteryStatsService;->noteServiceStartRunning(ILjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/am/BatteryStatsService;->noteServiceStopLaunch(ILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/am/BatteryStatsService;->noteServiceStopRunning(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/BatteryStatsService;->noteServiceStopRunning(ILjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V
HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelock(IILjava/lang/String;Ljava/lang/String;IZ)V
HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
@@ -613,12 +625,13 @@
HSPLcom/android/server/am/BroadcastController$1;->newResult(Lcom/android/server/pm/Computer;Lcom/android/server/am/BroadcastFilter;IIJ)Lcom/android/server/am/BroadcastFilter;
HSPLcom/android/server/am/BroadcastController$1;->newResult(Lcom/android/server/pm/Computer;Ljava/lang/Object;IIJ)Ljava/lang/Object;+]Lcom/android/server/am/BroadcastController$1;Lcom/android/server/am/BroadcastController$1;
HSPLcom/android/server/am/BroadcastController;->addBroadcastStatLocked(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/am/BroadcastController;->broadcastIntentInPackage(Ljava/lang/String;Ljava/lang/String;IIILandroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZILandroid/app/BackgroundStartPrivileges;[I)I
HSPLcom/android/server/am/BroadcastController;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIIILandroid/app/BackgroundStartPrivileges;[ILjava/util/function/BiFunction;)I
HSPLcom/android/server/am/BroadcastController;->broadcastIntentLockedTraced(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/app/BroadcastOptions;ZZIIIIILandroid/app/BackgroundStartPrivileges;[ILjava/util/function/BiFunction;Lcom/android/server/am/BroadcastSentEventRecord;)I+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/IIntentReceiver;megamorphic_types]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/IntentResolver;Lcom/android/server/am/BroadcastController$1;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueImpl;,Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/am/BroadcastController;->broadcastIntentWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastController;Lcom/android/server/am/BroadcastController;
HSPLcom/android/server/am/BroadcastController;->checkBroadcastFromSystem(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;IZLjava/util/List;)V+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/am/BroadcastController;->collectReceiverComponents(Landroid/content/Intent;Ljava/lang/String;II[I[I)Ljava/util/List;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
-HSPLcom/android/server/am/BroadcastController;->enforceBroadcastOptionPermissionsInternal(Landroid/app/BroadcastOptions;I)V+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastController;->enforceBroadcastOptionPermissionsInternal(Landroid/app/BroadcastOptions;I)V+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
HSPLcom/android/server/am/BroadcastController;->enforceBroadcastOptionPermissionsInternal(Landroid/os/Bundle;I)V
HSPLcom/android/server/am/BroadcastController;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueImpl;,Lcom/android/server/am/BroadcastQueueModernImpl;
HSPLcom/android/server/am/BroadcastController;->getBackgroundLaunchBroadcasts()Landroid/util/ArraySet;
@@ -628,13 +641,13 @@
HSPLcom/android/server/am/BroadcastController;->notifyBroadcastFinishedLocked(Lcom/android/server/am/BroadcastRecord;)V
HSPLcom/android/server/am/BroadcastController;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
HSPLcom/android/server/am/BroadcastController;->registerReceiverWithFeatureTraced(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;,Landroid/app/IApplicationThread$Stub$Proxy;,Lcom/android/server/am/ApplicationThreadDeferred;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/IntentResolver;Lcom/android/server/am/BroadcastController$1;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueImpl;,Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/sdksandbox/SdkSandboxManagerLocal;Lcom/android/server/sdksandbox/SdkSandboxManagerService$LocalImpl;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HPLcom/android/server/am/BroadcastController;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/IntentResolver;Lcom/android/server/am/BroadcastController$1;]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLcom/android/server/am/BroadcastController;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/IntentResolver;Lcom/android/server/am/BroadcastController$1;]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/am/BroadcastController;->rotateBroadcastStatsIfNeededLocked()V
HSPLcom/android/server/am/BroadcastController;->traceBroadcastIntentBegin(Landroid/content/Intent;Landroid/content/IIntentReceiver;ZZIII)I+]Landroid/content/Intent;Landroid/content/Intent;
HSPLcom/android/server/am/BroadcastController;->traceBroadcastIntentEnd(I)V
HSPLcom/android/server/am/BroadcastController;->traceRegistrationBegin(Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;I)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;
-HPLcom/android/server/am/BroadcastController;->traceUnregistrationBegin(Landroid/content/IIntentReceiver;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;
-HPLcom/android/server/am/BroadcastController;->unregisterReceiverTraced(Landroid/content/IIntentReceiver;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/am/BroadcastController;Lcom/android/server/am/BroadcastController;]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLcom/android/server/am/BroadcastController;->traceUnregistrationBegin(Landroid/content/IIntentReceiver;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;
+HSPLcom/android/server/am/BroadcastController;->unregisterReceiverTraced(Landroid/content/IIntentReceiver;)V+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/am/BroadcastController;Lcom/android/server/am/BroadcastController;]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/am/BroadcastController;->verifyBroadcastLocked(Landroid/content/Intent;)Landroid/content/Intent;+]Landroid/content/Intent;Landroid/content/Intent;
HSPLcom/android/server/am/BroadcastFilter;-><init>(Landroid/content/IntentFilter;Lcom/android/server/am/ReceiverList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZZZLandroid/content/pm/ApplicationInfo;Lcom/android/server/compat/PlatformCompat;)V
HSPLcom/android/server/am/BroadcastFilter;->calculateAdjustedPriority(IILandroid/content/pm/ApplicationInfo;Lcom/android/server/compat/PlatformCompat;)I+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
@@ -799,13 +812,16 @@
HPLcom/android/server/am/CachedAppOptimizer;->compactApp(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/CachedAppOptimizer$CompactProfile;Lcom/android/server/am/CachedAppOptimizer$CompactSource;Z)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/am/CachedAppOptimizer;->freezeAppAsyncInternalLSP(Lcom/android/server/am/ProcessRecord;JZ)V+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HPLcom/android/server/am/CachedAppOptimizer;->getPerProcessAggregatedCompactStat(Ljava/lang/String;)Lcom/android/server/am/CachedAppOptimizer$AggregatedProcessCompactionStats;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
+HPLcom/android/server/am/CachedAppOptimizer;->getPerSourceAggregatedCompactStat(Lcom/android/server/am/CachedAppOptimizer$CompactSource;)Lcom/android/server/am/CachedAppOptimizer$AggregatedSourceCompactionStats;+]Ljava/util/EnumMap;Ljava/util/EnumMap;
HPLcom/android/server/am/CachedAppOptimizer;->lambda$binderErrorInternal$3(Ljava/lang/Integer;Ljava/lang/Integer;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
+HSPLcom/android/server/am/CachedAppOptimizer;->onCleanupApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/CachedAppOptimizer;->onOomAdjustChanged(IILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
HPLcom/android/server/am/CachedAppOptimizer;->onProcessFrozen(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HPLcom/android/server/am/CachedAppOptimizer;->postUidFrozenMessage(IZ)V
HPLcom/android/server/am/CachedAppOptimizer;->traceAppFreeze(Ljava/lang/String;II)V
HPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppInternalLSP(Lcom/android/server/am/ProcessRecord;IZ)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/Freezer;Lcom/android/server/am/Freezer;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppLSP(Lcom/android/server/am/ProcessRecord;IZ)V
+HPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;I)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
HPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;IJ)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
HPLcom/android/server/am/CachedAppOptimizer;->updateEarliestFreezableTime(Lcom/android/server/am/ProcessRecord;J)J
HSPLcom/android/server/am/CachedAppOptimizer;->useCompaction()Z
@@ -826,7 +842,7 @@
HSPLcom/android/server/am/ContentProviderConnection;-><init>(Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)V
HSPLcom/android/server/am/ContentProviderConnection;->adjustCounts(II)V
HPLcom/android/server/am/ContentProviderConnection;->decrementCount(Z)I
-HPLcom/android/server/am/ContentProviderConnection;->incrementCount(Z)I
+HSPLcom/android/server/am/ContentProviderConnection;->incrementCount(Z)I
HSPLcom/android/server/am/ContentProviderConnection;->initializeCount(Z)V
HSPLcom/android/server/am/ContentProviderConnection;->startAssociationIfNeeded()V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HPLcom/android/server/am/ContentProviderConnection;->stopAssociation()V
@@ -859,10 +875,10 @@
HSPLcom/android/server/am/ContentProviderRecord;->canRunHere(Lcom/android/server/am/ProcessRecord;)Z
HSPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
HSPLcom/android/server/am/ContentProviderRecord;->newHolder(Lcom/android/server/am/ContentProviderConnection;Z)Landroid/app/ContentProviderHolder;
-HSPLcom/android/server/am/ContentProviderRecord;->onProviderPublishStatusLocked(Z)V+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/am/EventLogTags;->writeAmPss(IILjava/lang/String;JJJJIIJ)V
HSPLcom/android/server/am/FgsTempAllowList;->add(IJLjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/am/FgsTempAllowList;->get(I)Landroid/util/Pair;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/am/FgsTempAllowList;->isAllowed(I)Z+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
+HSPLcom/android/server/am/FgsTempAllowList;->isAllowed(I)Z+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeUid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats;Landroid/os/BatteryStats$Uid;)V+]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;]Landroid/os/BatteryStats$Uid$Wakelock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/HealthStatsBatteryStatsWriter;Lcom/android/server/am/HealthStatsBatteryStatsWriter;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
@@ -880,7 +896,7 @@
HPLcom/android/server/am/OomAdjuster;->collectReachableProcessesLocked(Landroid/util/ArraySet;Ljava/util/ArrayList;Lcom/android/server/am/ActiveUids;)Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/OomAdjuster;->computeOomAdjLSP(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJZZIZ)Z+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/OomAdjuster;->computeProviderHostOomAdjLSP(Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;JLcom/android/server/am/ProcessRecord;ZZZIIZZ)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HSPLcom/android/server/am/OomAdjuster;->computeServiceHostOomAdjLSP(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;JLcom/android/server/am/ProcessRecord;ZZZIIZZ)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;
+HSPLcom/android/server/am/OomAdjuster;->computeServiceHostOomAdjLSP(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;JLcom/android/server/am/ProcessRecord;ZZZIIZZ)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/OomAdjuster;->enqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)V
HSPLcom/android/server/am/OomAdjuster;->enqueuePendingTopAppIfNecessaryLSP()I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
HSPLcom/android/server/am/OomAdjuster;->evaluateConnectionPrelude(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
@@ -896,12 +912,12 @@
HSPLcom/android/server/am/OomAdjuster;->isBackupProcess(Lcom/android/server/am/ProcessRecord;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/am/OomAdjuster;->isDeviceFullyAwake()Z
HSPLcom/android/server/am/OomAdjuster;->lambda$new$0(Landroid/os/Message;)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/OomAdjuster;->maybeSetProcessFollowUpUpdateLocked(Lcom/android/server/am/ProcessRecord;JJ)V
+HSPLcom/android/server/am/OomAdjuster;->maybeSetProcessFollowUpUpdateLocked(Lcom/android/server/am/ProcessRecord;JJ)V
HSPLcom/android/server/am/OomAdjuster;->maybeUpdateLastTopTime(Lcom/android/server/am/ProcessStateRecord;J)V
HSPLcom/android/server/am/OomAdjuster;->maybeUpdateUsageStatsLSP(Lcom/android/server/am/ProcessRecord;J)V+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/OomAdjuster;->oomAdjReasonToString(I)Ljava/lang/String;
HSPLcom/android/server/am/OomAdjuster;->postUpdateOomAdjInnerLSP(ILcom/android/server/am/ActiveUids;JJJZ)V+]Lcom/android/server/am/OomAdjuster$Injector;Lcom/android/server/am/OomAdjuster$Injector;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;
-HPLcom/android/server/am/OomAdjuster;->scheduleFollowUpOomAdjusterUpdateLocked(JJ)V
+HSPLcom/android/server/am/OomAdjuster;->scheduleFollowUpOomAdjusterUpdateLocked(JJ)V
HSPLcom/android/server/am/OomAdjuster;->setAttachingProcessStatesLSP(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/OomAdjuster$Injector;Lcom/android/server/am/OomAdjuster$Injector;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/OomAdjuster;->setIntermediateAdjLSP(Lcom/android/server/am/ProcessRecord;III)I
HSPLcom/android/server/am/OomAdjuster;->setIntermediateProcStateLSP(Lcom/android/server/am/ProcessRecord;II)V
@@ -962,16 +978,17 @@
HSPLcom/android/server/am/PackageList;->forEachPackage(Ljava/util/function/BiConsumer;)V+]Ljava/util/function/BiConsumer;Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda1;
HSPLcom/android/server/am/PackageList;->getPackageList()[Ljava/lang/String;
HSPLcom/android/server/am/PackageList;->searchEachPackage(Ljava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;Lcom/android/server/am/ContentProviderHelper$$ExternalSyntheticLambda2;
-HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
-HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Lcom/android/server/am/PendingIntentRecord;ZI)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Ljava/util/HashMap;Ljava/util/HashMap;
-HSPLcom/android/server/am/PendingIntentController;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
+HSPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Lcom/android/server/am/PendingIntentRecord;ZI)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLcom/android/server/am/PendingIntentController;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/am/PendingIntentController;->getIntentSender(ILjava/lang/String;Ljava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Lcom/android/server/am/PendingIntentRecord;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/HashMap;Ljava/util/HashMap;
-HSPLcom/android/server/am/PendingIntentController;->incrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;
-HPLcom/android/server/am/PendingIntentController;->makeIntentSenderCanceled(Lcom/android/server/am/PendingIntentRecord;I)V+]Lcom/android/server/AlarmManagerInternal;Lcom/android/server/alarm/AlarmManagerService$LocalService;
+HSPLcom/android/server/am/PendingIntentController;->incrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/am/PendingIntentController;->makeIntentSenderCanceled(Lcom/android/server/am/PendingIntentRecord;I)V+]Lcom/android/server/AlarmManagerInternal;Lcom/android/server/alarm/AlarmManagerService$LocalService;
HSPLcom/android/server/am/PendingIntentRecord$Key;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILcom/android/server/wm/SafeActivityOptions;I)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/os/IBinder;Lcom/android/server/wm/ActivityRecord$Token;
HSPLcom/android/server/am/PendingIntentRecord$Key;->equals(Ljava/lang/Object;)Z+]Landroid/content/Intent;Landroid/content/Intent;
HSPLcom/android/server/am/PendingIntentRecord$Key;->hashCode()I
HSPLcom/android/server/am/PendingIntentRecord;-><init>(Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentRecord$Key;I)V
+HSPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Ljava/util/HashMap;Ljava/util/HashMap;
HPLcom/android/server/am/PendingIntentRecord;->getBackgroundStartPrivilegesForActivitySender(Landroid/util/ArraySet;Landroid/os/IBinder;Landroid/os/Bundle;I)Landroid/app/BackgroundStartPrivileges;+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
HPLcom/android/server/am/PendingIntentRecord;->sendInner(Landroid/app/IApplicationThread;ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Landroid/content/IIntentReceiver;Landroid/app/PendingIntent$FinishedDispatcher;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/wm/SafeActivityOptions;Lcom/android/server/wm/SafeActivityOptions;
HSPLcom/android/server/am/PendingStartActivityUids;->delete(IJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -992,6 +1009,7 @@
HSPLcom/android/server/am/ProcessErrorStateRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
HSPLcom/android/server/am/ProcessErrorStateRecord;->isCrashing()Z
HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
+HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda1;->run()V
HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda5;->run()V
HSPLcom/android/server/am/ProcessList$MyProcessMap;->put(Ljava/lang/String;ILcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
@@ -1010,6 +1028,7 @@
HSPLcom/android/server/am/ProcessList;->getMemLevel(I)J
HSPLcom/android/server/am/ProcessList;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
HSPLcom/android/server/am/ProcessList;->getNumForegroundServices()Landroid/util/Pair;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ProcessList;->getPackageAppDataInfoMap(Landroid/content/pm/PackageManagerInternal;[Ljava/lang/String;I)Ljava/util/Map;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/am/ProcessList;->getProcessRecordLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/am/ProcessList;->getRunningAppProcessesLOSP(ZIZII)Ljava/util/List;+]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ProcessList;->getUidProcStateLOSP(I)I
@@ -1025,6 +1044,7 @@
HSPLcom/android/server/am/ProcessList;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ProcessList;->removeProcessNameLocked(Ljava/lang/String;ILcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ProcessList;->searchEachLruProcessesLOSP(ZLjava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Function;Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda1;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda6;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda7;
+HPLcom/android/server/am/ProcessList;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ProcessList;->startProcess(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Landroid/os/Process$ProcessStartResult;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/os/AppZygote;Landroid/os/AppZygote;]Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJ)Z+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;IZZLjava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/os/storage/StorageManagerInternal;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -1054,6 +1074,7 @@
HSPLcom/android/server/am/ProcessReceiverRecord;->numberOfReceivers()I
HSPLcom/android/server/am/ProcessRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ProcessRecord;->addPackage(Ljava/lang/String;JLcom/android/server/am/ProcessStatsService;)Z
+HSPLcom/android/server/am/ProcessRecord;->forEachConnectionHost(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda13;,Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda14;
HSPLcom/android/server/am/ProcessRecord;->getActiveInstrumentation()Lcom/android/server/am/ActiveInstrumentation;
HSPLcom/android/server/am/ProcessRecord;->getHostingRecord()Lcom/android/server/am/HostingRecord;
HSPLcom/android/server/am/ProcessRecord;->getLastActivityTime()J
@@ -1071,6 +1092,7 @@
HSPLcom/android/server/am/ProcessRecord;->getUidRecord()Lcom/android/server/am/UidRecord;
HSPLcom/android/server/am/ProcessRecord;->getWaitingToKill()Ljava/lang/String;
HSPLcom/android/server/am/ProcessRecord;->getWindowProcessController()Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/am/ProcessRecord;->hasActiveInstrumentation()Z
HSPLcom/android/server/am/ProcessRecord;->hasActivities()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessRecord;->hasActivitiesOrRecentTasks()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessRecord;->isCached()Z
@@ -1085,8 +1107,8 @@
HPLcom/android/server/am/ProcessRecord;->killLocked(Ljava/lang/String;Ljava/lang/String;IIZZ)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ProcessRecord;->makeActive(Lcom/android/server/am/ApplicationThreadDeferred;Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessRecord;->onCleanupApplicationRecordLSP(Lcom/android/server/am/ProcessStatsService;ZZ)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjusterModernImpl;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessStateController;Lcom/android/server/am/ProcessStateController;
-HPLcom/android/server/am/ProcessRecord;->onProcessUnfrozen()V
HSPLcom/android/server/am/ProcessRecord;->removeBackgroundStartPrivileges(Landroid/os/Binder;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/am/ProcessRecord;->resetPackageList(Lcom/android/server/am/ProcessStatsService;)V
HSPLcom/android/server/am/ProcessRecord;->setBackgroundStartPrivileges(Landroid/os/Binder;Landroid/app/BackgroundStartPrivileges;)V
HSPLcom/android/server/am/ProcessRecord;->setLastActivityTime(J)V
HSPLcom/android/server/am/ProcessRecord;->setLruSeq(I)V
@@ -1094,7 +1116,7 @@
HSPLcom/android/server/am/ProcessRecord;->toShortString(Ljava/lang/StringBuilder;)V
HSPLcom/android/server/am/ProcessRecord;->toString()Ljava/lang/String;+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/ProcessServiceRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUid(ILjava/lang/String;J)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+HPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUid(ILjava/lang/String;J)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUidsOfNewService(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/am/ProcessServiceRecord;->addConnection(Lcom/android/server/am/ConnectionRecord;)V
HSPLcom/android/server/am/ProcessServiceRecord;->addSdkSandboxConnectionIfNecessary(Lcom/android/server/am/ConnectionRecord;)V
@@ -1145,6 +1167,7 @@
HSPLcom/android/server/am/ProcessStateRecord;->getCachedIsHomeProcess()Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessStateRecord;->getCachedIsPreviousProcess()Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/am/ProcessStateRecord;->getCachedIsReceivingBroadcast([I)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ProcessStateRecord;->getCurCapability()I
HSPLcom/android/server/am/ProcessStateRecord;->getCurProcState()I
HSPLcom/android/server/am/ProcessStateRecord;->getSetAdj()I
HSPLcom/android/server/am/ProcessStateRecord;->getSetProcState()I
@@ -1208,7 +1231,6 @@
HSPLcom/android/server/am/UidProcessMap;->get(ILjava/lang/String;)Ljava/lang/Object;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/am/UidRecord;-><init>(ILcom/android/server/am/ActivityManagerService;)V
HSPLcom/android/server/am/UidRecord;->areAllProcessesFrozen(Lcom/android/server/am/ProcessRecord;)Z
-HSPLcom/android/server/am/UidRecord;->forEachProcess(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;Lcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;,Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda3;
HSPLcom/android/server/am/UidRecord;->getMinProcAdj()I+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
HSPLcom/android/server/am/UserController$Injector;->getUserManager()Lcom/android/server/pm/UserManagerService;
HSPLcom/android/server/am/UserController;->exists(I)Z+]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
@@ -1258,13 +1280,14 @@
HSPLcom/android/server/appop/AppOpsService;->checkOperationRawForDevice(IILjava/lang/String;Ljava/lang/String;I)I
HSPLcom/android/server/appop/AppOpsService;->checkPackage(ILjava/lang/String;)I
HSPLcom/android/server/appop/AppOpsService;->collectAsyncNotedOp(ILjava/lang/String;ILjava/lang/String;ILjava/lang/String;ZI)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList$Builder$1;,Lcom/android/server/appop/AppOpsService$8;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/appop/AppOpsService;->collectOps(Lcom/android/server/appop/AppOpsService$Ops;[ILjava/lang/String;)Ljava/util/ArrayList;+]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/appop/AppOpsService;->doForAllAttributedOpsInUidLocked(ILjava/util/function/Consumer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda17;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda18;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda19;
+HSPLcom/android/server/appop/AppOpsService;->collectOps(Lcom/android/server/appop/AppOpsService$Ops;[ILjava/lang/String;)Ljava/util/ArrayList;+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Map;Landroid/util/ArrayMap;
+HPLcom/android/server/appop/AppOpsService;->doForAllAttributedOpsInUidLocked(ILjava/util/function/Consumer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda17;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda18;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda19;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda20;
HSPLcom/android/server/appop/AppOpsService;->enforceManageAppOpsModes(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/appop/AppOpsService;->filterAppAccessUnlocked(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HSPLcom/android/server/appop/AppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V
HSPLcom/android/server/appop/AppOpsService;->finishOperationImpl(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;I)V
HSPLcom/android/server/appop/AppOpsService;->finishOperationUnchecked(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/appop/AppOpsService;->getAppOpMode(IILjava/lang/String;Ljava/lang/String;IZZ)I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
HSPLcom/android/server/appop/AppOpsService;->getBypassforPackage(Lcom/android/server/pm/pkg/PackageState;)Landroid/app/AppOpsManager$RestrictionBypass;+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/appop/AppOpsService;->getOpLocked(IILjava/lang/String;Ljava/lang/String;ZLandroid/app/AppOpsManager$RestrictionBypass;Z)Lcom/android/server/appop/AppOpsService$Op;
HSPLcom/android/server/appop/AppOpsService;->getOpLocked(Lcom/android/server/appop/AppOpsService$Ops;IIZ)Lcom/android/server/appop/AppOpsService$Op;
@@ -1281,7 +1304,7 @@
HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedDueToSuspend(ILjava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;Ljava/lang/String;ILandroid/app/AppOpsManager$RestrictionBypass;Z)Z
HSPLcom/android/server/appop/AppOpsService;->isSpecialPackage(ILjava/lang/String;)Z
-HSPLcom/android/server/appop/AppOpsService;->isValidVirtualDeviceId(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;
+HSPLcom/android/server/appop/AppOpsService;->isValidVirtualDeviceId(I)Z
HSPLcom/android/server/appop/AppOpsService;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;
HSPLcom/android/server/appop/AppOpsService;->noteOperationImpl(IILjava/lang/String;Ljava/lang/String;IZLjava/lang/String;ZI)Landroid/app/SyncNotedAppOp;
HSPLcom/android/server/appop/AppOpsService;->noteOperationUnchecked(IILjava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;IIZLjava/lang/String;ZI)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
@@ -1293,12 +1316,11 @@
HSPLcom/android/server/appop/AppOpsService;->readAttributionOp(Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)V+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
HSPLcom/android/server/appop/AppOpsService;->readOp(Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;)V+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAsyncLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/appop/AppOpsService;->resolveUid(Ljava/lang/String;)I
HSPLcom/android/server/appop/AppOpsService;->scheduleOpActiveChangedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;IZII)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/appop/AppOpsService;->scheduleOpNotedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;III)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/appop/AppOpsService;->scheduleOpStartedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;IIIIII)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
-HPLcom/android/server/appop/AppOpsService;->setUidMode(IIILcom/android/internal/app/IAppOpsCallback;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
+HSPLcom/android/server/appop/AppOpsService;->setUidMode(IIILcom/android/internal/app/IAppOpsCallback;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
HSPLcom/android/server/appop/AppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;
HSPLcom/android/server/appop/AppOpsService;->startOperationImpl(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;IZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
HSPLcom/android/server/appop/AppOpsService;->startOperationUnchecked(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;IIZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
@@ -1306,16 +1328,15 @@
HSPLcom/android/server/appop/AppOpsService;->switchPackageIfBootTimeOrRarelyUsedLocked(Ljava/lang/String;)V+]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;
HPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/appop/AppOpsService;->updateUidProcState(III)V+]Lcom/android/server/appop/AppOpsUidStateTracker;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
-HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;
-HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/compat/IPlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/appop/AppOpsService;->verifyIncomingOp(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
HSPLcom/android/server/appop/AppOpsService;->verifyIncomingUid(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
HPLcom/android/server/appop/AppOpsService;->writeRecentAccesses()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Lcom/android/server/appop/AppOpsUidStateTracker$UidStateChangedCallback;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda12;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda13;
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Lcom/android/server/appop/AppOpsUidStateTracker$UidStateChangedCallback;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda12;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda13;,Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda14;
HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda1;->run()V
HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->execute(Ljava/lang/Runnable;)V
-HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->executeDelayed(Ljava/lang/Runnable;J)V
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->executeDelayed(Ljava/lang/Runnable;J)V
HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
@@ -1339,10 +1360,19 @@
HSPLcom/android/server/appop/AttributedOp;->createAttributedOpEntryLocked()Landroid/app/AppOpsManager$AttributedOpEntry;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
HSPLcom/android/server/appop/AttributedOp;->deepClone(Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
HSPLcom/android/server/appop/AttributedOp;->finishOrPause(Landroid/os/IBinder;ZZ)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/Pools$SimplePool;Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AttributedOp;->isRunning()Z
HSPLcom/android/server/appop/AttributedOp;->onUidStateChanged(I)V
HSPLcom/android/server/appop/AttributedOp;->rejected(II)V
HSPLcom/android/server/appop/AttributedOp;->rejected(JII)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
HSPLcom/android/server/appop/AttributedOp;->startedOrPaused(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIZZ)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;
+HSPLcom/android/server/appop/DiscreteOpsRegistry;->isDiscreteOp(II)Z
+HPLcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteDeviceOp;->addDiscreteAccess(Ljava/lang/String;IIJJII)V+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteOp;->getOrCreateDiscreteDeviceOp(Ljava/lang/String;)Lcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteDeviceOp;
+HPLcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteOps;->getOrCreateDiscreteUidOps(I)Lcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteUidOps;
+HPLcom/android/server/appop/DiscreteOpsXmlRegistry$DiscretePackageOps;->getOrCreateDiscreteOp(I)Lcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteOp;
+HPLcom/android/server/appop/DiscreteOpsXmlRegistry$DiscreteUidOps;->getOrCreateDiscretePackageOps(Ljava/lang/String;)Lcom/android/server/appop/DiscreteOpsXmlRegistry$DiscretePackageOps;
+HSPLcom/android/server/appop/DiscreteOpsXmlRegistry;->recordDiscreteAccess(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;IIJJIII)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->handlePersistHistoricalOpsRecursiveDLocked(Ljava/io/File;Ljava/io/File;Ljava/util/List;Ljava/util/Set;I)V+]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;,Ljava/util/LinkedList;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
@@ -1369,11 +1399,13 @@
HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->isBoundWidgetPackage(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z+]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupProviderLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->parseAppWidgetProviderInfo(Landroid/content/Context;Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/appwidget/AppWidgetProviderInfo;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Ljava/lang/CharSequence;Ljava/lang/String;
HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeProvider(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Z)V+]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->writeProfileStateToStreamLocked(Ljava/io/OutputStream;I)Z+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
HPLcom/android/server/appwidget/AppWidgetXmlUtil;->writeAppWidgetProviderInfoLocked(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/appwidget/AppWidgetProviderInfo;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HSPLcom/android/server/audio/AudioService$VolumeStreamState;->observeDevicesForStream_syncVSS(Z)Ljava/util/Set;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Lcom/android/server/audio/SystemServerAdapter;Lcom/android/server/audio/SystemServerAdapter;]Ljava/util/Set;Ljava/util/TreeSet;
+HSPLcom/android/server/audio/AudioService;->getDeviceForStream(I)I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
HSPLcom/android/server/audio/AudioService;->getDeviceSetForStream(I)Ljava/util/Set;+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
+HSPLcom/android/server/audio/AudioService;->getStreamVolume(II)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
HSPLcom/android/server/audio/AudioService;->getVssForStreamOrDefault(I)Lcom/android/server/audio/AudioService$VolumeStreamState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/audio/AudioService;->selectOneAudioDevice(Ljava/util/Set;)I+]Ljava/util/Iterator;Ljava/util/TreeMap$KeyIterator;]Ljava/util/Set;Ljava/util/TreeSet;
HSPLcom/android/server/audio/AudioSystemAdapter;->getDevicesForAttributesImpl(Landroid/media/AudioAttributes;Z)Ljava/util/ArrayList;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
@@ -1384,6 +1416,7 @@
HSPLcom/android/server/backup/BackupManagerService;->isUserReadyForBackup(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService;
HPLcom/android/server/backup/TransportManager;->getRegisteredTransportEntryLocked(Ljava/lang/String;)Ljava/util/Map$Entry;+]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
HPLcom/android/server/backup/TransportManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V+]Ljava/util/Map;Landroid/util/ArrayMap;
+HPLcom/android/server/backup/UserBackupManagerService;->dataChangedTargets(Ljava/lang/String;)Ljava/util/HashSet;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
HPLcom/android/server/backup/UserBackupManagerService;->isAppEligibleForBackup(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/TransportManager;]Lcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/utils/BackupEligibilityRules;
HPLcom/android/server/backup/UserBackupManagerService;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/TransportManager;
HPLcom/android/server/backup/transport/TransportConnection;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Landroid/content/Intent;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Handler;)V
@@ -1397,7 +1430,9 @@
HPLcom/android/server/backup/transport/TransportConnectionManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V+]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;]Ljava/util/Map;Ljava/util/WeakHashMap;
HPLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)Lcom/android/server/backup/transport/TransportConnection;+]Ljava/util/Map;Ljava/util/WeakHashMap;
HPLcom/android/server/backup/transport/TransportUtils;->formatMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsEligibleForBackup(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/utils/BackupEligibilityRules;]Ljava/util/Set;Ljava/util/HashSet;
HPLcom/android/server/backup/utils/SparseArrayUtils;->union(Landroid/util/SparseArray;)Ljava/util/HashSet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/biometrics/PreAuthInfo;->create(Landroid/app/trust/ITrustManager;Landroid/app/admin/DevicePolicyManager;Lcom/android/server/biometrics/BiometricService$SettingObserver;Ljava/util/List;ILandroid/hardware/biometrics/PromptInfo;Ljava/lang/String;ZLandroid/content/Context;Lcom/android/server/biometrics/BiometricCameraManager;Landroid/os/UserManager;)Lcom/android/server/biometrics/PreAuthInfo;+]Landroid/app/trust/ITrustManager;Lcom/android/server/trust/TrustManagerService$3;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/hardware/biometrics/PromptInfo;Landroid/hardware/biometrics/PromptInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/biometrics/BiometricService$SettingObserver;Lcom/android/server/biometrics/BiometricService$SettingObserver;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Ljava/util/List;Ljava/util/concurrent/CopyOnWriteArrayList;
HSPLcom/android/server/biometrics/sensors/BiometricServiceRegistry;->getProviderForSensor(I)Lcom/android/server/biometrics/sensors/BiometricServiceProvider;+]Lcom/android/server/biometrics/sensors/BiometricServiceProvider;Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForPackageForUser(Landroid/content/pm/PackageStats;Ljava/lang/String;Landroid/os/UserHandle;Z)V
HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForUid(Landroid/content/pm/PackageStats;IZ)V
@@ -1421,9 +1456,9 @@
HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByPackageName(JLjava/lang/String;I)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByUid(JI)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByUidInternal(JI)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
-HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByUidInternalNoLogging(JI)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledInternal(JLandroid/content/pm/ApplicationInfo;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/internal/compat/ChangeReporter;Lcom/android/internal/compat/ChangeReporter;
HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledInternalNoLogging(JLandroid/content/pm/ApplicationInfo;)Z
+HSPLcom/android/server/compat/config/Change;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/compat/config/Change;
HPLcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;->getNetworkCapabilities(I)Landroid/net/NetworkCapabilities;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HPLcom/android/server/connectivity/NetdEventListenerService;->collectPendingMetricsSnapshot(JZ)V+]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/connectivity/NetdEventListenerService;->getMetricsForNetwork(JI)Landroid/net/metrics/NetworkMetrics;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;Lcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;
@@ -1442,6 +1477,7 @@
HSPLcom/android/server/content/ContentService$ObserverNode;->countUriSegments(Landroid/net/Uri;)I+]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Ljava/util/List;Landroid/net/Uri$PathSegments;
HSPLcom/android/server/content/ContentService$ObserverNode;->getUriSegment(Landroid/net/Uri;I)Ljava/lang/String;+]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Ljava/util/List;Landroid/net/Uri$PathSegments;
HSPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z+]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;]Lcom/android/internal/os/BinderDeathDispatcher;Lcom/android/internal/os/BinderDeathDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/content/ContentService;->getMasterSyncAutomaticallyAsUser(I)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
HSPLcom/android/server/content/ContentService;->getProviderPackageName(Landroid/net/Uri;I)Ljava/lang/String;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
HPLcom/android/server/content/ContentService;->getSyncAdapterPackageAsUser(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;
HSPLcom/android/server/content/ContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;+]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;
@@ -1454,9 +1490,13 @@
HSPLcom/android/server/content/ContentService;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;
HSPLcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
HSPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V
+HPLcom/android/server/content/SyncJobService;->onStartJob(Landroid/app/job/JobParameters;)Z+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger;
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->bindToSyncAdapter(Landroid/content/ComponentName;I)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;
+HPLcom/android/server/content/SyncManager$SyncHandler;->computeSyncOpState(Lcom/android/server/content/SyncOperation;)I+]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
HPLcom/android/server/content/SyncManager$SyncHandler;->dispatchSyncOperation(Lcom/android/server/content/SyncOperation;)Z+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncManager$SyncHandler;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/content/SyncManager$SyncHandler;->handleSyncMessage(Landroid/os/Message;)V+]Landroid/content/ISyncAdapter;Landroid/content/ISyncAdapter$Stub$Proxy;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger;]Lcom/android/server/content/SyncManager$SyncTimeTracker;Lcom/android/server/content/SyncManager$SyncTimeTracker;
HPLcom/android/server/content/SyncManager$SyncHandler;->runSyncFinishedOrCanceledH(Landroid/content/SyncResult;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V+]Landroid/accounts/Account;Landroid/accounts/Account;]Landroid/app/NotificationManager;Landroid/app/NotificationManager;]Landroid/content/ISyncAdapter;Landroid/content/ISyncAdapter$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger;]Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncManager$SyncHandler;]Lcom/android/server/content/SyncManagerConstants;Lcom/android/server/content/SyncManagerConstants;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;
+HPLcom/android/server/content/SyncManager$SyncHandler;->startSyncH(Lcom/android/server/content/SyncOperation;)V+]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/content/SyncManager;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;ZZ)I+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;
HPLcom/android/server/content/SyncManager;->getAllPendingSyncs()Ljava/util/List;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/app/job/JobScheduler;Landroid/app/JobSchedulerImpl;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/content/SyncManager;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I+]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
@@ -1473,6 +1513,7 @@
HPLcom/android/server/content/SyncOperation;->wakeLockName()Ljava/lang/String;
HSPLcom/android/server/content/SyncStorageEngine$EndPoint;-><init>(Landroid/accounts/Account;Ljava/lang/String;I)V
HPLcom/android/server/content/SyncStorageEngine;->getAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;
+HPLcom/android/server/content/SyncStorageEngine;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
HSPLcom/android/server/content/SyncStorageEngine;->getOrCreateAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;
HPLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J+]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/content/SyncStorageEngine;->reportChange(ILjava/lang/String;I)V+]Landroid/content/ISyncStatusObserver;Landroid/content/ISyncStatusObserver$Stub$Proxy;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
@@ -1488,6 +1529,7 @@
HSPLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;->getTotalTimeMillis()J
HSPLcom/android/server/cpu/CpuInfoReader;->calculateAvgCpuFreq(Landroid/util/LongSparseLongArray;)J+]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
HSPLcom/android/server/cpu/CpuInfoReader;->readCpuCores(Ljava/io/File;)Landroid/util/IntArray;+]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/cpu/CpuInfoReader;->readCpuFreqKHz(Ljava/io/File;)J+]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/cpu/CpuInfoReader;->readCpuInfos()Landroid/util/SparseArray;+]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/cpu/CpuInfoReader;->readCumulativeCpuUsageStats()Landroid/util/SparseArray;+]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/cpu/CpuInfoReader;->readDynamicPolicyInfo()Landroid/util/SparseArray;+]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -1496,24 +1538,25 @@
HSPLcom/android/server/cpu/CpuMonitorService;->monitorCpuStats()V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HPLcom/android/server/devicepolicy/ActiveAdmin;->getUid()I
HSPLcom/android/server/devicepolicy/ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/devicepolicy/CallerIdentity;-><init>(ILjava/lang/String;Landroid/content/ComponentName;)V
HSPLcom/android/server/devicepolicy/CallerIdentity;->getUserId()I
HSPLcom/android/server/devicepolicy/DevicePolicyEngine$DevicePoliciesReaderWriter;->writeLocalPoliciesInner(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/admin/PolicyKey;Landroid/app/admin/NoArgsPolicyKey;,Landroid/app/admin/PackagePolicyKey;,Landroid/app/admin/UserRestrictionPolicyKey;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda37;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda79;->getOrThrow()Ljava/lang/Object;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderClearCallingIdentity()J
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUid()I
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderRestoreCallingIdentity(J)V
HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManagerLocal()Lcom/android/server/pm/PackageManagerLocal;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveDeviceOwner(I)Z
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveProfileOwner(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureLocked()V
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdmins(I)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForLockscreenPoliciesLocked(I)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForUserAndItsManagedProfilesLocked(ILjava/util/function/Predicate;)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCallerIdentity(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/devicepolicy/CallerIdentity;+]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponentOnUser(I)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponentOnUser(I)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I+]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getLockObject()Ljava/lang/Object;+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
@@ -1523,6 +1566,8 @@
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserData(I)Lcom/android/server/devicepolicy/DevicePolicyData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserDataUnchecked(I)Lcom/android/server/devicepolicy/DevicePolicyData;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCrossUsersPermission(Lcom/android/server/devicepolicy/CallerIdentity;I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasFullCrossUsersPermission(Lcom/android/server/devicepolicy/CallerIdentity;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasPermission(Ljava/lang/String;Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallingFromPackage(Ljava/lang/String;I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Lcom/android/server/pm/PackageManagerLocal$UnfilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDefaultDeviceOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
@@ -1530,26 +1575,28 @@
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeEnabled(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUidProfileOwnerLocked(I)Z+]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallBlocked(Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForUserAndItsManagedProfilesLocked$21(ILjava/util/ArrayList;Ljava/util/function/Predicate;)V+]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda114;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda116;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$86(I)Ljava/lang/Integer;+]Landroid/os/UserManager;Landroid/os/UserManager;
HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationExemptions(Ljava/lang/String;Ljava/lang/String;[I)V+]Landroid/app/admin/DevicePolicyEventLogger;Landroid/app/admin/DevicePolicyEventLogger;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-HSPLcom/android/server/devicepolicy/EnforcingAdmin;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserId()I
HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerComponent(I)Landroid/content/ComponentName;
HSPLcom/android/server/devicepolicy/Owners;->hasDeviceOwner()Z
HSPLcom/android/server/devicepolicy/Owners;->isProfileOwnerOfOrganizationOwnedDevice(I)Z
-HSPLcom/android/server/display/AutomaticBrightnessController;->configure(ILandroid/hardware/display/BrightnessConfiguration;FZFZIIZZ)V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/BrightnessThrottler;Lcom/android/server/display/BrightnessThrottler;]Lcom/android/server/display/brightness/clamper/BrightnessClamperController;Lcom/android/server/display/brightness/clamper/BrightnessClamperController;
+HPLcom/android/server/display/AutomaticBrightnessController;->calculateAmbientLux(JJ)F
+HSPLcom/android/server/display/AutomaticBrightnessController;->configure(ILandroid/hardware/display/BrightnessConfiguration;FZFZIIZZ)V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/brightness/clamper/BrightnessClamperController;Lcom/android/server/display/brightness/clamper/BrightnessClamperController;
HSPLcom/android/server/display/BrightnessRangeController;->getCurrentBrightnessMax()F+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/NormalBrightnessModeController;Lcom/android/server/display/NormalBrightnessModeController;
HSPLcom/android/server/display/DisplayAdapter$$ExternalSyntheticLambda1;->run()V
HSPLcom/android/server/display/DisplayBrightnessState$Builder;-><init>()V
HSPLcom/android/server/display/DisplayBrightnessState$Builder;->from(Lcom/android/server/display/DisplayBrightnessState;)Lcom/android/server/display/DisplayBrightnessState$Builder;
HSPLcom/android/server/display/DisplayBrightnessState;-><init>(Lcom/android/server/display/DisplayBrightnessState$Builder;)V+]Lcom/android/server/display/DisplayBrightnessState$Builder;Lcom/android/server/display/DisplayBrightnessState$Builder;
HSPLcom/android/server/display/DisplayDevice;->populateViewportLocked(Landroid/hardware/display/DisplayViewport;)V+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;
-HSPLcom/android/server/display/DisplayDeviceConfig;->getNitsFromBacklight(F)F+]Landroid/util/Spline;Landroid/util/Spline$LinearSpline;,Landroid/util/Spline$MonotoneCubicSpline;
HSPLcom/android/server/display/DisplayDeviceInfo;-><init>()V
HSPLcom/android/server/display/DisplayDeviceInfo;->diff(Lcom/android/server/display/DisplayDeviceInfo;)I
HSPLcom/android/server/display/DisplayDeviceInfo;->toString()Ljava/lang/String;
+HSPLcom/android/server/display/DisplayDeviceRepository;->containsLocked(Lcom/android/server/display/DisplayDevice;)Z+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceChanged(Lcom/android/server/display/DisplayDevice;)V+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/display/DisplayGroup;->getIdLocked(I)I+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/display/DisplayGroup;->getSizeLocked()I+]Ljava/util/List;Ljava/util/ArrayList;
@@ -1558,8 +1605,7 @@
HSPLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds(Z)[I+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
-HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)Z
-HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->shouldSendDisplayEvent(I)Z
+HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/input/InputManagerInternal;Lcom/android/server/input/InputManagerService$LocalService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayIdToMirror(I)I+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
@@ -1568,19 +1614,12 @@
HSPLcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(ILandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIFFZZZ)V
HSPLcom/android/server/display/DisplayManagerService$LocalService;->setScreenBrightnessOverrideFromWindowManager(Landroid/util/SparseArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/DisplayManagerService$UidImportanceListener;->onUidImportanceUnflagged(II)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/DisplayManagerService;->applyDisplayChangedLocked(Lcom/android/server/display/LogicalDisplay;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/HighBrightnessModeMetadataMapper;Lcom/android/server/display/HighBrightnessModeMetadataMapper;
-HSPLcom/android/server/display/DisplayManagerService;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;)V+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayEvent(ILandroid/util/ArraySet;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/display/DisplayManagerService;->deliverEventUnflagged(Lcom/android/server/display/DisplayManagerService$CallbackRecord;II)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoForFrameRateOverride([Landroid/view/DisplayEventReceiver$FrameRateOverride;Landroid/view/DisplayInfo;I)Landroid/view/DisplayInfo;
HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoInternal(II)Landroid/view/DisplayInfo;+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
-HSPLcom/android/server/display/DisplayManagerService;->getViewportLocked(ILjava/lang/String;)Landroid/hardware/display/DisplayViewport;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/display/DisplayManagerService;->isMinimalPostProcessingAllowed()Z
-HSPLcom/android/server/display/DisplayManagerService;->isUidCached(I)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
HSPLcom/android/server/display/DisplayManagerService;->performTraversalInternal(Landroid/view/SurfaceControl$Transaction;Landroid/util/SparseArray;)V+]Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;Lcom/android/server/display/ColorFade$NaturalSurfaceLayout;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
-HSPLcom/android/server/display/DisplayManagerService;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;Landroid/util/SparseArray;)V+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
-HSPLcom/android/server/display/DisplayManagerService;->populateViewportLocked(IILcom/android/server/display/DisplayDevice;Lcom/android/server/display/DisplayDeviceInfo;)V
HSPLcom/android/server/display/DisplayManagerService;->requestDisplayStateInternal(IIFF)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Ljava/lang/Runnable;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
HSPLcom/android/server/display/DisplayManagerService;->scheduleTraversalLocked(Z)V
HSPLcom/android/server/display/DisplayManagerService;->sendDisplayEventIfEnabledLocked(Lcom/android/server/display/LogicalDisplay;I)V
@@ -1602,13 +1641,15 @@
HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->run()V
HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->setState(IFF)Z
HSPLcom/android/server/display/DisplayPowerState;->postScreenUpdateThreadSafe()V
+HSPLcom/android/server/display/HighBrightnessModeController;->calculateRemainingTime(J)J+]Lcom/android/server/display/HbmEvent;Lcom/android/server/display/HbmEvent;]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/HighBrightnessModeMetadata;Lcom/android/server/display/HighBrightnessModeMetadata;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;
+HSPLcom/android/server/display/HighBrightnessModeController;->getCurrentBrightnessMax()F+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;
+HSPLcom/android/server/display/HighBrightnessModeController;->onBrightnessChanged(FFI)V+]Lcom/android/server/display/DisplayManagerService$Clock;Lcom/android/server/display/HighBrightnessModeController$Injector$$ExternalSyntheticLambda0;]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/HighBrightnessModeMetadata;Lcom/android/server/display/HighBrightnessModeMetadata;
+HSPLcom/android/server/display/HighBrightnessModeController;->recalculateTimeAllowance()V+]Lcom/android/server/display/DisplayManagerService$Clock;Lcom/android/server/display/HighBrightnessModeController$Injector$$ExternalSyntheticLambda0;]Lcom/android/server/display/HbmEvent;Lcom/android/server/display/HbmEvent;]Lcom/android/server/display/HighBrightnessModeMetadata;Lcom/android/server/display/HighBrightnessModeMetadata;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$DisplayMode;)Z
HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayBrightness(FF)V+]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;]Lcom/android/server/display/feature/DisplayManagerFlags;Lcom/android/server/display/feature/DisplayManagerFlags;
HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceConfig()Lcom/android/server/display/DisplayDeviceConfig;
HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getLogicalDensity()I+]Lcom/android/server/display/DensityMapping;Lcom/android/server/display/DensityMapping;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Lcom/android/server/display/feature/DisplayManagerFlags;Lcom/android/server/display/feature/DisplayManagerFlags;
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestDisplayStateLocked(IFFLcom/android/server/display/DisplayOffloadSessionImpl;)Ljava/lang/Runnable;
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->setDesiredDisplayModeSpecsLocked(Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;)V
HSPLcom/android/server/display/LogicalDisplay;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;Z)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;
HSPLcom/android/server/display/LogicalDisplay;->getDisplayIdLocked()I
HSPLcom/android/server/display/LogicalDisplay;->getDisplayInfoLocked()Landroid/view/DisplayInfo;+]Lcom/android/server/display/DisplayInfoProxy;Lcom/android/server/display/DisplayInfoProxy;
@@ -1616,16 +1657,14 @@
HSPLcom/android/server/display/LogicalDisplay;->updateFrameRateOverrides(Lcom/android/server/display/DisplayDeviceInfo;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/LogicalDisplay;->updateLocked(Lcom/android/server/display/DisplayDeviceRepository;Lcom/android/server/display/mode/SyntheticModeManager;)V+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Lcom/android/server/display/DisplayDeviceRepository;Lcom/android/server/display/DisplayDeviceRepository;]Lcom/android/server/display/DisplayInfoProxy;Lcom/android/server/display/DisplayInfoProxy;]Lcom/android/server/display/mode/SyntheticModeManager;Lcom/android/server/display/mode/SyntheticModeManager;
HSPLcom/android/server/display/LogicalDisplayMapper;->assignDisplayGroupLocked(Lcom/android/server/display/LogicalDisplay;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
-HSPLcom/android/server/display/LogicalDisplayMapper;->forEachLocked(Ljava/util/function/Consumer;Z)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;megamorphic_types
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupIdFromDisplayIdLocked(I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupLocked(I)Lcom/android/server/display/DisplayGroup;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayIdsLocked(IZ)[I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(I)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(IZ)Lcom/android/server/display/LogicalDisplay;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(Lcom/android/server/display/DisplayDevice;Z)Lcom/android/server/display/LogicalDisplay;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForDisplaysLocked(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/feature/DisplayManagerFlags;Lcom/android/server/display/feature/DisplayManagerFlags;
-HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForGroupsLocked(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;
-HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked(IZ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/feature/DisplayManagerFlags;Lcom/android/server/display/feature/DisplayManagerFlags;
+HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForDisplaysLocked(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
+HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked(IZ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
HPLcom/android/server/display/RampAnimator$DualRampAnimator$1;->run()V+]Lcom/android/server/display/RampAnimator$DualRampAnimator;Lcom/android/server/display/RampAnimator$DualRampAnimator;]Lcom/android/server/display/RampAnimator$Listener;Lcom/android/server/display/DisplayPowerController$3;]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;
HPLcom/android/server/display/RampAnimator;->performNextAnimationStep(J)V
HSPLcom/android/server/display/RampAnimator;->setPropertyValue(F)V+]Landroid/util/FloatProperty;Lcom/android/server/display/DisplayPowerState$2;,Lcom/android/server/display/DisplayPowerState$3;
@@ -1647,7 +1686,6 @@
HSPLcom/android/server/display/feature/DisplayManagerFlags$FlagState;->-$$Nest$misEnabled(Lcom/android/server/display/feature/DisplayManagerFlags$FlagState;)Z
HSPLcom/android/server/display/feature/DisplayManagerFlags$FlagState;->isEnabled()Z
HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppRequest(IIFFF)V+]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;
-HSPLcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;->equals(Ljava/lang/Object;)Z
HSPLcom/android/server/display/mode/DisplayModeDirector;->getModeSwitchingType()I
HSPLcom/android/server/display/mode/VotesStorage;->updateVote(IILcom/android/server/display/mode/Vote;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/VotesStatsReporter;Lcom/android/server/display/mode/VotesStatsReporter;]Lcom/android/server/display/mode/VotesStorage$Listener;Lcom/android/server/display/mode/DisplayModeDirector$$ExternalSyntheticLambda0;]Ljava/lang/Object;megamorphic_types
HSPLcom/android/server/display/state/DisplayStateController;->updateDisplayState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;ZZ)Landroid/util/Pair;
@@ -1662,6 +1700,7 @@
HSPLcom/android/server/grammaticalinflection/GrammaticalInflectionUtils;->checkSystemGrammaticalGenderPermission(Landroid/permission/PermissionManager;Landroid/content/AttributionSource;)Z
HSPLcom/android/server/health/HealthServiceWrapperAidl;->getProperty(ILandroid/os/BatteryProperty;)I
HSPLcom/android/server/health/HealthServiceWrapperAidl;->getPropertyInternal(ILandroid/os/BatteryProperty;)I+]Landroid/hardware/health/IHealth;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/BatteryProperty;Landroid/os/BatteryProperty;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->assertCalledByPackageOwner(Ljava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceListForUserLocked(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/infra/AbstractMasterSystemService;megamorphic_types]Lcom/android/server/infra/ServiceNameResolver;Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;,Lcom/android/server/infra/SecureSettingsServiceNameResolver;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutDescriptor;->format(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
HSPLcom/android/server/input/KeyboardLayoutManager;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutVisitor;)V+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutVisitor;Lcom/android/server/input/KeyboardLayoutManager$$ExternalSyntheticLambda1;,Lcom/android/server/input/KeyboardLayoutManager$$ExternalSyntheticLambda5;,Lcom/android/server/input/KeyboardLayoutManager$2;]Ljava/lang/CharSequence;Ljava/lang/String;
@@ -1670,6 +1709,7 @@
HSPLcom/android/server/inputmethod/InputMethodSettings;->getEnabledInputMethodsAndSubtypeList()Ljava/util/List;
HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->getInputMethodAndSubtypeListForHardwareKeyboard(Landroid/content/Context;Lcom/android/server/inputmethod/InputMethodSettings;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController;->getSortedInputMethodAndSubtypeList(ZZZLandroid/content/Context;Lcom/android/server/inputmethod/InputMethodSettings;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/inputmethod/RawInputMethodMap;->toInputMethodMap(Lcom/android/server/inputmethod/AdditionalSubtypeMap;IZ)Lcom/android/server/inputmethod/InputMethodMap;+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/inputmethod/SecureSettingsWrapper;->get(I)Lcom/android/server/inputmethod/SecureSettingsWrapper$ReaderWriter;
HSPLcom/android/server/inputmethod/UserDataRepository;->getOrCreate(I)Lcom/android/server/inputmethod/UserData;
HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
@@ -1779,7 +1819,7 @@
HSPLcom/android/server/job/JobSchedulerService;->isReadyToBeExecutedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/job/JobSchedulerService;->isReadyToBeExecutedLocked(Lcom/android/server/job/controllers/JobStatus;Z)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;
HSPLcom/android/server/job/JobSchedulerService;->lambda$new$2(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
-HSPLcom/android/server/job/JobSchedulerService;->lambda$onBootPhase$4(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/job/JobSchedulerService;->lambda$onBootPhase$4(Lcom/android/server/job/controllers/JobStatus;)V
HSPLcom/android/server/job/JobSchedulerService;->maybeProcessBuggyJob(Lcom/android/server/job/controllers/JobStatus;I)V+]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;
HSPLcom/android/server/job/JobSchedulerService;->maybeRunPendingJobsLocked()V+]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/job/JobSchedulerService;->onControllerStateChanged(Landroid/util/ArraySet;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
@@ -1793,6 +1833,7 @@
HSPLcom/android/server/job/JobSchedulerService;->startTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/job/JobSchedulerService;->stopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/job/JobSchedulerService;->updateUidState(III)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/job/JobServiceContext$JobCallback;-><init>(Lcom/android/server/job/JobServiceContext;)V
HSPLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStartMessage(IZ)V
HSPLcom/android/server/job/JobServiceContext;->applyStoppedReasonLocked(Ljava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
HSPLcom/android/server/job/JobServiceContext;->canGetNetworkInformation(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
@@ -1802,6 +1843,7 @@
HPLcom/android/server/job/JobServiceContext;->doDequeueWork(Lcom/android/server/job/JobServiceContext$JobCallback;I)Landroid/app/job/JobWorkItem;+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;
HSPLcom/android/server/job/JobServiceContext;->doJobFinished(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;
HSPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;I)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
+HSPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
HSPLcom/android/server/job/JobServiceContext;->handleFinishedLocked(ZLjava/lang/String;)V
HSPLcom/android/server/job/JobServiceContext;->handleServiceBoundLocked()V+]Landroid/app/job/IJobService;Landroid/app/job/IJobService$Stub$Proxy;,Landroid/app/job/JobServiceEngine$JobInterface;
HSPLcom/android/server/job/JobServiceContext;->handleStartedLocked(Z)V+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
@@ -1816,6 +1858,7 @@
HPLcom/android/server/job/JobStore$2;->addAttributesToJobTag(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HPLcom/android/server/job/JobStore$2;->deepCopyBundle(Landroid/os/PersistableBundle;I)Landroid/os/PersistableBundle;+]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
HPLcom/android/server/job/JobStore$2;->run()V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Ljava/io/File;Ljava/io/File;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;,Ljava/time/Clock$SystemClock;
+HPLcom/android/server/job/JobStore$2;->writeBundleToXml(Landroid/os/PersistableBundle;Lorg/xmlpull/v1/XmlSerializer;)V+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HPLcom/android/server/job/JobStore$2;->writeConstraintsToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HPLcom/android/server/job/JobStore$2;->writeDebugInfoToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HPLcom/android/server/job/JobStore$2;->writeExecutionCriteriaToXml(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;,Ljava/time/Clock$SystemClock;]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
@@ -1833,11 +1876,11 @@
HSPLcom/android/server/job/JobStore;->countJobsForUid(I)I
HSPLcom/android/server/job/JobStore;->getJobByUidAndJobId(ILjava/lang/String;I)Lcom/android/server/job/controllers/JobStatus;
HPLcom/android/server/job/JobStore;->intArrayToString([I)Ljava/lang/String;
-HPLcom/android/server/job/JobStore;->maybeWriteStatusToDiskAsync()V
+HSPLcom/android/server/job/JobStore;->maybeWriteStatusToDiskAsync()V
HSPLcom/android/server/job/JobStore;->remove(Lcom/android/server/job/controllers/JobStatus;Z)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
HPLcom/android/server/job/PendingJobQueue$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
HSPLcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;->clear()V
-HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->$r8$lambda$g0OYYwC3jkCSkqvBk21tiP7tdvI(Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;)I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
+HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->$r8$lambda$g0OYYwC3jkCSkqvBk21tiP7tdvI(Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;)I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->add(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->addAll(Ljava/util/List;)V+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->indexOf(Lcom/android/server/job/controllers/JobStatus;)I+]Ljava/util/List;Ljava/util/ArrayList;
@@ -1865,10 +1908,12 @@
HSPLcom/android/server/job/controllers/BatteryController;->hasTopExemptionLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/job/controllers/BatteryController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
HSPLcom/android/server/job/controllers/BatteryController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/controllers/BatteryController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/job/controllers/ComponentController;->getServiceProcessLocked(Lcom/android/server/job/controllers/JobStatus;)Ljava/lang/String;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/job/controllers/ComponentController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
HSPLcom/android/server/job/controllers/ComponentController;->updateComponentEnabledStateLocked(Lcom/android/server/job/controllers/JobStatus;)Z
HSPLcom/android/server/job/controllers/ConnectivityController$CcHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onBlockedStatusChanged(Landroid/net/Network;I)V
HSPLcom/android/server/job/controllers/ConnectivityController;->evaluateStateLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HSPLcom/android/server/job/controllers/ConnectivityController;->getNetworkLocked(Lcom/android/server/job/controllers/JobStatus;)Landroid/net/Network;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/job/controllers/ConnectivityController;->getNetworkMetadata(Landroid/net/Network;)Lcom/android/server/job/controllers/ConnectivityController$CachedNetworkMetadata;
@@ -1892,7 +1937,7 @@
HPLcom/android/server/job/controllers/ContentObserverController$JobInstance;-><init>(Lcom/android/server/job/controllers/ContentObserverController;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/job/controllers/ContentObserverController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
HSPLcom/android/server/job/controllers/ContentObserverController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/controllers/DeviceIdleJobsController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->isWhitelistedLocked(Lcom/android/server/job/controllers/JobStatus;)Z
HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->setUidActiveLocked(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
@@ -1929,9 +1974,9 @@
HSPLcom/android/server/job/controllers/JobStatus;->createFromJobInfo(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/job/controllers/JobStatus;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
HPLcom/android/server/job/controllers/JobStatus;->dequeueWorkLocked()Landroid/app/job/JobWorkItem;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/job/controllers/JobStatus;->enqueueWorkLocked(Landroid/app/job/JobWorkItem;)V+]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/job/controllers/JobStatus;->generateLoggingId(Ljava/lang/String;I)J
HSPLcom/android/server/job/controllers/JobStatus;->generateNamespaceHash(Ljava/lang/String;)Ljava/lang/String;+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
HSPLcom/android/server/job/controllers/JobStatus;->getAppTraceTag()Ljava/lang/String;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
-HSPLcom/android/server/job/controllers/JobStatus;->getEarliestRunTime()J
HSPLcom/android/server/job/controllers/JobStatus;->getEffectivePriority()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HSPLcom/android/server/job/controllers/JobStatus;->getEffectiveStandbyBucket()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobSchedulerInternal;Lcom/android/server/job/JobSchedulerService$LocalService;
HSPLcom/android/server/job/controllers/JobStatus;->getFilteredDebugTags()[Ljava/lang/String;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
@@ -1947,7 +1992,7 @@
HSPLcom/android/server/job/controllers/JobStatus;->getTimeoutBlameUserId()I
HSPLcom/android/server/job/controllers/JobStatus;->getUid()I
HSPLcom/android/server/job/controllers/JobStatus;->getUserId()I
-HSPLcom/android/server/job/controllers/JobStatus;->getWakelockTag()Ljava/lang/String;
+HSPLcom/android/server/job/controllers/JobStatus;->getWakelockTag()Ljava/lang/String;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HSPLcom/android/server/job/controllers/JobStatus;->getWorkCount()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/job/controllers/JobStatus;->hasBatteryNotLowConstraint()Z
HSPLcom/android/server/job/controllers/JobStatus;->hasChargingConstraint()Z
@@ -1969,6 +2014,7 @@
HSPLcom/android/server/job/controllers/JobStatus;->setBackgroundNotRestrictedConstraintSatisfied(JZZ)Z
HSPLcom/android/server/job/controllers/JobStatus;->setConstraintSatisfied(IJZ)Z+]Ljava/util/List;Ljava/util/ArrayList$SubList;,Ljava/util/ArrayList;
HSPLcom/android/server/job/controllers/JobStatus;->setDeviceNotDozingConstraintSatisfied(JZZ)Z
+HSPLcom/android/server/job/controllers/JobStatus;->setExpeditedJobQuotaApproved(JZ)Z
HSPLcom/android/server/job/controllers/JobStatus;->shouldTreatAsExpeditedJob()Z
HSPLcom/android/server/job/controllers/JobStatus;->shouldTreatAsUserInitiatedJob()Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
HSPLcom/android/server/job/controllers/JobStatus;->stopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -2038,15 +2084,19 @@
HSPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JLandroid/os/WorkSource;)V
HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;->isJobRestricted(Lcom/android/server/job/controllers/JobStatus;I)Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
HSPLcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V
+HPLcom/android/server/locales/LocaleManagerService;->getApplicationLocales(Ljava/lang/String;I)Landroid/os/LocaleList;+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HSPLcom/android/server/location/LocationManagerService;->getLocationProviderManager(Ljava/lang/String;)Lcom/android/server/location/provider/LocationProviderManager;+]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/LocationProviderManager;,Lcom/android/server/location/provider/PassiveLocationProviderManager;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
HSPLcom/android/server/location/LocationManagerService;->isLocationEnabledForUser(I)Z+]Lcom/android/server/location/injector/Injector;Lcom/android/server/location/LocationManagerService$SystemInjector;]Lcom/android/server/location/injector/SettingsHelper;Lcom/android/server/location/injector/SystemSettingsHelper;
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->doSendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/IContextHubTransactionCallback;)I+]Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/ContextHubInfo;]Lcom/android/server/location/contexthub/ContextHubEventLogger;Lcom/android/server/location/contexthub/ContextHubEventLogger;]Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
-HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToClient(Landroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)B+]Lcom/android/server/location/contexthub/ContextHubClientBroker;Lcom/android/server/location/contexthub/ContextHubClientBroker;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->doSendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/IContextHubTransactionCallback;)I+]Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/ContextHubInfo;]Lcom/android/server/location/contexthub/ContextHubEventLogger;Lcom/android/server/location/contexthub/ContextHubEventLogger;]Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToClient(Landroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)B
+HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppStateList([Landroid/hardware/contexthub/NanoappInfo;)Ljava/util/List;
+HSPLcom/android/server/location/contexthub/NanoAppStateManager;->getNanoAppHandle(IJ)I+]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
HSPLcom/android/server/location/eventlog/LocalEventLog;->addLog(JLjava/lang/Object;)V+]Lcom/android/server/location/eventlog/LocalEventLog;Lcom/android/server/location/eventlog/LocationEventLog;
HSPLcom/android/server/location/eventlog/LocalEventLog;->addLogEventInternal(ZILjava/lang/Object;)V+]Lcom/android/server/location/eventlog/LocalEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;,Lcom/android/server/location/eventlog/LocationEventLog;
+HSPLcom/android/server/location/eventlog/LocalEventLog;->createEntry(ZI)I
HSPLcom/android/server/location/eventlog/LocationEventLog;->getAggregateStats(Ljava/lang/String;Landroid/location/util/identity/CallerIdentity;)Lcom/android/server/location/eventlog/LocationEventLog$AggregateStats;
HPLcom/android/server/location/injector/SystemAppOpsHelper;->noteOpNoThrow(ILandroid/location/util/identity/CallerIdentity;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
HSPLcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;->getValueForUser(II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/location/injector/SystemSettingsHelper;->isLocationEnabled(I)Z+]Lcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;Lcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;
HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->acquire()Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;
HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->close()V+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;
HSPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->acquire()Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
@@ -2058,7 +2108,9 @@
HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->onPostExecute(Z)V
HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->operate(Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;)V+]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerTransport;
HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->acceptLocationChange(Landroid/location/LocationResult;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;+]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/LocationProviderManager;,Lcom/android/server/location/provider/PassiveLocationProviderManager;
+HPLcom/android/server/location/provider/LocationProviderManager;->getLastLocationUnsafe(IIZJ)Landroid/location/Location;+]Landroid/location/Location;Landroid/location/Location;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/location/injector/UserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Lcom/android/server/location/provider/LocationProviderManager$LastLocation;Lcom/android/server/location/provider/LocationProviderManager$LastLocation;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/LocationProviderManager;
HSPLcom/android/server/location/provider/LocationProviderManager;->isEnabled(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/location/provider/LocationProviderManager;->onAppForegroundChanged(IZ)V
HPLcom/android/server/location/provider/LocationProviderManager;->onReportLocation(Landroid/location/LocationResult;)V+]Landroid/location/Location;Landroid/location/Location;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/LocationProviderManager;]Lcom/android/server/location/provider/PassiveLocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;
HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->equals(Ljava/lang/Object;)Z
HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->hashCode()I
@@ -2081,10 +2133,10 @@
HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidFirewallRuleChanged(III)V
HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidStateChanged(IIJI)V
+HSPLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
HSPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V
HSPLcom/android/server/net/NetworkPolicyLogger;->uidStateChanged(IIJI)V
-HSPLcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/net/NetworkPolicyManagerService$15;->handleMessage(Landroid/os/Message;)Z+]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
+HSPLcom/android/server/net/NetworkPolicyManagerService$15;->handleMessage(Landroid/os/Message;)Z+]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
HSPLcom/android/server/net/NetworkPolicyManagerService$16;->handleMessage(Landroid/os/Message;)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
HSPLcom/android/server/net/NetworkPolicyManagerService$4;->isUidStateChangeRelevant(Lcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;IJI)Z
HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidStateChanged(IIJI)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -2099,10 +2151,10 @@
HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidIdle(II)Z+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForAllowlistRulesUL(I)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForDenylistRulesUL(I)Z
HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForRulesUL(I)Z
HSPLcom/android/server/net/NetworkPolicyManagerService;->postBlockedReasonsChangedMsg(III)V
HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRuleUL(III)V+]Landroid/os/INetworkManagementService;Lcom/android/server/net/NetworkManagementService;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V+]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Landroid/net/Network;Landroid/net/Network;]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V+]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;
HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNotificationsNL()V+]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/time/Clock;Landroid/os/BestClock;
@@ -2123,17 +2175,19 @@
HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->handleMessage(Landroid/os/Message;)V
HSPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
HSPLcom/android/server/notification/BubbleExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/BubbleExtractor;Lcom/android/server/notification/BubbleExtractor;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I
HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->enabledAndUserMatches(I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices$UserProfiles;Lcom/android/server/notification/ManagedServices$UserProfiles;
HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->getService()Landroid/os/IInterface;
HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z
HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isSameUser(I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HSPLcom/android/server/notification/ManagedServices$UserProfiles;->isCurrentProfile(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/notification/ManagedServices;->getServiceFromTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;+]Landroid/os/IInterface;Landroid/service/notification/ConditionProviderService$Provider;,Landroid/service/notification/IConditionProvider$Stub$Proxy;,Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/notification/ManagedServices;->getServices()Ljava/util/List;
HSPLcom/android/server/notification/ManagedServices;->isPackageOrComponentAllowed(Ljava/lang/String;I)Z
HSPLcom/android/server/notification/ManagedServices;->isServiceTokenValidLocked(Landroid/os/IInterface;)Z
HSPLcom/android/server/notification/ManagedServices;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/ConditionProviders;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;,Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
-HPLcom/android/server/notification/NotificationAttentionHelper$PolitenessStrategy;->getChannelKey(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationAttentionHelper$PolitenessStrategy;->getChannelKey(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationAttentionHelper;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationAttentionHelper$Signals;)I+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationAttentionHelper$PolitenessStrategy;Lcom/android/server/notification/NotificationAttentionHelper$StrategyAvalanche;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/media/AudioAttributes$Builder;Landroid/media/AudioAttributes$Builder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
@@ -2143,35 +2197,47 @@
HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->enqueueNotification()Z+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/TimeToLiveHelper;Lcom/android/server/notification/TimeToLiveHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getNotificationListenerFilter(Landroid/util/Pair;)Landroid/service/notification/NotificationListenerFilter;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isUidTrusted(I)Z
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->prepareNotifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)Ljava/util/List;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->postNotification()Z+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/internal/logging/InstanceIdSequence;Lcom/android/internal/logging/InstanceIdSequence;]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;]Lcom/android/server/notification/ManagedServices$UserProfiles;Lcom/android/server/notification/ManagedServices$UserProfiles;]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;-><init>(Landroid/os/PowerManager$WakeLock;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;->finish()J+]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;]Ljava/lang/Runnable;Lcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda7;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->isInLockDownMode(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
HSPLcom/android/server/notification/NotificationManagerService$TrimCache;->ForListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/StatusBarNotification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
HSPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleCancelNotification(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;I)V
HPLcom/android/server/notification/NotificationManagerService;->applyAdjustmentLocked(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;Z)V+]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
HSPLcom/android/server/notification/NotificationManagerService;->areNotificationsEnabledForPackageInt(I)Z
HSPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V+]Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
-HSPLcom/android/server/notification/NotificationManagerService;->cancelNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;III)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->cancelNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;III)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;J)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$Archive;Lcom/android/server/notification/NotificationManagerService$Archive;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/TimeToLiveHelper;Lcom/android/server/notification/TimeToLiveHelper;
HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;)V
HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;II)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
HSPLcom/android/server/notification/NotificationManagerService;->checkDisqualifyingFeatures(IIILjava/lang/String;Lcom/android/server/notification/NotificationRecord;ZZ)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/Notification$Action;Landroid/app/Notification$Action;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
+HSPLcom/android/server/notification/NotificationManagerService;->checkRemoteViews(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V
HSPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;IZLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;ZZ)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/job/JobSchedulerInternal;Lcom/android/server/job/JobSchedulerService$LocalService;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Ljava/util/Set;Ljava/util/ImmutableCollections$SetN;
HSPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
HSPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;IIILandroid/app/ActivityManagerInternal$ServiceNotificationPolicy;Z)V+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;]Landroid/app/Notification$CallStyle;Landroid/app/Notification$CallStyle;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationManagerService;->getNotificationCount(Ljava/lang/String;IILjava/lang/String;)I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService;->getPackageImportanceWithIdentity(Ljava/lang/String;)I+]Landroid/app/ActivityManager;Landroid/app/ActivityManager;
+HSPLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationManagerService;->handleRankingSort()V+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/notification/NotificationManagerService;->isCallerSystemOrPhone()Z+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->isCallerSystemOrSystemUi()Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
HSPLcom/android/server/notification/NotificationManagerService;->isInLockDownMode(I)Z+]Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;
HSPLcom/android/server/notification/NotificationManagerService;->isInteractionVisibleToListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
HSPLcom/android/server/notification/NotificationManagerService;->isRecordBlockedLocked(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
HSPLcom/android/server/notification/NotificationManagerService;->isServiceTokenValid(Landroid/os/IInterface;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
HSPLcom/android/server/notification/NotificationManagerService;->isUidSystemOrPhone(I)Z
HSPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;ILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z+]Landroid/service/notification/NotificationListenerFilter;Landroid/service/notification/NotificationListenerFilter;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->isVisuallyInterruptive(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationManagerService;->makeRankingUpdateLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationHistoryManager;Lcom/android/server/notification/NotificationHistoryManager;
HSPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;IZ)Z
-HSPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
HSPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;IZ)V+]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
HSPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V+]Ljava/lang/Object;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
@@ -2179,7 +2245,12 @@
HSPLcom/android/server/notification/NotificationRecord;->calculateImportance()V
HSPLcom/android/server/notification/NotificationRecord;->calculateInitialImportance()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationRecord;->calculateLights()Lcom/android/server/notification/NotificationRecord$Light;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->calculateUserSentiment()V
HSPLcom/android/server/notification/NotificationRecord;->calculateVibration()Landroid/os/VibrationEffect;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->getFlags()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->getImportance()I
HSPLcom/android/server/notification/NotificationRecord;->getImportanceExplanation()Ljava/lang/CharSequence;
HSPLcom/android/server/notification/NotificationRecord;->getKey()Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
@@ -2190,6 +2261,7 @@
HSPLcom/android/server/notification/NotificationRecord;->getUserId()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationRecord;->isConversation()Z+]Landroid/app/Notification;Landroid/app/Notification;
HSPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V
+HPLcom/android/server/notification/NotificationRecord;->visitGrantableUri(Landroid/net/Uri;ZZ)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
HSPLcom/android/server/notification/NotificationRecordLogger$NotificationReported;-><init>(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;IILcom/android/internal/logging/InstanceId;)V+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;
HSPLcom/android/server/notification/NotificationRecordLoggerImpl;->writeNotificationReportedAtom(Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;)V
HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
@@ -2197,43 +2269,54 @@
HSPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
HSPLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Ljava/util/Map;Ljava/util/HashMap;
HSPLcom/android/server/notification/PermissionHelper;->hasPermission(I)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/notification/PermissionHelper;->isPermissionFixed(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
HSPLcom/android/server/notification/PreferencesHelper$PackagePreferences;-><init>()V
-HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZZIZ)Z+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/NotificationChannelLogger;Lcom/android/server/notification/NotificationChannelLoggerImpl;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/notification/PreferencesHelper;->bubblesEnabled(Landroid/os/UserHandle;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZZIZ)Z+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/NotificationChannelLogger;Lcom/android/server/notification/NotificationChannelLoggerImpl;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZIZ)V+]Lcom/android/server/notification/NotificationChannelLogger;Lcom/android/server/notification/NotificationChannelLoggerImpl;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;
HSPLcom/android/server/notification/PreferencesHelper;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZZ)Landroid/app/NotificationChannel;
-HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroupWithChannels(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannelGroup;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
-HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroups(Ljava/lang/String;IZZZZLjava/util/Set;)Landroid/content/pm/ParceledListSlice;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Set;Ljava/util/HashSet;
+HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroupWithChannels(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannelGroup;+]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;
HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;
HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;IIIIIZIJ)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;
HSPLcom/android/server/notification/PreferencesHelper;->getPackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
HSPLcom/android/server/notification/PreferencesHelper;->packagePreferencesKey(Ljava/lang/String;I)Ljava/lang/String;
-HSPLcom/android/server/notification/PreferencesHelper;->readXml(Lcom/android/modules/utils/TypedXmlPullParser;ZI)V
HSPLcom/android/server/notification/PreferencesHelper;->restoreChannel(Lcom/android/modules/utils/TypedXmlPullParser;ZLcom/android/server/notification/PreferencesHelper$PackagePreferences;)V
-HSPLcom/android/server/notification/PreferencesHelper;->restorePackage(Lcom/android/modules/utils/TypedXmlPullParser;ZILjava/lang/String;ZZ)V
+HSPLcom/android/server/notification/PreferencesHelper;->restorePackage(Lcom/android/modules/utils/TypedXmlPullParser;ZILjava/lang/String;ZZ)V+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Ljava/time/Clock;Ljava/time/Clock$SystemClock;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
HSPLcom/android/server/notification/PreferencesHelper;->writePackageXml(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Lcom/android/modules/utils/TypedXmlSerializer;Landroid/util/ArrayMap;Z)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;
HSPLcom/android/server/notification/PreferencesHelper;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HSPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationSignalExtractor;megamorphic_types]Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;
HSPLcom/android/server/notification/RankingHelper;->sort(Ljava/util/ArrayList;)V+]Landroid/app/Notification;Landroid/app/Notification;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/ShortcutHelper;->maybeListenForShortcutChangesForBubbles(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z+]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
HSPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;+]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
HSPLcom/android/server/notification/TimeToLiveHelper;->removeMatchingEntry(Ljava/lang/String;)V+]Ljava/util/Iterator;Ljava/util/TreeMap$KeyIterator;]Ljava/util/TreeSet;Ljava/util/TreeSet;
HSPLcom/android/server/notification/TimeToLiveHelper;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;J)V+]Landroid/app/Notification;Landroid/app/Notification;]Ljava/util/TreeSet;Ljava/util/TreeSet;
HSPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeopleForKey(Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople;
HSPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;
HSPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/List;[FLandroid/util/ArraySet;)Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
HSPLcom/android/server/notification/VibratorHelper;-><init>(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
HSPLcom/android/server/notification/VibratorHelper;->getFloatArray(Landroid/content/res/Resources;I)[F+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLcom/android/server/notification/VibratorHelper;->getLongArray(Landroid/content/res/Resources;II[J)[J+]Landroid/content/res/Resources;Landroid/content/res/Resources;
HSPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/ZenModeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper;
+HSPLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;
HSPLcom/android/server/notification/ZenModeHelper;->zenRuleToAutomaticZenRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Landroid/app/AutomaticZenRule;
HSPLcom/android/server/om/OverlayManagerServiceImpl;->updateState(Landroid/content/om/CriticalOverlayInfo;II)Z
+HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-$$Nest$fgetmUserId(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
HSPLcom/android/server/om/OverlayManagerSettings;->forEachMatching(ILjava/lang/String;Ljava/lang/String;Ljava/util/function/Consumer;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Consumer;Lcom/android/server/om/OverlayManagerServiceImpl$$ExternalSyntheticLambda1;
HSPLcom/android/server/om/OverlayManagerSettings;->select(Landroid/content/om/OverlayIdentifier;I)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/om/OverlayReferenceMapper$1;->getTargetToOverlayables(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/util/Pair;+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;
HSPLcom/android/server/om/OverlayReferenceMapper;->addPkg(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/Map;)Landroid/util/ArraySet;
HSPLcom/android/server/om/OverlayReferenceMapper;->addTarget(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/Map;Ljava/util/Collection;)V+]Lcom/android/server/om/OverlayReferenceMapper$Provider;Lcom/android/server/om/OverlayReferenceMapper$1;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$UnmodifiableCollection$1;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;]Ljava/util/Map$Entry;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/Collections$EmptyMap;,Ljava/util/Collections$UnmodifiableMap;,Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;,Ljava/util/Collections$UnmodifiableSet;,Ljava/util/HashSet;
-HPLcom/android/server/om/OverlayReferenceMapper;->ensureMapBuilt()V
-HPLcom/android/server/om/OverlayReferenceMapper;->isValidActor(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/om/OverlayReferenceMapper;->ensureMapBuilt()V
+HSPLcom/android/server/om/OverlayReferenceMapper;->isValidActor(Ljava/lang/String;Ljava/lang/String;)Z
HSPLcom/android/server/os/NativeTombstoneManager;->collectTombstones(Ljava/util/ArrayList;III)V
HSPLcom/android/server/permission/access/AccessCheckingService;->access$getState$p(Lcom/android/server/permission/access/AccessCheckingService;)Lcom/android/server/permission/access/AccessState;
HSPLcom/android/server/permission/access/AccessPersistence;->write(Lcom/android/server/permission/access/AccessState;)V
HSPLcom/android/server/permission/access/AccessPersistence;->write(Lcom/android/server/permission/access/WritableState;Lcom/android/server/permission/access/AccessState;I)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/permission/access/WritableState;Lcom/android/server/permission/access/MutableSystemState;,Lcom/android/server/permission/access/MutableUserState;
+HSPLcom/android/server/permission/access/AccessPersistence;->writeSystemState(Lcom/android/server/permission/access/AccessState;)V
HSPLcom/android/server/permission/access/AccessPersistence;->writeUserState(Lcom/android/server/permission/access/AccessState;I)V
HSPLcom/android/server/permission/access/AccessPolicy;->onStateMutated(Lcom/android/server/permission/access/GetStateScope;)V+]Lcom/android/server/permission/access/SchemePolicy;Lcom/android/server/permission/access/appop/AppIdAppOpPolicy;,Lcom/android/server/permission/access/appop/PackageAppOpPolicy;,Lcom/android/server/permission/access/permission/AppIdPermissionPolicy;,Lcom/android/server/permission/access/permission/DevicePermissionPolicy;
HSPLcom/android/server/permission/access/AccessPolicy;->serializePackageVersions(Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/server/permission/access/immutable/IndexedMap;)V+]Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/modules/utils/BinaryXmlSerializer;]Ljava/lang/Number;Ljava/lang/Integer;
@@ -2243,6 +2326,7 @@
HSPLcom/android/server/permission/access/AccessState;->getUserStates()Lcom/android/server/permission/access/immutable/IntReferenceMap;
HSPLcom/android/server/permission/access/AccessState;->toMutable()Lcom/android/server/permission/access/MutableAccessState;
HSPLcom/android/server/permission/access/ExternalState;->getAppIdPackageNames()Lcom/android/server/permission/access/immutable/IntReferenceMap;
+HSPLcom/android/server/permission/access/ExternalState;->getPackageStates()Ljava/util/Map;
HSPLcom/android/server/permission/access/GetStateScope;-><init>(Lcom/android/server/permission/access/AccessState;)V
HSPLcom/android/server/permission/access/GetStateScope;->getState()Lcom/android/server/permission/access/AccessState;
HSPLcom/android/server/permission/access/MutableAccessState;-><init>(Lcom/android/server/permission/access/AccessState;)V
@@ -2251,11 +2335,13 @@
HSPLcom/android/server/permission/access/MutateStateScope;->getNewState()Lcom/android/server/permission/access/MutableAccessState;
HSPLcom/android/server/permission/access/SystemState;->getPermissions()Lcom/android/server/permission/access/immutable/IndexedMap;
HSPLcom/android/server/permission/access/SystemState;->getWriteMode()I
+HSPLcom/android/server/permission/access/UserState;->getAppIdAppOpModes()Lcom/android/server/permission/access/immutable/IntReferenceMap;
HSPLcom/android/server/permission/access/UserState;->getAppIdPermissionFlags()Lcom/android/server/permission/access/immutable/IntReferenceMap;
HSPLcom/android/server/permission/access/UserState;->getWriteMode()I
HSPLcom/android/server/permission/access/appop/AppIdAppOpPolicy;->getAppOpMode(Lcom/android/server/permission/access/GetStateScope;IILjava/lang/String;)I+]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/AppIdAppOpPolicy;->getAppOpModes(Lcom/android/server/permission/access/GetStateScope;II)Lcom/android/server/permission/access/immutable/IndexedMap;
HSPLcom/android/server/permission/access/appop/AppIdAppOpPolicy;->onStateMutated(Lcom/android/server/permission/access/GetStateScope;)V+]Lcom/android/server/permission/access/appop/AppIdAppOpPolicy$OnAppOpModeChangedListener;Lcom/android/server/permission/access/appop/AppOpService$OnAppIdAppOpModeChangedListener;
+HSPLcom/android/server/permission/access/appop/AppIdAppOpPolicy;->setAppOpMode(Lcom/android/server/permission/access/MutateStateScope;IILjava/lang/String;I)Z+]Lcom/android/server/permission/access/appop/AppIdAppOpPolicy$OnAppOpModeChangedListener;Lcom/android/server/permission/access/appop/AppOpService$OnAppIdAppOpModeChangedListener;]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/AppOpService$OnAppIdAppOpModeChangedListener;->onStateMutated()V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/appop/AppOpsCheckingServiceInterface$AppOpsModeChangedListener;Lcom/android/server/appop/AppOpsService$2;]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/AppOpService$OnPackageAppOpModeChangedListener;->onStateMutated()V+]Lcom/android/server/appop/AppOpsCheckingServiceInterface$AppOpsModeChangedListener;Lcom/android/server/appop/AppOpsService$2;]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/AppOpService$OnPermissionFlagsChangedListener;->onStateMutated()V+]Lcom/android/server/appop/AppOpsCheckingServiceInterface$AppOpsModeChangedListener;Lcom/android/server/appop/AppOpsService$2;]Ljava/lang/Number;Ljava/lang/Integer;
@@ -2267,7 +2353,8 @@
HSPLcom/android/server/permission/access/appop/AppOpService;->getUidMode(ILjava/lang/String;I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/permission/access/appop/AppOpService;->getUidModeFromPermissionState(Lcom/android/server/permission/access/GetStateScope;IILjava/lang/String;Ljava/lang/String;)I+]Ljava/util/Set;Ljava/util/ImmutableCollections$Set12;
HSPLcom/android/server/permission/access/appop/AppOpService;->getUidModes(I)Landroid/util/ArrayMap;
-HPLcom/android/server/permission/access/appop/AppOpService;->setUidMode(ILjava/lang/String;II)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/permission/access/AccessState;Lcom/android/server/permission/access/MutableAccessState;
+HSPLcom/android/server/permission/access/appop/AppOpService;->setUidMode(ILjava/lang/String;II)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/permission/access/AccessState;Lcom/android/server/permission/access/MutableAccessState;
+HSPLcom/android/server/permission/access/appop/BaseAppOpPersistence;->serializeAppOp(Lcom/android/modules/utils/BinaryXmlSerializer;Ljava/lang/String;I)V+]Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/modules/utils/BinaryXmlSerializer;
HSPLcom/android/server/permission/access/appop/BaseAppOpPersistence;->serializeAppOps(Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/server/permission/access/immutable/IndexedMap;)V+]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/PackageAppOpPolicy;->getAppOpMode(Lcom/android/server/permission/access/GetStateScope;Ljava/lang/String;ILjava/lang/String;)I+]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/appop/PackageAppOpPolicy;->getAppOpModes(Lcom/android/server/permission/access/GetStateScope;Ljava/lang/String;I)Lcom/android/server/permission/access/immutable/IndexedMap;
@@ -2287,9 +2374,10 @@
HSPLcom/android/server/permission/access/immutable/IntReferenceMap;->keyAt(I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/permission/access/immutable/IntReferenceMap;->valueAt(I)Lcom/android/server/permission/access/immutable/Immutable;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/permission/access/immutable/MutableIndexedList;->add(Ljava/lang/Object;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/permission/access/immutable/MutableReference;-><init>(Lcom/android/server/permission/access/immutable/Immutable;Lcom/android/server/permission/access/immutable/Immutable;)V
+HSPLcom/android/server/permission/access/immutable/MutableIndexedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/server/permission/access/immutable/MutableReference;->get()Lcom/android/server/permission/access/immutable/Immutable;
HSPLcom/android/server/permission/access/immutable/MutableReference;->mutate()Lcom/android/server/permission/access/immutable/Immutable;+]Lcom/android/server/permission/access/immutable/Immutable;megamorphic_types
+HSPLcom/android/server/permission/access/permission/AppIdPermissionPersistence;->parsePermission(Lcom/android/modules/utils/BinaryXmlPullParser;Lcom/android/server/permission/access/immutable/MutableIndexedMap;)V
HSPLcom/android/server/permission/access/permission/AppIdPermissionPersistence;->serializeAppId(Lcom/android/modules/utils/BinaryXmlSerializer;ILcom/android/server/permission/access/immutable/IndexedMap;)V+]Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/modules/utils/BinaryXmlSerializer;]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPersistence;->serializeAppIdPermission(Lcom/android/modules/utils/BinaryXmlSerializer;Ljava/lang/String;I)V+]Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/modules/utils/BinaryXmlSerializer;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPersistence;->serializeAppIdPermissions(Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/server/permission/access/immutable/IntReferenceMap;)V+]Lcom/android/modules/utils/BinaryXmlSerializer;Lcom/android/modules/utils/BinaryXmlSerializer;
@@ -2300,7 +2388,7 @@
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->evaluateAllPermissionStatesForPackageAndUser(Lcom/android/server/permission/access/MutateStateScope;Lcom/android/server/pm/pkg/PackageState;ILcom/android/server/pm/pkg/PackageState;)V+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/lang/Iterable;Ljava/util/Collections$UnmodifiableSet;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->evaluatePermissionState(Lcom/android/server/permission/access/MutateStateScope;IILjava/lang/String;Lcom/android/server/pm/pkg/PackageState;)V+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->findPermissionTree(Lcom/android/server/permission/access/GetStateScope;Ljava/lang/String;)Lcom/android/server/permission/access/permission/Permission;
-HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->getAppIdTargetSdkVersion(Lcom/android/server/permission/access/MutateStateScope;ILjava/lang/String;Lcom/android/server/permission/access/AccessState;)I+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
+HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->getAppIdTargetSdkVersion(Lcom/android/server/permission/access/MutateStateScope;ILjava/lang/String;Lcom/android/server/permission/access/AccessState;)I+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->getPermissionFlags(Lcom/android/server/permission/access/AccessState;IILjava/lang/String;)I+]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->getPermissionFlags(Lcom/android/server/permission/access/GetStateScope;IILjava/lang/String;)I
HSPLcom/android/server/permission/access/permission/AppIdPermissionPolicy;->getPermissions(Lcom/android/server/permission/access/GetStateScope;)Lcom/android/server/permission/access/immutable/IndexedMap;
@@ -2342,7 +2430,7 @@
HSPLcom/android/server/permission/access/permission/PermissionService;->getGrantedPermissions(Ljava/lang/String;I)Ljava/util/Set;+]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/lang/Number;Ljava/lang/Integer;
HSPLcom/android/server/permission/access/permission/PermissionService;->getInstalledPermissions(Ljava/lang/String;)Ljava/util/Set;
HSPLcom/android/server/permission/access/permission/PermissionService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/PackageManagerLocal$FilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/permission/access/permission/PermissionService;->getPermissionFlagsWithPolicy(Lcom/android/server/permission/access/GetStateScope;IILjava/lang/String;Ljava/lang/String;)I+]Ljava/util/Set;Ljava/util/ImmutableCollections$Set12;
+HSPLcom/android/server/permission/access/permission/PermissionService;->getPermissionFlagsWithPolicy(Lcom/android/server/permission/access/GetStateScope;IILjava/lang/String;Ljava/lang/String;)I
HSPLcom/android/server/permission/access/permission/PermissionService;->getPermissionInfo(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/permission/access/permission/PermissionService;->isPackageVisibleToUid(Lcom/android/server/pm/PackageManagerLocal$UnfilteredSnapshot;Ljava/lang/String;II)Z+]Lcom/android/server/pm/PackageManagerLocal$FilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;
HSPLcom/android/server/permission/access/permission/PermissionService;->isPermissionGranted(Lcom/android/server/permission/access/GetStateScope;Lcom/android/server/pm/pkg/PackageState;ILjava/lang/String;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
@@ -2361,6 +2449,7 @@
HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/content/pm/SigningDetails;,Landroid/util/ArraySet;,Ljava/lang/Integer;,Ljava/lang/String;
HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V
HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLcom/android/server/pinner/PinnerService$4;->onUidActive(I)V
HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActivePackageNameForApexModuleName(Ljava/lang/String;)Ljava/lang/String;
HSPLcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
HSPLcom/android/server/pm/AppDataHelper;->lambda$prepareAppData$2(Ljava/lang/String;Ljava/lang/String;IILandroid/os/CreateAppDataArgs;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/pkg/AndroidPackage;Landroid/os/CreateAppDataResult;Ljava/lang/Throwable;)V+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
@@ -2369,11 +2458,10 @@
HSPLcom/android/server/pm/AppIdSettingMap;-><init>(Lcom/android/server/pm/AppIdSettingMap;)V
HSPLcom/android/server/pm/AppIdSettingMap;->getSetting(I)Lcom/android/server/pm/SettingBase;+]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;
HSPLcom/android/server/pm/AppsFilterBase;-><init>()V
-HPLcom/android/server/pm/AppsFilterBase;->isImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaComponent(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaPackage(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isQueryableViaPackage(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplication(Lcom/android/server/pm/snapshot/PackageDataSnapshot;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationInternal(Lcom/android/server/pm/Computer;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationInternal(Lcom/android/server/pm/Computer;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;
HPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationUsingCache(III)Z+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;-><init>(Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;)V
HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->isGloballyEnabled()Z
@@ -2420,7 +2508,6 @@
HSPLcom/android/server/pm/ComputerEngine;->canViewInstantApps(II)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
HSPLcom/android/server/pm/ComputerEngine;->checkSignatures(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/ComputerEngine;->checkUidPermission(Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
-HPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfoUnchecked(Lcom/android/server/pm/WatchedIntentFilter;II)Landroid/content/pm/ResolveInfo;+]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserOrProfilePermission(IIZZLjava/lang/String;)V+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;
HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserPermission(IIZZLjava/lang/String;)V
HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V+]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;
@@ -2436,7 +2523,6 @@
HSPLcom/android/server/pm/ComputerEngine;->getApplicationInfo(Ljava/lang/String;JI)Landroid/content/pm/ApplicationInfo;
HSPLcom/android/server/pm/ComputerEngine;->getApplicationInfoInternal(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
HSPLcom/android/server/pm/ComputerEngine;->getApplicationInfoInternalBody(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
-HPLcom/android/server/pm/ComputerEngine;->getBlockUninstallForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
HSPLcom/android/server/pm/ComputerEngine;->getComponentEnabledSetting(Landroid/content/ComponentName;II)I+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
HSPLcom/android/server/pm/ComputerEngine;->getComponentEnabledSettingInternal(Landroid/content/ComponentName;II)I+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
HSPLcom/android/server/pm/ComputerEngine;->getComponentResolver()Lcom/android/server/pm/resolution/ComponentResolverApi;
@@ -2463,7 +2549,7 @@
HSPLcom/android/server/pm/ComputerEngine;->getPackageStateInternal(Ljava/lang/String;I)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
HSPLcom/android/server/pm/ComputerEngine;->getPackageStates()Landroid/util/ArrayMap;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
HSPLcom/android/server/pm/ComputerEngine;->getPackageUid(Ljava/lang/String;JI)I+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-HSPLcom/android/server/pm/ComputerEngine;->getPackageUidInternal(Ljava/lang/String;JII)I+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
+HSPLcom/android/server/pm/ComputerEngine;->getPackageUidInternal(Ljava/lang/String;JII)I+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUid(I)[Ljava/lang/String;
HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUidInternal(II)[Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUidInternalBody(IIIZ)[Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
@@ -2481,6 +2567,7 @@
HSPLcom/android/server/pm/ComputerEngine;->getVersion()I
HSPLcom/android/server/pm/ComputerEngine;->hasCrossUserPermission(IIIZZ)Z
HSPLcom/android/server/pm/ComputerEngine;->hasNonNegativePriority(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/ComputerEngine;->hasSigningCertificate(Ljava/lang/String;[BI)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/ComputerEngine;->instantAppInstallerActivity()Landroid/content/pm/ActivityInfo;
HSPLcom/android/server/pm/ComputerEngine;->isApexPackage(Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/ComputerEngine;->isCallerInstallerOfRecord(Lcom/android/server/pm/pkg/AndroidPackage;I)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
@@ -2527,7 +2614,6 @@
HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IJLjava/lang/String;ZZLjava/util/function/Function;)Ljava/util/List;
HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveIntentInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IIJLjava/lang/String;ZZLjava/util/function/Function;Ljava/util/Set;)Ljava/util/List;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Set;Ljava/util/HashSet;
HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->shouldSkipCurrentProfile(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;I)Z+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;->createForwardingResolveInfo(Lcom/android/server/pm/Computer;Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;JILjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/function/Function;Lcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda0;
HSPLcom/android/server/pm/GentleUpdateHelper;->onUidImportance(II)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
HSPLcom/android/server/pm/IPackageManagerBase;->checkUidPermission(Ljava/lang/String;I)I+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
HSPLcom/android/server/pm/IPackageManagerBase;->getApplicationInfo(Ljava/lang/String;JI)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
@@ -2574,14 +2660,19 @@
HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->generateLauncherActivitiesForArchivedApp(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/pkg/ArchiveState;Lcom/android/server/pm/pkg/ArchiveState;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;,Ljava/util/ImmutableCollections$List12;
HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getApplicationInfoForArchivedApp(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;+]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/LauncherActivityInfoInternal;Landroid/content/pm/LauncherActivityInfoInternal;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcuts(Ljava/lang/String;Landroid/content/pm/ShortcutQueryWrapper;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Landroid/content/pm/ShortcutServiceInternal;Lcom/android/server/pm/ShortcutService$LocalService;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingPid()I
HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingUid()I
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isHiddenProfile(Landroid/os/UserHandle;)Z+]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->lambda$getApplicationInfoForArchivedApp$2(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryActivitiesForUser(Ljava/lang/String;Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryIntentLauncherActivities(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryIntentLauncherActivities(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
HSPLcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;->applyTo(Lcom/android/internal/pm/parsing/pkg/ParsedPackage;)V
HSPLcom/android/server/pm/PackageAbiHelperImpl;->deriveNativeLibraryPaths(Lcom/android/server/pm/PackageAbiHelper$Abis;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
HSPLcom/android/server/pm/PackageArchiver;->isArchived(Lcom/android/server/pm/pkg/PackageUserState;)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
HPLcom/android/server/pm/PackageInstallerSession;->generateInfoInternal(ZZ)Landroid/content/pm/PackageInstaller$SessionInfo;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageInstaller$SessionParams;Landroid/content/pm/PackageInstaller$SessionParams;]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/PackageInstallerSession;->write(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/io/File;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Ljava/io/File;Ljava/io/File;
HSPLcom/android/server/pm/PackageKeySetData;-><init>()V
HSPLcom/android/server/pm/PackageKeySetData;-><init>(Lcom/android/server/pm/PackageKeySetData;)V
HSPLcom/android/server/pm/PackageManagerInternalBase;->canQueryPackage(ILjava/lang/String;)Z+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
@@ -2590,12 +2681,14 @@
HSPLcom/android/server/pm/PackageManagerInternalBase;->getApplicationInfo(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
HSPLcom/android/server/pm/PackageManagerInternalBase;->getInstantAppPackageName(I)Ljava/lang/String;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(I)Lcom/android/server/pm/pkg/AndroidPackage;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/AndroidPackage;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageStateInternal(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageUid(Ljava/lang/String;JI)I+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
HSPLcom/android/server/pm/PackageManagerInternalBase;->getUidTargetSdkVersion(I)I+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
HSPLcom/android/server/pm/PackageManagerInternalBase;->grantImplicitAccess(ILandroid/content/Intent;IIZ)V
HSPLcom/android/server/pm/PackageManagerInternalBase;->grantImplicitAccess(ILandroid/content/Intent;IIZZ)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageEphemeral(ILjava/lang/String;)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->isInstantApp(Ljava/lang/String;I)Z+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageEphemeral(ILjava/lang/String;)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageFrozen(Ljava/lang/String;II)Z+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageSuspended(Ljava/lang/String;I)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HSPLcom/android/server/pm/PackageManagerInternalBase;->isPermissionsReviewRequired(Ljava/lang/String;I)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
@@ -2662,11 +2755,11 @@
HSPLcom/android/server/pm/PackageSetting;->getCategoryOverride()I
HSPLcom/android/server/pm/PackageSetting;->getCpuAbiOverride()Ljava/lang/String;
HSPLcom/android/server/pm/PackageSetting;->getCurrentEnabledStateLPr(Ljava/lang/String;I)I+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
+HSPLcom/android/server/pm/PackageSetting;->getEnabled(I)I+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/pm/PackageSetting;->getInstallSource()Lcom/android/server/pm/InstallSource;
HSPLcom/android/server/pm/PackageSetting;->getKeySetData()Lcom/android/server/pm/PackageKeySetData;
HSPLcom/android/server/pm/PackageSetting;->getLastUpdateTime()J
-HSPLcom/android/server/pm/PackageSetting;->getLoadingCompletedTime()J
-HSPLcom/android/server/pm/PackageSetting;->getLoadingProgress()F
+HSPLcom/android/server/pm/PackageSetting;->getLegacyPermissionState()Lcom/android/server/pm/permission/LegacyPermissionState;
HSPLcom/android/server/pm/PackageSetting;->getPackageName()Ljava/lang/String;
HSPLcom/android/server/pm/PackageSetting;->getPkg()Lcom/android/internal/pm/parsing/pkg/AndroidPackageInternal;
HSPLcom/android/server/pm/PackageSetting;->getPkgState()Lcom/android/server/pm/pkg/PackageStateUnserialized;
@@ -2674,10 +2767,13 @@
HSPLcom/android/server/pm/PackageSetting;->getSeInfo()Ljava/lang/String;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
HSPLcom/android/server/pm/PackageSetting;->getSecondaryCpuAbi()Ljava/lang/String;
HSPLcom/android/server/pm/PackageSetting;->getSharedLibraryDependencies()Ljava/util/List;+]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
+HSPLcom/android/server/pm/PackageSetting;->getSignatures()Lcom/android/server/pm/PackageSignatures;
HSPLcom/android/server/pm/PackageSetting;->getSigningDetails()Landroid/content/pm/SigningDetails;
HSPLcom/android/server/pm/PackageSetting;->getStateForUser(Landroid/os/UserHandle;)Lcom/android/server/pm/pkg/PackageUserState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/pm/PackageSetting;->getTransientState()Lcom/android/server/pm/pkg/PackageStateUnserialized;
HSPLcom/android/server/pm/PackageSetting;->getUserStates()Landroid/util/SparseArray;
+HSPLcom/android/server/pm/PackageSetting;->getUsesSdkLibraries()[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSetting;->getUsesSdkLibrariesVersionsMajor()[J
HSPLcom/android/server/pm/PackageSetting;->getUsesStaticLibrariesVersions()[J
HSPLcom/android/server/pm/PackageSetting;->getVolumeUuid()Ljava/lang/String;
HSPLcom/android/server/pm/PackageSetting;->hasSharedUser()Z
@@ -2702,6 +2798,8 @@
HSPLcom/android/server/pm/Policy;->getMatchedSeInfo(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
HSPLcom/android/server/pm/PreferredActivityHelper;->replacePreferredActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/pm/ProtectedPackages;->hasDeviceOwnerOrProfileOwner(ILjava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/pm/ProtectedPackages;->isOwnerProtectedPackage(ILjava/lang/String;)Z
+HSPLcom/android/server/pm/ProtectedPackages;->isPackageProtectedForUser(ILjava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/pm/ProtectedPackages;->isPackageStateProtected(ILjava/lang/String;)Z
HSPLcom/android/server/pm/ProtectedPackages;->isProtectedPackage(ILjava/lang/String;)Z
HSPLcom/android/server/pm/ReconcilePackageUtils;->reconcilePackages(Ljava/util/List;Ljava/util/Map;Ljava/util/Map;Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/pm/Settings;Lcom/android/server/SystemConfig;)Ljava/util/List;
@@ -2709,6 +2807,7 @@
HSPLcom/android/server/pm/ReconciledPackage;->getCombinedAvailablePackages()Ljava/util/Map;
HSPLcom/android/server/pm/ResilientAtomicFile;-><init>(Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/String;Lcom/android/server/pm/ResilientAtomicFile$ReadEventLogger;)V
HSPLcom/android/server/pm/ResilientAtomicFile;->close()V
+HSPLcom/android/server/pm/ResilientAtomicFile;->finishWrite(Ljava/io/FileOutputStream;Z)V+]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;]Ljava/io/File;Ljava/io/File;]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
HSPLcom/android/server/pm/ResilientAtomicFile;->startWrite()Ljava/io/FileOutputStream;+]Ljava/io/File;Ljava/io/File;
HSPLcom/android/server/pm/ResolveIntentHelper;->chooseBestActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JJLjava/util/List;IZ)Landroid/content/pm/ResolveInfo;+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/UserNeedsBadgingCache;Lcom/android/server/pm/UserNeedsBadgingCache;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Ljava/util/function/Supplier;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;
HSPLcom/android/server/pm/ResolveIntentHelper;->queryIntentReceiversInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JII)Ljava/util/List;
@@ -2719,6 +2818,7 @@
HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/pkg/AndroidPackage;ZI)Ljava/lang/String;+]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/pm/SaferIntentUtils$IntentArgs;-><init>(Landroid/content/Intent;Ljava/lang/String;ZZII)V
HSPLcom/android/server/pm/SaferIntentUtils;->blockNullAction(Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Ljava/util/List;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Lcom/android/internal/pm/pkg/component/ParsedMainComponent;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;,Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Lcom/android/server/pm/SaferIntentUtils$IntentArgs;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
+HSPLcom/android/server/pm/SaferIntentUtils;->enforceIntentFilterMatchingWithIntentMatchingFlags(Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Ljava/util/List;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Lcom/android/internal/pm/pkg/component/ParsedIntentInfo;Lcom/android/internal/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/internal/pm/pkg/component/ParsedMainComponent;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;,Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Lcom/android/server/pm/SaferIntentUtils$IntentArgs;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/pm/SaferIntentUtils;->filterNonExportedComponents(Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Ljava/util/List;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Lcom/android/server/pm/SaferIntentUtils$IntentArgs;Lcom/android/server/pm/SaferIntentUtils$IntentArgs;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/pm/SaferIntentUtils;->infoToComponent(Landroid/content/pm/ComponentInfo;Lcom/android/server/pm/resolution/ComponentResolverApi;Z)Lcom/android/internal/pm/pkg/component/ParsedMainComponent;+]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ActivityInfo;,Landroid/content/pm/ServiceInfo;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;
HSPLcom/android/server/pm/ScanPackageUtils;->applyPolicy(Lcom/android/internal/pm/parsing/pkg/ParsedPackage;ILcom/android/server/pm/pkg/AndroidPackage;Z)V
@@ -2737,10 +2837,12 @@
HSPLcom/android/server/pm/Settings$1;->onChange(Lcom/android/server/utils/Watchable;)V
HSPLcom/android/server/pm/Settings$2;->createSnapshot()Lcom/android/server/pm/Settings;+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchableImpl;
HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getPackagePermissions(ILcom/android/server/utils/WatchedArrayMap;)Ljava/util/Map;+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readStateForUserSync(ILcom/android/server/pm/Settings$VersionInfo;Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;Ljava/io/File;)V
HSPLcom/android/server/pm/Settings;-><init>(Lcom/android/server/pm/Settings;)V
HSPLcom/android/server/pm/Settings;->dispatchChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchableImpl;
HSPLcom/android/server/pm/Settings;->getApplicationEnabledSettingLPr(Ljava/lang/String;I)I+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/Settings;->getComponentEnabledSettingLPr(Landroid/content/ComponentName;I)I+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
+HSPLcom/android/server/pm/Settings;->getCrossProfileIntentResolver(I)Lcom/android/server/pm/CrossProfileIntentResolver;+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;
HSPLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/Settings;->getPackageLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/pm/Settings;->getRenamedPackageLPr(Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
@@ -2768,8 +2870,6 @@
HSPLcom/android/server/pm/SharedUserSetting;->getPackageStates()Landroid/util/ArraySet;+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;Z)V
HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda24;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda31;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/pm/ShortcutPackage;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;IZ)V+]Lcom/android/server/pm/ShortcutLauncher;Lcom/android/server/pm/ShortcutLauncher;]Lcom/android/server/pm/ShortcutPackageInfo;Lcom/android/server/pm/ShortcutPackageInfo;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
HPLcom/android/server/pm/ShortcutPackage;->forEachShortcutStopWhen(Ljava/util/function/Function;)V+]Ljava/util/function/Function;Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda23;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda28;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda31;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda36;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda3;
HPLcom/android/server/pm/ShortcutPackage;->parseShortcut(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;IZ)Landroid/content/pm/ShortcutInfo;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
@@ -2779,14 +2879,15 @@
HPLcom/android/server/pm/ShortcutPackageInfo;->saveToXml(Lcom/android/server/pm/ShortcutService;Lcom/android/modules/utils/TypedXmlSerializer;Z)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Base64$Encoder;Ljava/util/Base64$Encoder;
HPLcom/android/server/pm/ShortcutPackageItem;->getResilientFile(Ljava/io/File;)Lcom/android/server/pm/ResilientAtomicFile;+]Ljava/io/File;Ljava/io/File;
HPLcom/android/server/pm/ShortcutPackageItem;->saveShortcutPackageItem()V+]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutLauncher;,Lcom/android/server/pm/ShortcutPackage;]Ljava/io/File;Ljava/io/File;
-HPLcom/android/server/pm/ShortcutParser;->parseShortcutsOneFile(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILjava/util/List;Ljava/util/List;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/pm/ShortcutParser;->parseShortcutsOneFile(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILjava/util/List;Ljava/util/List;)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/pm/ShortcutService$4;->onUidStateChanged(IIJI)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda3;-><init>(JLandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZ)V
HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$4oN-teeezN_bMPNKBELK1aAUWLM(JLandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZLandroid/content/pm/ShortcutInfo;)Z
HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcuts(ILjava/lang/String;JLjava/lang/String;Ljava/util/List;Ljava/util/List;Landroid/content/ComponentName;IIII)Ljava/util/List;+]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutLauncher;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;
HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcutsInnerLocked(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V+]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;
HPLcom/android/server/pm/ShortcutService;->getUserShortcutsLocked(I)Lcom/android/server/pm/ShortcutUser;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HSPLcom/android/server/pm/ShortcutService;->handleOnUidStateChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HPLcom/android/server/pm/ShortcutService;->injectHasAccessShortcutsPermission(II)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
HPLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
HSPLcom/android/server/pm/ShortcutService;->injectPostToHandler(Ljava/lang/Runnable;)V
HPLcom/android/server/pm/ShortcutService;->isUserUnlockedL(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
@@ -2837,7 +2938,6 @@
HSPLcom/android/server/pm/UserManagerService;->hasManageUsersPermission(I)Z
HSPLcom/android/server/pm/UserManagerService;->hasQueryOrCreateUsersPermission()Z
HSPLcom/android/server/pm/UserManagerService;->hasUserRestriction(Ljava/lang/String;I)Z+]Lcom/android/server/pm/UserManagerService$LocalService;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-HSPLcom/android/server/pm/UserManagerService;->isProfileOf(Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;)Z
HSPLcom/android/server/pm/UserManagerService;->isSameProfileGroupNoChecks(II)Z
HSPLcom/android/server/pm/UserManagerService;->isUserRunning(I)Z+]Lcom/android/server/pm/UserManagerService$LocalService;Lcom/android/server/pm/UserManagerService$LocalService;
HPLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;
@@ -2853,7 +2953,6 @@
HSPLcom/android/server/pm/UserVisibilityMediator;->isCurrentUserOrRunningProfileOfCurrentUser(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/pm/UserVisibilityMediator;->isUserVisible(I)Z
HSPLcom/android/server/pm/WatchedIntentFilter;->getIntentFilter()Landroid/content/IntentFilter;
-HSPLcom/android/server/pm/dex/DexManager;->loadInternal(Ljava/util/Map;)V
HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;)V
HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl-IA;)V
HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;->checkClosed()V
@@ -2875,8 +2974,8 @@
HSPLcom/android/server/pm/local/PackageManagerLocalImpl;->withUnfilteredSnapshot()Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
HSPLcom/android/server/pm/parsing/PackageCacher;->getCacheKey(Ljava/io/File;I)Ljava/lang/String;
HSPLcom/android/server/pm/parsing/PackageCacher;->isCacheFileUpToDate(Ljava/io/File;Ljava/io/File;)Z
-HSPLcom/android/server/pm/parsing/PackageInfoUtils;->appInfoFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)I
-HSPLcom/android/server/pm/parsing/PackageInfoUtils;->appInfoPrivateFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)I
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->appInfoFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)I+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->appInfoPrivateFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)I+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->appInfoPrivateFlagsExt(ILcom/android/server/pm/pkg/PackageStateInternal;)I+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->assignFieldsComponentInfoParsedMainComponent(Landroid/content/pm/ComponentInfo;Lcom/android/internal/pm/pkg/component/ParsedMainComponent;)V+]Lcom/android/internal/pm/pkg/component/ParsedMainComponent;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;,Lcom/android/internal/pm/pkg/component/ParsedProviderImpl;,Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->assignFieldsComponentInfoParsedMainComponent(Landroid/content/pm/ComponentInfo;Lcom/android/internal/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/PackageStateInternal;I)V
@@ -2887,7 +2986,7 @@
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generatePermissionInfo(Lcom/android/internal/pm/pkg/component/ParsedPermission;J)Landroid/content/pm/PermissionInfo;+]Lcom/android/internal/pm/pkg/component/ParsedPermission;Lcom/android/internal/pm/pkg/component/ParsedPermissionImpl;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateProviderInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/pkg/component/ParsedProvider;JLcom/android/server/pm/pkg/PackageUserStateInternal;Landroid/content/pm/ApplicationInfo;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ProviderInfo;+]Lcom/android/internal/pm/pkg/component/ParsedProvider;Lcom/android/internal/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateServiceInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/pkg/component/ParsedService;JLcom/android/server/pm/pkg/PackageUserStateInternal;Landroid/content/pm/ApplicationInfo;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ServiceInfo;+]Lcom/android/internal/pm/pkg/component/ParsedService;Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;
-HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateWithComponents(Lcom/android/server/pm/pkg/AndroidPackage;[IJJJLjava/util/Set;Ljava/util/Set;Lcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/PackageInfo;+]Lcom/android/internal/pm/pkg/component/ParsedActivity;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;]Lcom/android/internal/pm/pkg/component/ParsedAttribution;Lcom/android/internal/pm/pkg/component/ParsedAttributionImpl;]Lcom/android/internal/pm/pkg/component/ParsedPermission;Lcom/android/internal/pm/pkg/component/ParsedPermissionImpl;]Lcom/android/internal/pm/pkg/component/ParsedProvider;Lcom/android/internal/pm/pkg/component/ParsedProviderImpl;]Lcom/android/internal/pm/pkg/component/ParsedService;Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;]Lcom/android/internal/pm/pkg/component/ParsedUsesPermission;Lcom/android/internal/pm/pkg/component/ParsedUsesPermissionImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/util/Set;Landroid/util/ArraySet;,Lcom/android/server/permission/jarjar/kotlin/collections/EmptySet;,Ljava/util/Collections$UnmodifiableSet;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateWithComponents(Lcom/android/server/pm/pkg/AndroidPackage;[IJJJLjava/util/Set;Ljava/util/Set;Lcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/PackageInfo;+]Lcom/android/internal/pm/pkg/component/ParsedActivity;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;]Lcom/android/internal/pm/pkg/component/ParsedAttribution;Lcom/android/internal/pm/pkg/component/ParsedAttributionImpl;]Lcom/android/internal/pm/pkg/component/ParsedPermission;Lcom/android/internal/pm/pkg/component/ParsedPermissionImpl;]Lcom/android/internal/pm/pkg/component/ParsedProvider;Lcom/android/internal/pm/pkg/component/ParsedProviderImpl;]Lcom/android/internal/pm/pkg/component/ParsedService;Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;]Lcom/android/internal/pm/pkg/component/ParsedUsesPermission;Lcom/android/internal/pm/pkg/component/ParsedUsesPermissionImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/ArchiveState;Lcom/android/server/pm/pkg/ArchiveState;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/util/Set;Landroid/util/ArraySet;,Lcom/android/server/permission/jarjar/kotlin/collections/EmptySet;,Ljava/util/Collections$UnmodifiableSet;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->getDataDir(Lcom/android/server/pm/pkg/PackageStateInternal;I)Ljava/io/File;+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->getDeprecatedSignatures(Landroid/content/pm/SigningDetails;J)[Landroid/content/pm/Signature;
HSPLcom/android/server/pm/parsing/PackageInfoUtils;->initForUser(Landroid/content/pm/ApplicationInfo;Lcom/android/server/pm/pkg/AndroidPackage;ILcom/android/server/pm/pkg/PackageUserStateInternal;)V+]Lcom/android/internal/pm/parsing/pkg/PackageImpl;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
@@ -2900,6 +2999,7 @@
HSPLcom/android/server/pm/permission/LegacyPermission;->write(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->checkDeviceIdentifierAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->verifyCallerCanCheckAccess(Ljava/lang/String;Ljava/lang/String;II)V+]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
+HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->replacePermissions(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/pm/permission/LegacyPermissionState;-><init>()V
HSPLcom/android/server/pm/permission/LegacyPermissionState;->copyFrom(Lcom/android/server/pm/permission/LegacyPermissionState;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
HSPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;->isRegisteredAttributionSource(Landroid/content/AttributionSource;)Z+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
@@ -2923,6 +3023,7 @@
HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/permission/access/permission/PermissionService;
HSPLcom/android/server/pm/permission/PermissionManagerService;->getPersistentDeviceId(I)Ljava/lang/String;+]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;
HSPLcom/android/server/pm/permission/PermissionManagerService;->isRegisteredAttributionSource(Landroid/content/AttributionSourceState;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZLjava/lang/String;I)V+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/permission/access/permission/PermissionService;
HSPLcom/android/server/pm/pkg/PackageStateInternal;->getUserStateOrDefault(I)Lcom/android/server/pm/pkg/PackageUserState;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/pm/pkg/PackageStateInternal;->getUserStateOrDefault(I)Lcom/android/server/pm/pkg/PackageUserStateInternal;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getApexModuleName()Ljava/lang/String;
@@ -2960,7 +3061,6 @@
HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isSuspended()Z
HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isVirtualPreload()Z
HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->onChanged()V+]Lcom/android/server/utils/Watchable;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/pm/pkg/PackageUserStateImpl;
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setBoolean(IZ)V
HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setDisabledComponents(Landroid/util/ArraySet;)Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setEnabledComponents(Landroid/util/ArraySet;)Lcom/android/server/pm/pkg/PackageUserStateImpl;
HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isAvailable(Lcom/android/server/pm/pkg/PackageUserState;J)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateDefault;,Lcom/android/server/pm/pkg/PackageUserStateImpl;
@@ -3004,8 +3104,6 @@
HSPLcom/android/server/pm/resolution/ComponentResolver;->addActivitiesLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/List;Z)V+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
HSPLcom/android/server/pm/resolution/ComponentResolver;->addAllComponents(Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/lang/String;Lcom/android/server/pm/Computer;)V+]Lcom/android/internal/pm/pkg/component/ParsedActivity;Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/pm/resolution/ComponentResolver;->addProvidersLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Z)V+]Lcom/android/internal/pm/pkg/component/ParsedProvider;Lcom/android/internal/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
-HSPLcom/android/server/pm/resolution/ComponentResolver;->addReceiversLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Z)V+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
-HSPLcom/android/server/pm/resolution/ComponentResolver;->addServicesLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Z)V+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
HSPLcom/android/server/pm/resolution/ComponentResolver;->snapshot()Lcom/android/server/pm/resolution/ComponentResolverApi;
HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getActivity(Landroid/content/ComponentName;)Lcom/android/internal/pm/pkg/component/ParsedActivity;
HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getReceiver(Landroid/content/ComponentName;)Lcom/android/internal/pm/pkg/component/ParsedActivity;
@@ -3031,7 +3129,7 @@
HSPLcom/android/server/policy/AppOpsPolicy;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ILcom/android/internal/util/function/HexConsumer;)V+]Lcom/android/internal/util/function/HexConsumer;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda11;
HSPLcom/android/server/policy/AppOpsPolicy;->noteOperation(IILjava/lang/String;Ljava/lang/String;IZLjava/lang/String;ZILcom/android/internal/util/function/NonaFunction;)Landroid/app/SyncNotedAppOp;+]Lcom/android/internal/util/function/NonaFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda5;
HSPLcom/android/server/policy/AppOpsPolicy;->resolveDatasourceOp(IILjava/lang/String;Ljava/lang/String;)I
-HSPLcom/android/server/policy/AppOpsPolicy;->resolveRecordAudioOp(II)I+]Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;]Landroid/service/voice/VoiceInteractionManagerInternal;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;
+HSPLcom/android/server/policy/AppOpsPolicy;->resolveRecordAudioOp(II)I
HSPLcom/android/server/policy/AppOpsPolicy;->resolveSandboxedServiceOp(II)I
HSPLcom/android/server/policy/AppOpsPolicy;->resolveUid(II)I+]Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;]Landroid/service/voice/VoiceInteractionManagerInternal;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;
HSPLcom/android/server/policy/AppOpsPolicy;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;IZZLjava/lang/String;ZIILcom/android/internal/util/function/DodecFunction;)Landroid/app/SyncNotedAppOp;+]Lcom/android/internal/util/function/DodecFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda7;
@@ -3047,7 +3145,6 @@
HSPLcom/android/server/policy/PhoneWindowManager;->updateLockScreenTimeout()V+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/HashSet;Ljava/util/HashSet;
HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
-HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZZ)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)I+]Lcom/android/server/policy/WindowManagerPolicy$WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isOccluded()Z
@@ -3058,6 +3155,8 @@
HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->$r8$lambda$iHIoFGt-sugSqlklSHHOwdIQL9Y(Ljava/io/DataOutputStream;Landroid/content/pm/PackageManagerInternal;ILcom/android/server/pm/pkg/AndroidPackage;)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/internal/pm/parsing/pkg/PackageImpl;]Ljava/io/DataOutputStream;Ljava/io/DataOutputStream;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
HSPLcom/android/server/power/AttentionDetector;->updateUserActivity(JJ)J+]Landroid/attention/AttentionManagerInternal;Lcom/android/server/attention/AttentionManagerService$LocalService;]Lcom/android/server/power/AttentionDetector;Lcom/android/server/power/AttentionDetector;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;
HSPLcom/android/server/power/FaceDownDetector;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+HSPLcom/android/server/power/FrameworkStatsLogger;->wakelockStateChanged(ILjava/lang/String;ILcom/android/server/power/FrameworkStatsLogger$WakelockEventType;)V
+HSPLcom/android/server/power/FrameworkStatsLogger;->wakelockStateChanged(Ljava/lang/String;Landroid/os/WorkSource$WorkChain;ILcom/android/server/power/FrameworkStatsLogger$WakelockEventType;)V
HSPLcom/android/server/power/InattentiveSleepWarningController;->isShown()Z
HSPLcom/android/server/power/Notifier$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/power/Notifier;ZLjava/lang/String;IIILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;JLandroid/os/IWakeLockCallback;)V
HSPLcom/android/server/power/Notifier$$ExternalSyntheticLambda2;->run()V
@@ -3066,7 +3165,7 @@
HSPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V
HSPLcom/android/server/power/Notifier$RealInjector;->currentTimeMillis()J
HSPLcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
-HSPLcom/android/server/power/Notifier;->lambda$notifyWakeLockListener$9(ZLjava/lang/String;IIILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;JLandroid/os/IWakeLockCallback;)V+]Landroid/os/IWakeLockCallback;Landroid/os/IWakeLockCallback$Stub$Proxy;]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;
+HSPLcom/android/server/power/Notifier;->lambda$notifyWakeLockListener$9(ZLjava/lang/String;IIILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;JLandroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;
HSPLcom/android/server/power/Notifier;->logWakelockStateChanged(ILjava/lang/String;ILandroid/os/WorkSource;Lcom/android/server/power/FrameworkStatsLogger$WakelockEventType;)V+]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/FrameworkStatsLogger;Lcom/android/server/power/FrameworkStatsLogger;]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/Notifier;->notifyWakeLockListener(Landroid/os/IWakeLockCallback;Ljava/lang/String;ZIIILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/power/Notifier$Injector;Lcom/android/server/power/Notifier$RealInjector;
HSPLcom/android/server/power/Notifier;->notifyWakelockAcquisition(Ljava/lang/String;IIILandroid/os/WorkSource;Ljava/lang/String;Ljava/lang/String;J)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
@@ -3095,7 +3194,7 @@
HSPLcom/android/server/power/PowerGroup;->supportsSandmanLocked()Z
HSPLcom/android/server/power/PowerGroup;->updateLocked(FLjava/lang/CharSequence;ZZIIFZZLandroid/os/PowerSaveState;ZZZZZZ)Z+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
HSPLcom/android/server/power/PowerGroup;->updateScreenPolicyLocked(ZZZZZ)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;
-HSPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;ILandroid/os/IWakeLockCallback;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;ILandroid/os/IWakeLockCallback;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/WorkSource;Landroid/os/WorkSource;
HSPLcom/android/server/power/PowerManagerService$BinderService;->isDeviceIdleMode()Z
HSPLcom/android/server/power/PowerManagerService$BinderService;->isDisplayInteractive(I)Z
HSPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z
@@ -3134,6 +3233,7 @@
HPLcom/android/server/power/PowerManagerService;->isBeingKeptAwakeLocked(Lcom/android/server/power/PowerGroup;)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
HSPLcom/android/server/power/PowerManagerService;->isDeviceIdleModeInternal()Z
HSPLcom/android/server/power/PowerManagerService;->isInteractiveInternal(II)Z+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
+HSPLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked(Lcom/android/server/power/PowerGroup;)Z+]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$2;
HSPLcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
HSPLcom/android/server/power/PowerManagerService;->maybeHideInattentiveSleepWarningLocked(JJ)Z+]Lcom/android/server/power/InattentiveSleepWarningController;Lcom/android/server/power/InattentiveSleepWarningController;
HSPLcom/android/server/power/PowerManagerService;->needSuspendBlockerLocked()Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
@@ -3198,6 +3298,7 @@
HSPLcom/android/server/power/feature/PowerManagerFlags;->improveWakelockLatency()Z
HSPLcom/android/server/power/feature/PowerManagerFlags;->isFrameworkWakelockInfoEnabled()Z
HSPLcom/android/server/power/feature/PowerManagerFlags;->isPolicyReasonInDisplayPowerRequestEnabled()Z
+HSPLcom/android/server/power/feature/PowerManagerFlags;->isScreenTimeoutPolicyListenerApiEnabled()Z
HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;-><init>(Lcom/android/server/power/hint/HintManagerService;III[ILandroid/os/IBinder;JJLjava/lang/Integer;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;
HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->close()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/server/power/hint/HintManagerService$AppHintSessionSnapshot;Lcom/android/server/power/hint/HintManagerService$AppHintSessionSnapshot;]Lcom/android/server/power/hint/HintManagerService$NativeWrapper;Lcom/android/server/power/hint/HintManagerService$NativeWrapper;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/power/hint/HintManagerService$BinderService;->createHintSessionWithConfig(Landroid/os/IBinder;ILandroid/os/SessionCreationConfig;Landroid/hardware/power/SessionConfig;)Landroid/os/IHintManager$SessionCreationReturn;+]Lcom/android/server/power/hint/HintManagerService$AppHintSessionSnapshot;Lcom/android/server/power/hint/HintManagerService$AppHintSessionSnapshot;]Lcom/android/server/power/hint/HintManagerService$NativeWrapper;Lcom/android/server/power/hint/HintManagerService$NativeWrapper;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Landroid/util/ArraySet;
@@ -3216,16 +3317,17 @@
HSPLcom/android/server/power/stats/BatteryStatsImpl$4;->retrieveUidWakelockDuration(Lcom/android/server/power/stats/WakelockPowerStatsCollector$WakelockDurationRetriever$Callback;)V+]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/os/BatteryStats$Uid$Wakelock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/WakelockPowerStatsCollector$WakelockDurationRetriever$Callback;Lcom/android/server/power/stats/WakelockPowerStatsCollector$$ExternalSyntheticLambda0;
HPLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;->addCpuClusterSpeedDurationsMs(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;IIJ)V+]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;
HPLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;->getOrCreateUidCpuClusterCharges(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;)[D
+HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->stopRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->getCurrentDurationMsLocked(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->getMaxDurationMsLocked(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->getTotalDurationMsLocked(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->stopRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;->uidProcessStateChanged(II)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->addCountLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->addCountLocked(JZ)V
HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
HPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;->addCountLocked([JZ)V
@@ -3251,7 +3353,7 @@
HSPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;megamorphic_types
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->startLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;->getWakeTime(I)Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;->getWakeTime(I)Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
@@ -3263,15 +3365,18 @@
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getOrCreateEnergyConsumerStatsIfSupportedLocked()Lcom/android/internal/power/EnergyConsumerStats;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getPackageStatsLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getPidStatsLocked(I)Landroid/os/BatteryStats$Uid$Pid;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStateTime(IJI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStatsLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getSensorTimerLocked(IZ)Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getServiceStatsLocked(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiBatchedScanTime(IJI)J
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiControllerActivity()Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->maybeScheduleExternalStatsSync(II)V+]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStartWakeLocked(ILjava/lang/String;IJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopJobLocked(Ljava/lang/String;JI)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopJobLocked(Ljava/lang/String;JI)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopWakeLocked(ILjava/lang/String;IJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->reset(JJI)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$2;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->updateOnBatteryBgTimeBase(JJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->updateOnBatteryScreenOffBgTimeBase(JJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->updateUidProcessStateLocked(IJJ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
@@ -3281,26 +3386,27 @@
HSPLcom/android/server/power/stats/BatteryStatsImpl;->getRpmTimerLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;+]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->getServiceStatsLocked(ILjava/lang/String;Ljava/lang/String;JJ)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->getUidStatsLocked(IJJ)Lcom/android/server/power/stats/BatteryStatsImpl$Uid;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->lambda$readKernelUidCpuFreqTimesLocked$4(JJZZZII[ILcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;I[J)V+]Lcom/android/internal/os/CpuScalingPolicies;Lcom/android/internal/os/CpuScalingPolicies;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;]Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;Lcom/android/server/am/BatteryStatsService$3;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->mapUid(I)I+]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;
HPLcom/android/server/power/stats/BatteryStatsImpl;->noteChangeWakelockFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobFinishLocked(Ljava/lang/String;IIJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobStartLocked(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobFinishLocked(Ljava/lang/String;IIJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobStartLocked(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStartWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStartWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IZJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;]Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStopWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStopWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/feature/PowerManagerFlags;Lcom/android/server/power/feature/PowerManagerFlags;]Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteUidProcessStateLocked(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HPLcom/android/server/power/stats/BatteryStatsImpl;->noteWakeupReasonLocked(Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
HSPLcom/android/server/power/stats/BatteryStatsImpl;->recordPowerStats(Lcom/android/internal/os/PowerStats;)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->reportChangesToStatsLog(III)V+]Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;Lcom/android/server/power/stats/BatteryStatsImpl$FrameworkStatsLogger;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->retrieveBluetoothScanTimesLocked(Lcom/android/server/power/stats/BluetoothPowerStatsCollector$BluetoothStatsRetriever$Callback;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BluetoothPowerStatsCollector$BluetoothStatsRetriever$Callback;Lcom/android/server/power/stats/BluetoothPowerStatsCollector$$ExternalSyntheticLambda0;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->retrieveWifiScanTimesLocked(Lcom/android/server/power/stats/WifiPowerStatsCollector$WifiStatsRetriever$Callback;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/WifiPowerStatsCollector$WifiStatsRetriever$Callback;Lcom/android/server/power/stats/WifiPowerStatsCollector$$ExternalSyntheticLambda1;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->setBatteryStateLocked(IIIIIIIIJJJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->setBatteryStateLocked(IIIIIIIIJJJJ)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryUsageStatsProvider;Lcom/android/server/power/stats/BatteryUsageStatsProvider;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateClusterSpeedTimes(Landroid/util/SparseLongArray;ZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/internal/os/CpuScalingPolicies;Lcom/android/internal/os/CpuScalingPolicies;]Lcom/android/internal/os/KernelCpuSpeedReader;Lcom/android/internal/os/KernelCpuSpeedReader;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuTimeLocked(ZZ[J)V+]Lcom/android/internal/os/CpuScalingPolicies;Lcom/android/internal/os/CpuScalingPolicies;]Lcom/android/internal/os/KernelCpuSpeedReader;Lcom/android/internal/os/KernelCpuSpeedReader;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidActiveTimeReader;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidClusterTimeReader;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidUserSysTimeReader;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateKernelWakelocksLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;,Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateRpmStatsLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateWifiBatteryStats(Landroid/os/connectivity/WifiActivityEnergyInfo;Landroid/net/NetworkStats;JJJ)V+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/internal/os/MonotonicClock;Lcom/android/internal/os/MonotonicClock;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;]Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$2;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;,Ljava/util/HashMap$EntryIterator;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;,Ljava/util/HashMap$Node;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;,Ljava/util/HashMap$EntrySet;
HSPLcom/android/server/power/stats/BluetoothPowerStatsCollector;->collectBluetoothActivityInfo()Landroid/bluetooth/BluetoothActivityEnergyInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BluetoothPowerStatsCollector$BluetoothStatsRetriever;Lcom/android/server/power/stats/BatteryStatsImpl$BluetoothStatsRetrieverImpl;]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;]Lcom/android/server/power/stats/format/BluetoothPowerStatsLayout;Lcom/android/server/power/stats/format/BluetoothPowerStatsLayout;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BluetoothPowerStatsLayout;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/power/stats/CpuPowerCalculator;->calculatePerCpuFreqPowerMah(IIJ)D+]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;
@@ -3310,33 +3416,38 @@
HSPLcom/android/server/power/stats/EnergyConsumerSnapshot;->updateAndGetDelta([Landroid/hardware/power/stats/EnergyConsumerResult;I)Lcom/android/server/power/stats/EnergyConsumerSnapshot$EnergyConsumerDeltaData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
HSPLcom/android/server/power/stats/KernelWakelockReader;->removeOldStats(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;+]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
HSPLcom/android/server/power/stats/KernelWakelockReader;->updateWakelockStats([Landroid/system/suspend/internal/WakeLockInfo;Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;+]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;
+HSPLcom/android/server/power/stats/MobileRadioPowerStatsCollector;->collectModemActivityInfo()Landroid/telephony/ModemActivityInfo;+]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;]Ljava/util/function/LongSupplier;Lcom/android/server/power/stats/BatteryStatsImpl$PowerStatsCollectorInjector$$ExternalSyntheticLambda3;,Lcom/android/server/power/stats/BatteryStatsImpl$PowerStatsCollectorInjector$$ExternalSyntheticLambda4;
HSPLcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyHelper;->collectConsumedEnergy(Lcom/android/internal/os/PowerStats;Lcom/android/server/power/stats/format/PowerStatsLayout;)Z+]Lcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyRetriever;Lcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyRetrieverImpl;
HSPLcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyHelper;->populatePowerStats(Lcom/android/internal/os/PowerStats;Lcom/android/server/power/stats/format/PowerStatsLayout;[Landroid/hardware/power/stats/EnergyConsumerResult;II)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;]Lcom/android/server/power/stats/format/PowerStatsLayout;megamorphic_types
-HSPLcom/android/server/power/stats/PowerStatsCollector;->deliverStats(Lcom/android/internal/os/PowerStats;)V+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/util/function/Consumer;Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda3;,Lcom/android/server/power/stats/CustomEnergyConsumerPowerStatsCollector$$ExternalSyntheticLambda0;
+HSPLcom/android/server/power/stats/PowerStatsCollector;->deliverStats(Lcom/android/internal/os/PowerStats;)V+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/util/function/Consumer;Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda3;,Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda8;,Lcom/android/server/power/stats/CustomEnergyConsumerPowerStatsCollector$$ExternalSyntheticLambda0;
HSPLcom/android/server/power/stats/PowerStatsCollector;->schedule()Z+]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;
HSPLcom/android/server/power/stats/PowerStatsUidResolver;->mapUid(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/power/stats/ScreenPowerStatsCollector;->collectStats()Lcom/android/internal/os/PowerStats;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyHelper;Lcom/android/server/power/stats/PowerStatsCollector$ConsumedEnergyHelper;]Lcom/android/server/power/stats/ScreenPowerStatsCollector$ScreenUsageTimeRetriever;Lcom/android/server/power/stats/BatteryStatsImpl$2;]Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;
+HSPLcom/android/server/power/stats/ScreenPowerStatsCollector;->lambda$collectStats$0(IJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;]Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;
HSPLcom/android/server/power/stats/UsageBasedPowerEstimator;->calculatePower(J)D
+HSPLcom/android/server/power/stats/WifiPowerStatsCollector;->collectNetworkStats()Landroid/net/NetworkStats;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/PowerStatsUidResolver;Lcom/android/server/power/stats/PowerStatsUidResolver;]Lcom/android/server/power/stats/WifiPowerStatsCollector$Injector;Lcom/android/server/power/stats/BatteryStatsImpl$PowerStatsCollectorInjector;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/WifiPowerStatsLayout;]Lcom/android/server/power/stats/format/WifiPowerStatsLayout;Lcom/android/server/power/stats/format/WifiPowerStatsLayout;]Ljava/util/function/Supplier;Lcom/android/server/power/stats/BatteryStatsImpl$PowerStatsCollectorInjector$$ExternalSyntheticLambda1;
HSPLcom/android/server/power/stats/format/BluetoothPowerStatsLayout;->getUidRxBytes([J)J
HSPLcom/android/server/power/stats/format/BluetoothPowerStatsLayout;->getUidTxBytes([J)J
HSPLcom/android/server/power/stats/format/CpuPowerStatsLayout;->getCpuPowerBracketCount()I
HSPLcom/android/server/power/stats/format/CpuPowerStatsLayout;->getTimeByScalingStep([JI)J
HSPLcom/android/server/power/stats/format/CpuPowerStatsLayout;->setUidTimeByPowerBracket([JIJ)V
+HSPLcom/android/server/power/stats/format/PowerStatsLayout;-><init>()V
HSPLcom/android/server/power/stats/format/PowerStatsLayout;-><init>(Lcom/android/internal/os/PowerStats$Descriptor;)V
HSPLcom/android/server/power/stats/format/PowerStatsLayout;->appendFormat(Ljava/lang/StringBuilder;IILjava/lang/String;I)V
HSPLcom/android/server/power/stats/format/PowerStatsLayout;->getUidConsumedEnergy([JI)J
-HSPLcom/android/server/power/stats/format/PowerStatsLayout;->getUidPowerEstimate([J)D
HSPLcom/android/server/power/stats/format/PowerStatsLayout;->getUidUsageDuration([J)J
+HSPLcom/android/server/power/stats/format/PowerStatsLayout;->getUsageDuration([J)J
HSPLcom/android/server/power/stats/format/PowerStatsLayout;->setUidPowerEstimate([JD)V
HSPLcom/android/server/power/stats/format/PowerStatsLayout;->toExtras(Landroid/os/PersistableBundle;)V
HSPLcom/android/server/power/stats/format/ScreenPowerStatsLayout;-><init>(Lcom/android/internal/os/PowerStats$Descriptor;)V
HSPLcom/android/server/power/stats/format/WifiPowerStatsLayout;->getUidRxPackets([J)J
HSPLcom/android/server/power/stats/format/WifiPowerStatsLayout;->getUidTxPackets([J)J
+HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;-><init>(Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig;Landroid/util/SparseBooleanArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->addClockUpdate(JJ)V+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->addPowerStats(Lcom/android/internal/os/PowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->getPowerComponentStats()Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->isCompatible(Lcom/android/internal/os/PowerStats;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->noteStateChange(Landroid/os/BatteryStats$HistoryItem;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
+HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->reset()V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStats;->setUidState(IIIJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;->getDeviceStateConfig()[Lcom/android/server/power/stats/processor/MultiStateStats$States;
HSPLcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;->getUidStateConfig()[Lcom/android/server/power/stats/processor/MultiStateStats$States;
@@ -3345,11 +3456,13 @@
HSPLcom/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor;->lambda$finish$0(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;[I)V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/AmbientDisplayPowerStatsLayout;]Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;Lcom/android/server/power/stats/format/ScreenPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/AudioPowerStatsProcessor;->getBinaryState(Landroid/os/BatteryStats$HistoryItem;)I
HSPLcom/android/server/power/stats/processor/BasePowerStatsProcessor;->finish(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/format/BasePowerStatsLayout;Lcom/android/server/power/stats/format/BasePowerStatsLayout;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BasePowerStatsLayout;]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/power/stats/processor/BasePowerStatsProcessor;->noteBatteryLevel(IIJ)V
HSPLcom/android/server/power/stats/processor/BasePowerStatsProcessor;->setUidState(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;IIIJ)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->combineDevicePowerEstimates(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;)V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BinaryStatePowerStatsLayout;,Lcom/android/server/power/stats/format/GnssPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->computeDevicePowerEstimates(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;Z)V+]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BinaryStatePowerStatsLayout;,Lcom/android/server/power/stats/format/GnssPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->computeUidActivityTotals(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Ljava/util/List;)V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BinaryStatePowerStatsLayout;,Lcom/android/server/power/stats/format/GnssPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->computeUidPowerEstimates(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Ljava/util/List;)V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BinaryStatePowerStatsLayout;,Lcom/android/server/power/stats/format/GnssPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->ensureInitialized()V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/BinaryStatePowerStatsLayout;,Lcom/android/server/power/stats/format/GnssPowerStatsLayout;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->finish(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Lcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;megamorphic_types]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->flushPowerStats(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;->noteStateChange(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Landroid/os/BatteryStats$HistoryItem;)V+]Lcom/android/server/power/stats/processor/BinaryStatePowerStatsProcessor;megamorphic_types
@@ -3380,7 +3493,7 @@
HSPLcom/android/server/power/stats/processor/MobileRadioPowerStatsProcessor;->computeUidRxTxTotals(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;ILcom/android/server/power/stats/processor/PowerStatsProcessor$UidStateEstimate;)V+]Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/MobileRadioPowerStatsProcessor;->finish(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/MobileRadioPowerStatsProcessor;->lambda$computeDevicePowerEstimates$0(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;[ILcom/android/server/power/stats/processor/MobileRadioPowerStatsProcessor$Intermediates;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;]Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
-HPLcom/android/server/power/stats/processor/MultiStateStats$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/power/stats/processor/MultiStateStats$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
HSPLcom/android/server/power/stats/processor/MultiStateStats$Factory;-><init>(I[Lcom/android/server/power/stats/processor/MultiStateStats$States;)V
HSPLcom/android/server/power/stats/processor/MultiStateStats$Factory;->create()Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/MultiStateStats$Factory;->getSerialState([I)I+]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
@@ -3392,17 +3505,19 @@
HSPLcom/android/server/power/stats/processor/MultiStateStats;-><init>(Lcom/android/server/power/stats/processor/MultiStateStats$Factory;I)V
HSPLcom/android/server/power/stats/processor/MultiStateStats;->getStats([J[I)V+]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
HSPLcom/android/server/power/stats/processor/MultiStateStats;->increment([JJ)V
+HSPLcom/android/server/power/stats/processor/MultiStateStats;->lambda$writeXml$0(Lcom/android/modules/utils/TypedXmlSerializer;[J[I)V
HSPLcom/android/server/power/stats/processor/MultiStateStats;->setState(IIJ)V+]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
HSPLcom/android/server/power/stats/processor/MultiStateStats;->setStats([I[J)V+]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
-HPLcom/android/server/power/stats/processor/MultiStateStats;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
-HPLcom/android/server/power/stats/processor/MultiStateStats;->writeXmlForStates(Lcom/android/modules/utils/TypedXmlSerializer;[I[J)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
+HSPLcom/android/server/power/stats/processor/MultiStateStats;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
+HSPLcom/android/server/power/stats/processor/MultiStateStats;->writeXmlForStates(Lcom/android/modules/utils/TypedXmlSerializer;[I[J)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;
+HSPLcom/android/server/power/stats/processor/PhoneCallPowerStatsProcessor;->finish(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Lcom/android/server/power/stats/processor/AggregatedPowerStats;Lcom/android/server/power/stats/processor/AggregatedPowerStats;]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
+HSPLcom/android/server/power/stats/processor/PhoneCallPowerStatsProcessor;->lambda$finish$0(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;[I)V+]Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;Lcom/android/server/power/stats/format/MobileRadioPowerStatsLayout;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/PhoneCallPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;-><init>(Lcom/android/server/power/stats/processor/AggregatedPowerStats;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;)V+]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->addPowerStats(Lcom/android/internal/os/PowerStats;J)V+]Lcom/android/server/power/stats/processor/PowerStatsProcessor;megamorphic_types
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->addProcessedPowerStats(Lcom/android/internal/os/PowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->collectUids(Ljava/util/Collection;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Collection;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->createDeviceStats(J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->createUidStats(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats$UidStats;J)V+]Lcom/android/server/power/stats/processor/MultiStateStats$Factory;Lcom/android/server/power/stats/processor/MultiStateStats$Factory;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
-HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->finish(J)V+]Lcom/android/server/power/stats/processor/PowerStatsProcessor;megamorphic_types
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->getDeviceStats([J[I)Z+]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->getUidStats(I)Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats$UidStats;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/MultiStateStats$States;Lcom/android/server/power/stats/processor/MultiStateStats$States;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->getUidStats([JI[I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
@@ -3413,7 +3528,7 @@
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->setState(IIJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/MultiStateStats$States;Lcom/android/server/power/stats/processor/MultiStateStats$States;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->setUidState(IIIJ)V+]Lcom/android/server/power/stats/processor/PowerStatsProcessor;megamorphic_types
HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->setUidStats(I[I[J)V+]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
-HPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/PowerStats$Descriptor;Lcom/android/internal/os/PowerStats$Descriptor;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
+HSPLcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/PowerStats$Descriptor;Lcom/android/internal/os/PowerStats$Descriptor;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/power/stats/processor/MultiStateStats;Lcom/android/server/power/stats/processor/MultiStateStats;
HSPLcom/android/server/power/stats/processor/PowerStatsAggregator;->aggregatePowerStats(Lcom/android/internal/os/BatteryStatsHistory;JJLjava/util/function/Consumer;)V+]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/internal/os/BatteryStatsHistoryIterator;Lcom/android/internal/os/BatteryStatsHistoryIterator;]Lcom/android/server/power/stats/processor/AggregatedPowerStats;Lcom/android/server/power/stats/processor/AggregatedPowerStats;]Ljava/util/function/Consumer;Lcom/android/server/power/stats/processor/MultiStatePowerAttributor$$ExternalSyntheticLambda17;,Lcom/android/server/power/stats/processor/PowerStatsExporter$$ExternalSyntheticLambda0;
HSPLcom/android/server/power/stats/processor/PowerStatsExporter$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/stats/processor/PowerStatsExporter;IILcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;[J[DLcom/android/server/power/stats/format/PowerStatsLayout;[JZLcom/android/server/power/stats/processor/PowerStatsExporter$BatteryLevelInfo;)V
HSPLcom/android/server/power/stats/processor/PowerStatsExporter$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
@@ -3428,10 +3543,14 @@
HSPLcom/android/server/power/stats/processor/PowerStatsExporter;->populateBatteryUsageStatsBuilder(Landroid/os/BatteryUsageStats$Builder;Lcom/android/server/power/stats/processor/AggregatedPowerStats;)V+]Lcom/android/server/power/stats/processor/AggregatedPowerStats;Lcom/android/server/power/stats/processor/AggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerStatsExporter;->populateBatteryUsageStatsBuilder(Landroid/os/BatteryUsageStats$Builder;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;)V+]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/PowerStatsExporter;->populateUidBatteryConsumers(Landroid/os/BatteryUsageStats$Builder;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/format/PowerStatsLayout;Ljava/util/List;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;[JZII)V+]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;-><init>(Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;)V
+HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;->addDeviceStateEstimations()V+]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;->addUidStateEstimations()V+]Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;Lcom/android/server/power/stats/processor/AggregatedPowerStatsConfig$PowerComponent;]Lcom/android/server/power/stats/processor/MultiStateStats$States;Lcom/android/server/power/stats/processor/MultiStateStats$States;]Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;->getCombinedDeviceStateEstimate([Lcom/android/server/power/stats/processor/MultiStateStats$States;[I)Lcom/android/server/power/stats/processor/PowerStatsProcessor$CombinedDeviceStateEstimate;+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;->getUidStateEstimate(Lcom/android/server/power/stats/processor/PowerStatsProcessor$CombinedDeviceStateEstimate;)Lcom/android/server/power/stats/processor/PowerStatsProcessor$UidStateEstimate;+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;->resetIntermediates()V+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor;->concatLabels([Lcom/android/server/power/stats/processor/MultiStateStats$States;[I)Ljava/lang/String;+]Lcom/android/server/power/stats/processor/MultiStateStats$States;Lcom/android/server/power/stats/processor/MultiStateStats$States;
+HSPLcom/android/server/power/stats/processor/PowerStatsProcessor;->getAllTrackedStateCombinations([Lcom/android/server/power/stats/processor/MultiStateStats$States;)[[I
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor;->noteStateChange(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Landroid/os/BatteryStats$HistoryItem;)V
HSPLcom/android/server/power/stats/processor/PowerStatsProcessor;->setUidState(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;IIIJ)V+]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
HSPLcom/android/server/power/stats/processor/ScreenPowerStatsProcessor;->combineDeviceStateEstimates()V+]Ljava/util/List;Ljava/util/ArrayList;
@@ -3443,6 +3562,7 @@
HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->computeUidPowerEstimates(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Ljava/util/List;)V+]Landroid/hardware/SensorManager;Landroid/hardware/SystemSensorManager;]Lcom/android/server/power/stats/format/PowerStatsLayout;Lcom/android/server/power/stats/format/SensorPowerStatsLayout;]Lcom/android/server/power/stats/format/SensorPowerStatsLayout;Lcom/android/server/power/stats/format/SensorPowerStatsLayout;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$UnmodifiableRandomAccessList;
HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->finish(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;]Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;Lcom/android/server/power/stats/processor/PowerStatsProcessor$PowerEstimationPlan;]Lcom/android/server/power/stats/processor/SensorPowerStatsProcessor;Lcom/android/server/power/stats/processor/SensorPowerStatsProcessor;
HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->flushPowerStats(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;
+HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->makeLabel(Landroid/hardware/Sensor;Ljava/util/List;)Ljava/lang/String;+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->noteStateChange(Lcom/android/server/power/stats/processor/PowerComponentAggregatedPowerStats;Landroid/os/BatteryStats$HistoryItem;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/processor/SensorPowerStatsProcessor;Lcom/android/server/power/stats/processor/SensorPowerStatsProcessor;
HSPLcom/android/server/power/stats/processor/SensorPowerStatsProcessor;->recordUsageDuration(Lcom/android/server/power/stats/processor/SensorPowerStatsProcessor$SensorState;J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/format/SensorPowerStatsLayout;Lcom/android/server/power/stats/format/SensorPowerStatsLayout;
HSPLcom/android/server/power/stats/processor/VideoPowerStatsProcessor;->getBinaryState(Landroid/os/BatteryStats$HistoryItem;)I
@@ -3457,7 +3577,6 @@
HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->attemptAttributionWith(IJLandroid/util/SparseIntArray;)Z+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->logWakeupAttribution(Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteUidProcessState(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteWakeupTimeAndReason(JJLjava/lang/String;)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteWakingActivity(IJ[I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/powerstats/PowerStatsService$LocalService;->getEnergyConsumedAsync([I)Ljava/util/concurrent/CompletableFuture;
HSPLcom/android/server/powerstats/PowerStatsService;->getHandler()Landroid/os/Handler;
@@ -3465,10 +3584,12 @@
HSPLcom/android/server/selinux/RateLimiter;->tryAcquire()Z+]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;
HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->addPath(Ljava/util/List;)V+]Lcom/android/server/slice/DirtyTracker;Lcom/android/server/slice/SliceClientPermissions;]Ljava/util/List;Landroid/net/Uri$PathSegments;
HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->isPathPrefixMatch([Ljava/lang/String;[Ljava/lang/String;)Z
+HPLcom/android/server/slice/SliceManagerService;->getProviderPkg(Landroid/net/Uri;I)Ljava/lang/String;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->equals(Ljava/lang/Object;)Z
HPLcom/android/server/slice/SlicePermissionManager;->grantSliceAccess(Ljava/lang/String;ILjava/lang/String;ILandroid/net/Uri;)V+]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;]Lcom/android/server/slice/SliceClientPermissions;Lcom/android/server/slice/SliceClientPermissions;]Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;]Lcom/android/server/slice/SliceProviderPermissions;Lcom/android/server/slice/SliceProviderPermissions;
HSPLcom/android/server/smartspace/SmartspaceManagerService$SmartspaceManagerStub;->runForUserLocked(Ljava/lang/String;Landroid/app/smartspace/SmartspaceSessionId;Ljava/util/function/Consumer;)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/infra/ServiceNameResolver;Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Ljava/util/function/Consumer;megamorphic_types
HPLcom/android/server/soundtrigger/SoundTriggerService$MyAppOpsListener;->onOpChanged(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Ljava/util/function/Consumer;Lcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl$$ExternalSyntheticLambda2;
+HSPLcom/android/server/stats/pull/AggregatedMobileDataStatsPuller$$ExternalSyntheticLambda1;->run()V
HSPLcom/android/server/stats/pull/AggregatedMobileDataStatsPuller;->noteUidProcessState(IIJJ)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda18;->onUidCpuTime(ILjava/lang/Object;)V
HPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I+]Lcom/android/server/stats/pull/AggregatedMobileDataStatsPuller;Lcom/android/server/stats/pull/AggregatedMobileDataStatsPuller;]Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService;
@@ -3483,6 +3604,7 @@
HPLcom/android/server/stats/pull/StatsPullAtomService;->pullKernelWakelockLocked(ILjava/util/List;)I+]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
HPLcom/android/server/stats/pull/StatsPullAtomService;->pullModemActivityInfoLocked(ILjava/util/List;)I+]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/stats/pull/StatsPullAtomService;->removeEmptyEntries(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->sampleAppOps(Ljava/util/List;Ljava/util/List;II)I+]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStats(Landroid/net/NetworkStats;Ljava/util/function/Function;)Landroid/net/NetworkStats;+]Ljava/util/function/Function;Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda2;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda3;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda7;
HSPLcom/android/server/stats/pull/netstats/NetworkStatsAccumulator;->snapshotPlusFollowingStats(JLcom/android/server/stats/pull/netstats/NetworkStatsAccumulator$StatsQueryFunction;)Landroid/net/NetworkStats;+]Lcom/android/server/stats/pull/netstats/NetworkStatsAccumulator$StatsQueryFunction;Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda5;
HSPLcom/android/server/stats/pull/netstats/NetworkStatsExt;-><init>(Landroid/net/NetworkStats;[IZZZILcom/android/server/stats/pull/netstats/SubInfo;IZ)V
@@ -3490,7 +3612,8 @@
HSPLcom/android/server/stats/pull/netstats/NetworkStatsUtils;->fromBucket(Landroid/app/usage/NetworkStats$Bucket;)Landroid/net/NetworkStats$Entry;+]Landroid/app/usage/NetworkStats$Bucket;Landroid/app/usage/NetworkStats$Bucket;
HSPLcom/android/server/stats/pull/netstats/NetworkStatsUtils;->fromPublicNetworkStats(Landroid/app/usage/NetworkStats;)Landroid/net/NetworkStats;
HPLcom/android/server/statusbar/StatusBarManagerService$1;->setTopAppHidesStatusBar(IZ)V+]Lcom/android/internal/statusbar/IStatusBar;Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
-HSPLcom/android/server/storage/DeviceStorageMonitorService;->checkLow()V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/os/storage/StorageManager;Landroid/os/storage/StorageManager;]Landroid/os/storage/VolumeInfo;Landroid/os/storage/VolumeInfo;]Ljava/io/File;Ljava/io/File;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/storage/CacheQuotaStrategy;->getUnfulfilledRequests()Ljava/util/List;+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/storage/DeviceStorageMonitorService;->checkLow()V+]Landroid/os/storage/StorageManager;Landroid/os/storage/StorageManager;]Landroid/os/storage/VolumeInfo;Landroid/os/storage/VolumeInfo;]Ljava/io/File;Ljava/io/File;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/trust/TrustManagerService$3;->isDeviceLocked(II)Z+]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;
HSPLcom/android/server/trust/TrustManagerService$3;->isDeviceSecure(II)Z+]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;
HSPLcom/android/server/trust/TrustManagerService;->refreshAgentList(I)V+]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;]Lcom/android/server/trust/TrustAgentWrapper;Lcom/android/server/trust/TrustAgentWrapper;]Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
@@ -3526,9 +3649,11 @@
HPLcom/android/server/usage/AppStandbyController;->onUsageEvent(ILandroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
HPLcom/android/server/usage/AppStandbyController;->reportEventLocked(Ljava/lang/String;IJI)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
HSPLcom/android/server/usage/AppStandbyController;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HSPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/server/usage/BroadcastResponseStatsLogger$Data;Lcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;
HPLcom/android/server/usage/IntervalStats;-><init>()V
HPLcom/android/server/usage/IntervalStats;->deobfuscateEvents(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;
HPLcom/android/server/usage/IntervalStats;->deobfuscateUsageStats(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/usage/IntervalStats;->getOrCreateConfigurationStats(Landroid/content/res/Configuration;)Landroid/app/usage/ConfigurationStats;
HPLcom/android/server/usage/IntervalStats;->getOrCreateUsageStats(Ljava/lang/String;)Landroid/app/usage/UsageStats;
HPLcom/android/server/usage/IntervalStats;->obfuscateEventsData(Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;
HPLcom/android/server/usage/IntervalStats;->obfuscateUsageStatsData(Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -3551,7 +3676,9 @@
HPLcom/android/server/usage/UsageStatsProtoV2;->parseUsageStats(Landroid/util/proto/ProtoInputStream;J)Landroid/app/usage/UsageStats;
HPLcom/android/server/usage/UsageStatsProtoV2;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;Z)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Landroid/util/SparseArray;Landroid/util/SparseArray;
HPLcom/android/server/usage/UsageStatsProtoV2;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/usage/UsageStatsProtoV2;->writeObfuscatedData(Ljava/io/OutputStream;Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/usage/UsageStatsProtoV2;->writeOffsetTimestamp(Landroid/util/proto/ProtoOutputStream;JJJ)V
+HSPLcom/android/server/usage/UsageStatsService$$ExternalSyntheticLambda0;->handleMessage(Landroid/os/Message;)Z
HSPLcom/android/server/usage/UsageStatsService$3;->onUidStateChanged(IIJI)V
HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I+]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
HPLcom/android/server/usage/UsageStatsService$BinderService;->hasQueryPermission(Ljava/lang/String;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Context;Landroid/app/ContextImpl;
@@ -3566,7 +3693,8 @@
HSPLcom/android/server/usage/UsageStatsService;->reportEventOrAddToQueue(ILandroid/app/usage/UsageEvents$Event;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;
HPLcom/android/server/usage/UserUsageStatsService$1;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;
HPLcom/android/server/usage/UserUsageStatsService$4;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJI[ILandroid/util/ArraySet;)Landroid/app/usage/UsageEvents;+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/usage/UserUsageStatsService;->checkAndGetTimeLocked()J
+HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;Z)Ljava/util/List;+]Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;megamorphic_types]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
HPLcom/android/server/usage/UserUsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;]Lcom/android/server/usage/UnixCalendar;Lcom/android/server/usage/UnixCalendar;
HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->$r8$lambda$a9G3NCnbGSjGaU6KBkUKenfyhOo(Landroid/util/Pair;Landroid/util/Pair;)I
@@ -3593,6 +3721,7 @@
HSPLcom/android/server/utils/WatchableImpl;->seal()V
HSPLcom/android/server/utils/WatchedArrayList$1;->onChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayList;
HSPLcom/android/server/utils/WatchedArrayList;->get(I)Ljava/lang/Object;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/utils/WatchedArrayList;->size()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/utils/WatchedArrayList;->snapshot(Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/utils/WatchedArrayMap$1;->onChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/utils/WatchedArrayMap;-><init>(IZ)V
@@ -3602,7 +3731,7 @@
HSPLcom/android/server/utils/WatchedArrayMap;->keyAt(I)Ljava/lang/Object;
HSPLcom/android/server/utils/WatchedArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLcom/android/server/utils/WatchedArrayMap;->putAll(Ljava/util/Map;)V+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
-HSPLcom/android/server/utils/WatchedArrayMap;->registerChild(Ljava/lang/Object;)V+]Lcom/android/server/utils/Watchable;Lcom/android/server/pm/PackageSetting;,Lcom/android/server/pm/SharedUserSetting;,Lcom/android/server/utils/WatchedLongSparseArray;
+HSPLcom/android/server/utils/WatchedArrayMap;->registerChild(Ljava/lang/Object;)V+]Lcom/android/server/utils/Watchable;Lcom/android/server/pm/PackageSetting;,Lcom/android/server/storage/WatchedVolumeInfo;,Lcom/android/server/utils/WatchedLongSparseArray;
HSPLcom/android/server/utils/WatchedArrayMap;->size()I
HSPLcom/android/server/utils/WatchedArrayMap;->snapshot(Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
HSPLcom/android/server/utils/WatchedArrayMap;->untrackedStorage()Landroid/util/ArrayMap;
@@ -3613,6 +3742,7 @@
HSPLcom/android/server/utils/WatchedArraySet;->contains(Ljava/lang/Object;)Z
HSPLcom/android/server/utils/WatchedArraySet;->registerChild(Ljava/lang/Object;)V+]Lcom/android/server/utils/Watchable;Lcom/android/server/pm/PackageSetting;
HSPLcom/android/server/utils/WatchedArraySet;->registerObserver(Lcom/android/server/utils/Watcher;)V
+HSPLcom/android/server/utils/WatchedArraySet;->size()I
HSPLcom/android/server/utils/WatchedArraySet;->snapshot(Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
HSPLcom/android/server/utils/WatchedArraySet;->untrackedStorage()Landroid/util/ArraySet;
HSPLcom/android/server/utils/WatchedArraySet;->valueAt(I)Ljava/lang/Object;
@@ -3637,7 +3767,7 @@
HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->valueAtInternal(II)Z
HSPLcom/android/server/utils/WatchedSparseSetArray;-><init>(Lcom/android/server/utils/WatchedSparseSetArray;)V+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
HSPLcom/android/server/utils/WatchedSparseSetArray;->add(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
-HPLcom/android/server/utils/WatchedSparseSetArray;->contains(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
+HSPLcom/android/server/utils/WatchedSparseSetArray;->contains(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
HSPLcom/android/server/utils/quota/Category;->equals(Ljava/lang/Object;)Z
HSPLcom/android/server/utils/quota/Category;->hashCode()I
HSPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
@@ -3655,7 +3785,7 @@
HPLcom/android/server/vibrator/VibrationStats$StatsInfo;-><init>(IIILcom/android/server/vibrator/VibrationSession$Status;Lcom/android/server/vibrator/VibrationStats;)V
HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->grantVisibilityToCaller(Ljava/lang/String;I)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
HSPLcom/android/server/wm/AccessibilityController;->hasCallbacks()Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IZZLcom/android/server/wm/ActivityTaskSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Landroid/os/PersistableBundle;Landroid/app/ActivityManager$TaskDescription;J)V
+HSPLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IZZLcom/android/server/wm/ActivityTaskSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Landroid/os/PersistableBundle;Landroid/app/ActivityManager$TaskDescription;J)V+]Landroid/app/ActivityOptions$SceneTransitionInfo;Landroid/app/ActivityOptions$SceneTransitionInfo;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;Lcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/wm/PackageConfigPersister;Lcom/android/server/wm/PackageConfigPersister;
HSPLcom/android/server/wm/ActivityRecord;->canAffectSystemUiFlags()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z
HSPLcom/android/server/wm/ActivityRecord;->canReceiveKeys()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
@@ -3664,6 +3794,7 @@
HSPLcom/android/server/wm/ActivityRecord;->containsShowWhenLockedWindow()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/ActivityRecord;->containsTurnScreenOnWindow()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/ActivityRecord;->findMainWindow(Z)Lcom/android/server/wm/WindowState;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Predicate;Z)Z+]Ljava/util/function/Predicate;megamorphic_types
HSPLcom/android/server/wm/ActivityRecord;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Ljava/util/function/Predicate;megamorphic_types
HSPLcom/android/server/wm/ActivityRecord;->getAppCompatState(Z)I+]Lcom/android/server/wm/AppCompatAspectRatioPolicy;Lcom/android/server/wm/AppCompatAspectRatioPolicy;]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatSizeCompatModePolicy;Lcom/android/server/wm/AppCompatSizeCompatModePolicy;]Lcom/android/server/wm/TransparentPolicy;Lcom/android/server/wm/TransparentPolicy;
HSPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/TransparentPolicy;Lcom/android/server/wm/TransparentPolicy;
@@ -3672,6 +3803,7 @@
HSPLcom/android/server/wm/ActivityRecord;->getTask()Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/ActivityRecord;->getTaskFragment()Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatSizeCompatModePolicy;Lcom/android/server/wm/AppCompatSizeCompatModePolicy;
+HSPLcom/android/server/wm/ActivityRecord;->isFocusable()Z
HPLcom/android/server/wm/ActivityRecord;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;
HSPLcom/android/server/wm/ActivityRecord;->isVisible()Z
HSPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
@@ -3679,7 +3811,7 @@
HSPLcom/android/server/wm/ActivityRecord;->prepareSurfaces()V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)V+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/ActivityRecord;->shouldBeVisibleUnchecked()Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeVisibleUnchecked()Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/PresentationController;Lcom/android/server/wm/PresentationController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/ActivityRecord;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;+]Landroid/content/Intent;Landroid/content/Intent;
@@ -3689,36 +3821,41 @@
HSPLcom/android/server/wm/ActivityRecordInputSink;->applyChangesToSurfaceIfChanged(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;
HSPLcom/android/server/wm/ActivityRecordInputSink;->getInputWindowHandleWrapper()Lcom/android/server/wm/InputWindowHandleWrapper;+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/ActivityStarter$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/policy/PermissionPolicyService$Internal;]Lcom/android/server/wm/ActivityStartController;Lcom/android/server/wm/ActivityStartController;]Lcom/android/server/wm/ActivityStartInterceptor;Lcom/android/server/wm/ActivityStartInterceptor;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;]Lcom/android/server/wm/BackgroundActivityStartController;Lcom/android/server/wm/BackgroundActivityStartController;]Lcom/android/server/wm/PendingRemoteAnimationRegistry;Lcom/android/server/wm/PendingRemoteAnimationRegistry;]Lcom/android/server/wm/SafeActivityOptions;Lcom/android/server/wm/SafeActivityOptions;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTaskToShowPermissionDialogOn(Ljava/lang/String;I)I+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopApp()Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopProcessState()I
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isSleeping()Z
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isUidForeground(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isUidForeground(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessAdded(Lcom/android/server/wm/WindowProcessController;)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/wm/PackageConfigPersister;Lcom/android/server/wm/PackageConfigPersister;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessRemoved(Ljava/lang/String;I)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidProcStateChanged(II)V+]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;
HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->preBindApplication(Lcom/android/server/wm/WindowProcessController;Landroid/content/pm/ApplicationInfo;)Lcom/android/server/wm/ActivityTaskManagerInternal$PreBindInfo;+]Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/ActivityTaskManagerService;->continueWindowLayout()V+]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
HSPLcom/android/server/wm/ActivityTaskManagerService;->deferWindowLayout()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
HSPLcom/android/server/wm/ActivityTaskManagerService;->getLifecycleManager()Lcom/android/server/wm/ClientLifecycleManager;
HSPLcom/android/server/wm/ActivityTaskManagerService;->getTasks(IZZI)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HPLcom/android/server/wm/ActivityTaskManagerService;->hasActiveVisibleWindow(I)Z+]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->hasActiveVisibleWindow(I)Z+]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
HSPLcom/android/server/wm/ActivityTaskManagerService;->isCallerRecents(I)Z+]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;
HSPLcom/android/server/wm/ActivityTaskManagerService;->isGetTasksAllowed(Ljava/lang/String;II)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
-HSPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;->getVisibleOpaqueActivity(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z
HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;
+HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;
HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->fillAndReturnTop(Lcom/android/server/wm/Task;Landroid/app/TaskInfo;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->setCapturedLink(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
HSPLcom/android/server/wm/ActivityTaskSupervisor;->beginActivityVisibilityUpdate()V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->endActivityVisibilityUpdate()V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
HSPLcom/android/server/wm/ActivityTaskSupervisor;->getKeyguardController()Lcom/android/server/wm/KeyguardController;
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides$$ExternalSyntheticLambda0;->getAsBoolean()Z
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides$$ExternalSyntheticLambda1;->getAsBoolean()Z
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides$UserAspectRatioState;->getUserAspectRatio(Lcom/android/server/wm/ActivityRecord;)I+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->getAllowUserAspectRatioOverridePropertyValue()Z+]Lcom/android/server/wm/utils/OptPropFactory$OptProp;Lcom/android/server/wm/utils/OptPropFactory$OptProp;
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->getUserMinAspectRatioOverrideCode()I
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->isSystemOverrideToFullscreenEnabled()Z+]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/utils/OptPropFactory$OptProp;Lcom/android/server/wm/utils/OptPropFactory$OptProp;
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->isUserFullscreenOverrideEnabled()Z+]Lcom/android/server/wm/utils/OptPropFactory$OptProp;Lcom/android/server/wm/utils/OptPropFactory$OptProp;
+HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->shouldApplyUserFullscreenOverride()Z+]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->shouldEnableUserAspectRatioSettings()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/utils/OptPropFactory$OptProp;Lcom/android/server/wm/utils/OptPropFactory$OptProp;
HSPLcom/android/server/wm/AppCompatAspectRatioOverrides;->shouldOverrideMinAspectRatio()Z+]Lcom/android/server/wm/utils/OptPropFactory$OptProp;Lcom/android/server/wm/utils/OptPropFactory$OptProp;
HSPLcom/android/server/wm/AppCompatAspectRatioPolicy$AppCompatAspectRatioState;->isLetterboxedForAspectRatioOnly()Z
@@ -3730,21 +3867,22 @@
HSPLcom/android/server/wm/AppCompatConfiguration;->getDefaultLetterboxBackgroundType()I
HSPLcom/android/server/wm/AppCompatConfiguration;->isUserAppAspectRatioFullscreenEnabled()Z
HSPLcom/android/server/wm/AppCompatConfiguration;->isUserAppAspectRatioSettingsEnabled()Z
+HSPLcom/android/server/wm/AppCompatController;->getSizeCompatModePolicy()Lcom/android/server/wm/AppCompatSizeCompatModePolicy;
HSPLcom/android/server/wm/AppCompatController;->getTransparentPolicy()Lcom/android/server/wm/TransparentPolicy;
HSPLcom/android/server/wm/AppCompatLetterboxOverrides;->getLetterboxBackgroundType()I
+HSPLcom/android/server/wm/AppCompatLetterboxOverrides;->isLetterboxEducationEnabled()Z
HSPLcom/android/server/wm/AppCompatLetterboxPolicy$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;->isRunning()Z
HSPLcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;->updateLetterboxSurfaceIfNeeded(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;
HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->getLetterboxDetails()Lcom/android/internal/statusbar/LetterboxDetails;+]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;]Lcom/android/server/wm/AppCompatLetterboxPolicyState;Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/AppCompatLetterboxPolicy;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z+]Lcom/android/server/wm/AppCompatLetterboxPolicyState;Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;
-HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->shouldNotLayoutLetterbox(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->shouldNotLayoutLetterbox(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->shouldShowLetterboxUi(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatOrientationOverrides;Lcom/android/server/wm/AppCompatOrientationOverrides;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->start(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;]Lcom/android/server/wm/AppCompatLetterboxPolicyState;Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;]Lcom/android/server/wm/AppCompatRoundedCorners;Lcom/android/server/wm/AppCompatRoundedCorners;
HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->updateLetterboxSurfaceIfNeeded(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/AppCompatLetterboxPolicyState;Lcom/android/server/wm/AppCompatLetterboxPolicy$LegacyLetterboxPolicyState;
HSPLcom/android/server/wm/AppCompatLetterboxPolicy;->updateWallpaperForLetterbox(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatLetterboxOverrides;Lcom/android/server/wm/AppCompatLetterboxOverrides;
HSPLcom/android/server/wm/AppCompatOrientationOverrides;->getIsRelaunchingAfterRequestedOrientationChanged()Z
-HSPLcom/android/server/wm/AppCompatOrientationPolicy;->overrideOrientationIfNeeded(I)I+]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/AppCompatCameraOverrides;Lcom/android/server/wm/AppCompatCameraOverrides;]Lcom/android/server/wm/AppCompatOrientationOverrides;Lcom/android/server/wm/AppCompatOrientationOverrides;]Lcom/android/server/wm/AppCompatOverrides;Lcom/android/server/wm/AppCompatOverrides;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/AppCompatOrientationPolicy;->overrideOrientationIfNeeded(I)I+]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/AppCompatCameraOverrides;Lcom/android/server/wm/AppCompatCameraOverrides;]Lcom/android/server/wm/AppCompatOrientationOverrides;Lcom/android/server/wm/AppCompatOrientationOverrides;]Lcom/android/server/wm/AppCompatOverrides;Lcom/android/server/wm/AppCompatOverrides;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/AppCompatReachabilityOverrides$ReachabilityState;->isFromDoubleTap()Z
+HSPLcom/android/server/wm/AppCompatReachabilityOverrides;->isFromDoubleTap()Z+]Lcom/android/server/wm/AppCompatReachabilityOverrides$ReachabilityState;Lcom/android/server/wm/AppCompatReachabilityOverrides$ReachabilityState;
HSPLcom/android/server/wm/AppCompatRoundedCorners;->requiresRoundedCorners(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatLetterboxOverrides;Lcom/android/server/wm/AppCompatLetterboxOverrides;]Ljava/util/function/Predicate;Lcom/android/server/wm/AppCompatLetterboxPolicy$$ExternalSyntheticLambda0;
HSPLcom/android/server/wm/AppCompatRoundedCorners;->updateRoundedCornersIfNeeded(Lcom/android/server/wm/WindowState;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/AppCompatRoundedCorners;Lcom/android/server/wm/AppCompatRoundedCorners;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/AppCompatSizeCompatModePolicy;->getAppCompatDisplayInsets()Lcom/android/server/wm/AppCompatDisplayInsets;+]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/TransparentPolicy;Lcom/android/server/wm/TransparentPolicy;
@@ -3755,22 +3893,22 @@
HSPLcom/android/server/wm/AppCompatUtils;->fillAppCompatTaskInfo(Lcom/android/server/wm/Task;Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/AppCompatTaskInfo;Landroid/app/AppCompatTaskInfo;]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatLetterboxOverrides;Lcom/android/server/wm/AppCompatLetterboxOverrides;]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;]Lcom/android/server/wm/AppCompatReachabilityOverrides;Lcom/android/server/wm/AppCompatReachabilityOverrides;]Lcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;Lcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;
HSPLcom/android/server/wm/AppCompatUtils;->getAppBounds(Lcom/android/server/wm/ActivityRecord;)Landroid/graphics/Rect;+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/TransparentPolicy;Lcom/android/server/wm/TransparentPolicy;
HSPLcom/android/server/wm/AppCompatUtils;->isChangeEnabled(Lcom/android/server/wm/ActivityRecord;J)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;
-HSPLcom/android/server/wm/AppTransition;->isRunning()Z
HSPLcom/android/server/wm/AppTransition;->isTransitionSet()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->finishNow()V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;Lcom/android/server/wm/Transition;,Lcom/android/server/wm/WindowOrganizerController;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/lang/Runnable;Lcom/android/server/wm/TransitionController$$ExternalSyntheticLambda3;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->finishNow()V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;Lcom/android/server/wm/Transition;,Lcom/android/server/wm/WindowOrganizerController;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/lang/Runnable;Lcom/android/server/wm/TransitionController$$ExternalSyntheticLambda3;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;
HSPLcom/android/server/wm/BLASTSyncEngine;->getSyncSet(I)Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/BLASTSyncEngine;->onSurfacePlacement()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/BackNavigationController;->shouldPauseTouch(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/BackNavigationController$AnimationHandler;Lcom/android/server/wm/BackNavigationController$AnimationHandler;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
HSPLcom/android/server/wm/BackgroundLaunchProcessController;->addBoundClientUid(ILjava/lang/String;J)V+]Landroid/util/IntArray;Landroid/util/IntArray;
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->areBackgroundActivityStartsAllowed(IILjava/lang/String;ILcom/android/server/wm/BackgroundLaunchProcessController$BalCheckConfiguration;ZZJJJ)Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->areBackgroundActivityStartsAllowed(IILjava/lang/String;ILcom/android/server/wm/BackgroundLaunchProcessController$BalCheckConfiguration;ZZJJJ)Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;
HSPLcom/android/server/wm/BackgroundLaunchProcessController;->clearBalOptInBoundClientUids()V+]Landroid/util/IntArray;Landroid/util/IntArray;
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/wm/BackgroundActivityStartCallback;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBoundByForegroundUid()Z+]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/util/function/IntPredicate;Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/wm/BackgroundActivityStartCallback;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->isBoundByForegroundUid()Z+]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/util/function/IntPredicate;Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;
HSPLcom/android/server/wm/BackgroundLaunchProcessController;->removeAllowBackgroundStartPrivileges(Landroid/os/Binder;)V
HSPLcom/android/server/wm/ClientLifecycleManager;->dispatchPendingTransactions()V+]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;
HSPLcom/android/server/wm/ClientLifecycleManager;->getOrCreatePendingTransaction(Landroid/app/IApplicationThread;)Landroid/app/servertransaction/ClientTransaction;+]Landroid/app/IApplicationThread;Lcom/android/server/am/ApplicationThreadDeferred;
HSPLcom/android/server/wm/ClientLifecycleManager;->shouldDispatchPendingTransactionsImmediately()Z+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
HSPLcom/android/server/wm/CompatModePackages;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/CompatModePackages;->getCompatScale(Ljava/lang/String;IZ)F
HSPLcom/android/server/wm/CompatModePackages;->getCompatScaleFromProvider(Ljava/lang/String;I)Landroid/content/res/CompatibilityInfo$CompatScale;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/CompatScaleProvider;Lcom/android/server/app/GameManagerService$LocalService;
HSPLcom/android/server/wm/ConfigurationContainer;-><init>()V
HSPLcom/android/server/wm/ConfigurationContainer;->applyAppSpecificConfig(Ljava/lang/Integer;Landroid/os/LocaleList;Ljava/lang/Integer;)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WindowProcessController;
@@ -3790,7 +3928,7 @@
HSPLcom/android/server/wm/ConfigurationContainer;->onMergedOverrideConfigurationChanged()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
HSPLcom/android/server/wm/ConfigurationContainer;->updateRequestedOverrideConfiguration(Landroid/content/res/Configuration;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
HSPLcom/android/server/wm/DeferredDisplayUpdater;->calculateDisplayInfoDiff(Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;)I
-HSPLcom/android/server/wm/DeferredDisplayUpdater;->updateDisplayInfo(Ljava/lang/Runnable;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/lang/Runnable;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda10;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;
+HSPLcom/android/server/wm/DeferredDisplayUpdater;->updateDisplayInfo(Ljava/lang/Runnable;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/lang/Runnable;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda10;,Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda9;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda28;
HSPLcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;->getMinAspectRatio(Lcom/android/server/wm/Task;)F+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/AppCompatOverrides;Lcom/android/server/wm/AppCompatOverrides;]Lcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;Lcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;]Lcom/android/server/wm/TransparentPolicy;Lcom/android/server/wm/TransparentPolicy;
HSPLcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;->hasMinAspectRatioOverride(Lcom/android/server/wm/Task;)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;
HSPLcom/android/server/wm/DesktopAppCompatAspectRatioPolicy;->shouldEnableUserAspectRatioSettings(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/AppCompatAspectRatioOverrides;Lcom/android/server/wm/AppCompatAspectRatioOverrides;]Lcom/android/server/wm/AppCompatOverrides;Lcom/android/server/wm/AppCompatOverrides;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
@@ -3801,15 +3939,15 @@
HSPLcom/android/server/wm/DisplayArea$Tokens;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayArea;->asDisplayArea()Lcom/android/server/wm/DisplayArea;
HSPLcom/android/server/wm/DisplayArea;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/DisplayArea;->getIgnoreOrientationRequest()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/DisplayArea;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;+]Lcom/android/server/wm/DisplayArea;megamorphic_types]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/DisplayArea;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
HSPLcom/android/server/wm/DisplayArea;->getRootTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/DisplayArea;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Region;)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Z
HSPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;->reset()V
HSPLcom/android/server/wm/DisplayContent$ImeContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$Sp8y2Fhps8S4GCPelNMlGu99jRg(Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[FLcom/android/server/wm/WindowState;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HPLcom/android/server/wm/DisplayContent;->addToGlobalAndConsumeLimit(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Rect;ILcom/android/server/wm/WindowState;I)I+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayContent;->adjustDisplaySizeRanges(Landroid/view/DisplayInfo;IIIZ)V+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
HSPLcom/android/server/wm/DisplayContent;->applySurfaceChangesTransaction()V+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WallpaperVisibilityListeners;Lcom/android/server/wm/WallpaperVisibilityListeners;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Ljava/util/LinkedList;Ljava/util/LinkedList;
@@ -3822,14 +3960,16 @@
HSPLcom/android/server/wm/DisplayContent;->getDisplayInfo()Landroid/view/DisplayInfo;
HSPLcom/android/server/wm/DisplayContent;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
HSPLcom/android/server/wm/DisplayContent;->getImeTarget(I)Lcom/android/server/wm/InsetsControlTarget;
-HSPLcom/android/server/wm/DisplayContent;->getInputMonitor()Lcom/android/server/wm/InputMonitor;
HSPLcom/android/server/wm/DisplayContent;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
HSPLcom/android/server/wm/DisplayContent;->getInsetsStateController()Lcom/android/server/wm/InsetsStateController;
HSPLcom/android/server/wm/DisplayContent;->getKeepClearAreas(Ljava/util/Set;Ljava/util/Set;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/DisplayContent;->getOrientation()I+]Lcom/android/server/wm/AppCompatCameraPolicy;Lcom/android/server/wm/AppCompatCameraPolicy;]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatOrientationOverrides;Lcom/android/server/wm/AppCompatOrientationOverrides;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
HSPLcom/android/server/wm/DisplayContent;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/DisplayContent;->handleTopActivityLaunchingInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
HSPLcom/android/server/wm/DisplayContent;->hasOwnFocus()Z
+HSPLcom/android/server/wm/DisplayContent;->isKeyguardGoingAway()Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
HSPLcom/android/server/wm/DisplayContent;->isLayoutNeeded()Z
+HSPLcom/android/server/wm/DisplayContent;->isSleeping()Z
+HSPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$32(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayContent;->lambda$new$1(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayContent;->lambda$new$3(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayContent;->lambda$new$4(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -3837,16 +3977,13 @@
HSPLcom/android/server/wm/DisplayContent;->lambda$new$8(Lcom/android/server/wm/WindowState;)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/RefreshRatePolicy;Lcom/android/server/wm/RefreshRatePolicy;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Ljava/util/LinkedList;Ljava/util/LinkedList;
HSPLcom/android/server/wm/DisplayContent;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/DisplayContent;->needsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;Z)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayContent;->onDisplayInfoUpdated(Landroid/view/DisplayInfo;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowContextListenerController;Lcom/android/server/wm/WindowContextListenerController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/DisplayContent;->performLayout(ZZ)V
HSPLcom/android/server/wm/DisplayContent;->performLayoutNoTrace(ZZ)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
HSPLcom/android/server/wm/DisplayContent;->prepareSurfaces()V
HSPLcom/android/server/wm/DisplayContent;->setDisplayMirroring()Z+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HSPLcom/android/server/wm/DisplayContent;->shouldDeferRemoval()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
HSPLcom/android/server/wm/DisplayContent;->shouldImeAttachedToApp()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent$ImeContainer;,Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayContent;->toString()Ljava/lang/String;
HSPLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetricsIfNeeded(Landroid/view/DisplayInfo;)V+]Lcom/android/server/wm/DeferredDisplayUpdater;Lcom/android/server/wm/DeferredDisplayUpdater;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Lcom/android/server/wm/DisplayWindowSettings;Lcom/android/server/wm/DisplayWindowSettings;
-HSPLcom/android/server/wm/DisplayContent;->updateDisplayInfo(Landroid/view/DisplayInfo;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
HSPLcom/android/server/wm/DisplayContent;->updateFocusedWindowLocked(IZI)Z+]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/DisplayContent;->updateKeepClearAreas()V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayWindowListenerController;Lcom/android/server/wm/DisplayWindowListenerController;]Ljava/util/Set;Landroid/util/ArraySet;
HSPLcom/android/server/wm/DisplayContent;->updateOrientation(Z)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/WindowContainer;megamorphic_types
@@ -3860,7 +3997,7 @@
HSPLcom/android/server/wm/DisplayPolicy;->applyKeyguardPolicy(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayPolicy;->applyPostLayoutPolicyLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/AppCompatController;Lcom/android/server/wm/AppCompatController;]Lcom/android/server/wm/AppCompatLetterboxPolicy;Lcom/android/server/wm/AppCompatLetterboxPolicy;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/DisplayPolicy;->beginPostLayoutPolicyLw()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/DisplayPolicy;->calculateInsetsFrame(Landroid/graphics/Rect;Landroid/graphics/Insets;)V
+HSPLcom/android/server/wm/DisplayPolicy;->calculateInsetsFrame(Landroid/graphics/Rect;Landroid/graphics/Insets;)V
HSPLcom/android/server/wm/DisplayPolicy;->chooseNavigationBackgroundWindow(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayPolicy;->configureNavBarOpacity(IZZ)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
HSPLcom/android/server/wm/DisplayPolicy;->configureStatusBarOpacity(I)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -3873,7 +4010,6 @@
HSPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
HPLcom/android/server/wm/DisplayPolicy;->hasBottomNavigationBar()Z
HSPLcom/android/server/wm/DisplayPolicy;->intersectsAnyInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;I)Z+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsState;Landroid/view/InsetsState;
-HSPLcom/android/server/wm/DisplayPolicy;->isFullyTransparentAllowed(Lcom/android/server/wm/WindowState;I)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;
HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardShowing()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
HPLcom/android/server/wm/DisplayPolicy;->isLightBarAllowed(Lcom/android/server/wm/WindowState;I)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -3927,29 +4063,29 @@
HSPLcom/android/server/wm/InsetsPolicy;->adjustVisibilityForFakeControllingSources(Landroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;
HSPLcom/android/server/wm/InsetsPolicy;->adjustVisibilityForIme(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;Z)Landroid/view/InsetsState;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/InsetsPolicy;->canBeTopFullscreenOpaqueWindow(Lcom/android/server/wm/WindowState;)Z+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/InsetsPolicy;->enforceInsetsPolicyForTarget(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InsetsPolicy;->enforceInsetsPolicyForTarget(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/InsetsPolicy;->forceShowingNavigationBars(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
-HSPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/InsetsPolicy;->hasHiddenSources(I)Z+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
HSPLcom/android/server/wm/InsetsPolicy;->remoteInsetsControllerControlsSystemBars(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
HSPLcom/android/server/wm/InsetsPolicy;->updateBarControlTarget(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
HSPLcom/android/server/wm/InsetsPolicy;->updateSystemBars(Lcom/android/server/wm/WindowState;ZZ)V+]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
HPLcom/android/server/wm/InsetsSourceProvider;->getInsetsHint()Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
+HSPLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
HPLcom/android/server/wm/InsetsSourceProvider;->getWindowFrameSurfacePosition()Landroid/graphics/Point;+]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HPLcom/android/server/wm/InsetsSourceProvider;->isClientVisible()Z
-HPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()V+]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/InsetsSourceProvider;->overridesFrame(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;
+HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()V+]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InsetsSourceProvider;->overridesFrame(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;
HPLcom/android/server/wm/InsetsSourceProvider;->updateControlForTarget(Lcom/android/server/wm/InsetsControlTarget;ZLandroid/view/inputmethod/ImeTracker$Token;)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/InsetsStateController$1;,Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/WindowState;
HPLcom/android/server/wm/InsetsSourceProvider;->updateInsetsControlPosition(Lcom/android/server/wm/WindowState;)Z+]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;
HPLcom/android/server/wm/InsetsSourceProvider;->updateInsetsHint()Z+]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;
HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrame(Landroid/graphics/Rect;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/internal/util/function/TriFunction;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda0;,Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda11;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrameForServerVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HSPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrameForServerVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
HPLcom/android/server/wm/InsetsStateController;->getImeSourceProvider()Lcom/android/server/wm/ImeInsetsSourceProvider;+]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HPLcom/android/server/wm/InsetsStateController;->getOrCreateSourceProvider(II)Lcom/android/server/wm/InsetsSourceProvider;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;
+HSPLcom/android/server/wm/InsetsStateController;->getOrCreateSourceProvider(II)Lcom/android/server/wm/InsetsSourceProvider;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;
HSPLcom/android/server/wm/InsetsStateController;->getRawInsetsState()Landroid/view/InsetsState;
HPLcom/android/server/wm/InsetsStateController;->lambda$notifyPendingInsetsControlChanged$4(ILandroid/util/SparseLongArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/InsetsPolicy$ControlTarget;,Lcom/android/server/wm/InsetsStateController$1;,Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/InsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/InsetsStateController;->notifyPendingInsetsControlChanged()V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;
@@ -3961,9 +4097,9 @@
HSPLcom/android/server/wm/KeyguardController;->updateVisibility()V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;
HSPLcom/android/server/wm/MirrorActiveUids;->hasNonAppVisibleWindow(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
HSPLcom/android/server/wm/MirrorActiveUids;->onUidProcStateChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/WindowManagerPolicyConstants$PointerEventListener;Lcom/android/server/wm/RecentTasks$1;,Lcom/android/server/wm/SystemGesturesPointerEventListener;
+HPLcom/android/server/wm/PackageConfigPersister;->findPackageConfiguration(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$PackageConfig;
+HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/WindowManagerPolicyConstants$PointerEventListener;Lcom/android/internal/widget/PointerLocationView;,Lcom/android/server/wm/RecentTasks$1;,Lcom/android/server/wm/SystemGesturesPointerEventListener;
HSPLcom/android/server/wm/RecentTasks;->isCallerRecents(I)Z
-HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->refreshRateEquals(F)Z
HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->update(FII)Z
HSPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->get(Ljava/lang/String;)Landroid/view/SurfaceControl$RefreshRateRange;+]Ljava/util/HashMap;Ljava/util/HashMap;
HSPLcom/android/server/wm/RefreshRatePolicy;->calculatePriority(Lcom/android/server/wm/WindowState;)I+]Lcom/android/server/wm/RefreshRatePolicy;Lcom/android/server/wm/RefreshRatePolicy;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -3971,15 +4107,15 @@
HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredMinRefreshRate(Lcom/android/server/wm/WindowState;)F+]Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredModeId(Lcom/android/server/wm/WindowState;)I
HSPLcom/android/server/wm/RefreshRatePolicy;->updateFrameRateVote(Lcom/android/server/wm/WindowState;)Z+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/HighRefreshRateDenylist;Lcom/android/server/wm/HighRefreshRateDenylist;]Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda23;->accept(Ljava/lang/Object;)V
HSPLcom/android/server/wm/RootWindowContainer$MyHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$cnDv250HlSET-GBlf9zK0KW0JGk(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
HSPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction()V+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/StrictModeFlash;Lcom/android/server/wm/StrictModeFlash;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/RootWindowContainer;->checkAppTransitionReady(Lcom/android/server/wm/WindowSurfacePlacer;)V+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/AppTransitionController;Lcom/android/server/wm/AppTransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/RootWindowContainer;->checkAppTransitionReady(Lcom/android/server/wm/WindowSurfacePlacer;)V+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/RootWindowContainer;->clearFrameChangingWindows()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/RootWindowContainer;->forAllDisplays(Ljava/util/function/Consumer;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Consumer;megamorphic_types
HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HPLcom/android/server/wm/RootWindowContainer;->getRootTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityTaskManager$RootTaskInfo;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->getRootTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityTaskManager$RootTaskInfo;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->getRunningTasks(ILjava/util/List;IILandroid/util/ArraySet;I)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/RunningTasks;Lcom/android/server/wm/RunningTasks;
HSPLcom/android/server/wm/RootWindowContainer;->handleNotObscuredLocked(Lcom/android/server/wm/WindowState;ZZ)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/RootWindowContainer;->handleResizingWindows()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/RootWindowContainer;->hasPendingLayoutChanges(Lcom/android/server/wm/WindowAnimator;)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -3990,29 +4126,30 @@
HSPLcom/android/server/wm/RunningTasks;->accept(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/RunningTasks;->createRunningTaskInfo(Lcom/android/server/wm/Task;J)Landroid/app/ActivityManager$RunningTaskInfo;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/RunningTasks;->getTasks(ILjava/util/List;ILcom/android/server/wm/RecentTasks;Lcom/android/server/wm/WindowContainer;ILandroid/util/ArraySet;)V+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/RunningTasks;->lambda$getTasks$0(Lcom/android/server/wm/DisplayContent;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/wm/Session;->setWallpaperZoomOut(Landroid/os/IBinder;F)V
-HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda5;,Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda5;,Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;,Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HPLcom/android/server/wm/SurfaceAnimator;->createAnimationLeash(Lcom/android/server/wm/SurfaceAnimator$Animatable;Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;IIIIIZLjava/util/function/Supplier;)Landroid/view/SurfaceControl;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/SurfaceAnimator$Animatable;megamorphic_types
HSPLcom/android/server/wm/SurfaceAnimator;->hasLeash()Z
HSPLcom/android/server/wm/SurfaceAnimator;->isAnimating()Z
HSPLcom/android/server/wm/SurfaceAnimator;->reset(Landroid/view/SurfaceControl$Transaction;Z)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/SurfaceFreezer;)V+]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator$Animatable;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;
HSPLcom/android/server/wm/SynchedDeviceConfig;->getFlagValue(Ljava/lang/String;)Z+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
-HPLcom/android/server/wm/SystemGesturesPointerEventListener;->detectSwipe(Landroid/view/MotionEvent;)I
HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->onConfigurationChanged()V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
HPLcom/android/server/wm/SystemGesturesPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/view/GestureDetector;Lcom/android/server/wm/SystemGesturesPointerEventListener$1;]Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;Lcom/android/server/wm/DisplayPolicy$1;
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;->test(Ljava/lang/Object;)Z
HSPLcom/android/server/wm/Task$FindRootHelper;->findRoot(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task$FindRootHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
HSPLcom/android/server/wm/Task$FindRootHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/Task$FindRootHelper;
+HSPLcom/android/server/wm/Task;->$r8$lambda$AkSO8BQwrCT5IExZs_X3DjEm-pI(Lcom/android/server/wm/ActivityRecord;)Z
HSPLcom/android/server/wm/Task;->asTask()Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/Task;->calculateTopActivityMainWindowFrameForTaskInfo(Lcom/android/server/wm/ActivityRecord;)Landroid/graphics/Rect;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/Task;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->cropWindowsToRootTaskBounds()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;Z)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;ZLcom/android/server/wm/TaskDisplayArea;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer$RemoteToken;Lcom/android/server/wm/WindowContainer$RemoteToken;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Consumer;megamorphic_types
-HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda9;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;
+HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda33;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda9;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;
HSPLcom/android/server/wm/Task;->getBaseIntent()Landroid/content/Intent;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->getBasePackageName()Ljava/lang/String;+]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->getDisplayCutoutInsets()Landroid/graphics/Rect;+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -4023,6 +4160,7 @@
HSPLcom/android/server/wm/Task;->getRootTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;megamorphic_types
HSPLcom/android/server/wm/Task;->getTaskWithAdjacent()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
HSPLcom/android/server/wm/Task;->getTopLeafTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/Task;->getTopPausingActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->getTopVisibleActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->hasVisibleChildren()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
@@ -4032,8 +4170,9 @@
HSPLcom/android/server/wm/Task;->isResizeable()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->isResizeable(Z)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->isRootTask()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/Task;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/Task;->prepareSurfaces()V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->resumeTopActivityInnerLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z+]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;
HSPLcom/android/server/wm/Task;->shouldIgnoreInput()Z
HSPLcom/android/server/wm/Task;->updateTaskDescription()V+]Lcom/android/internal/util/function/pooled/PooledPredicate;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
@@ -4043,8 +4182,9 @@
HSPLcom/android/server/wm/TaskDisplayArea;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/TaskDisplayArea;->assignRootTaskOrdering(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/TaskDisplayArea;->getRootTask(II)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
HSPLcom/android/server/wm/TaskFragment;->asTaskFragment()Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->canAffectSystemUiFlags()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskFragment;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;Lcom/android/server/wm/TaskFragment$ConfigOverrideHint;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/AppCompatDisplayInsets;Lcom/android/server/wm/AppCompatDisplayInsets;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Consumer;megamorphic_types
HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;megamorphic_types
HSPLcom/android/server/wm/TaskFragment;->getActivityType()I+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
@@ -4064,9 +4204,10 @@
HSPLcom/android/server/wm/TaskFragment;->isForceHidden()Z
HSPLcom/android/server/wm/TaskFragment;->isLeafTaskFragment()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/TaskFragment;->isTopActivityFocusable()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;]Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueContainerHelper;Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueContainerHelper;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->prepareSurfaces()V+]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->resumeTopActivity(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/AppWarnings;Lcom/android/server/wm/AppWarnings;]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskFragment;->shouldBeVisible(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->shouldDeferRemoval()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->shouldSleepActivities()Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/TaskFragment;->supportsMultiWindowInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
@@ -4074,19 +4215,20 @@
HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/TaskFragment;->updateActivityVisibilities(Lcom/android/server/wm/ActivityRecord;Z)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;
HSPLcom/android/server/wm/TaskFragmentOrganizerController;->dispatchPendingEvents()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
-HPLcom/android/server/wm/TaskFragmentOrganizerController;->dispatchPendingEvents(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Ljava/util/List;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;]Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskFragmentOrganizerController;->dispatchPendingEvents(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Ljava/util/List;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;]Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchPendingEvents()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Landroid/app/ActivityManager$RunningTaskInfo;Landroid/app/ActivityManager$RunningTaskInfo;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
HSPLcom/android/server/wm/TaskOrganizerController;->dispatchPendingEvents()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
HSPLcom/android/server/wm/TaskOrganizerController;->onTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Landroid/window/ITaskOrganizer;Landroid/window/ITaskOrganizer$Stub$Proxy;
HSPLcom/android/server/wm/Transition$ChangeInfo;-><init>(Lcom/android/server/wm/WindowContainer;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/Transition$ReadyTrackerOld;->allReady()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
HSPLcom/android/server/wm/Transition;-><init>(IILcom/android/server/wm/TransitionController;Lcom/android/server/wm/BLASTSyncEngine;)V
HSPLcom/android/server/wm/Transition;->applyReady()V+]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Transition$ReadyTrackerOld;Lcom/android/server/wm/Transition$ReadyTrackerOld;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Transition;->calculateTransitionInfo(IILjava/util/ArrayList;Landroid/view/SurfaceControl$Transaction;)Landroid/window/TransitionInfo;+]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$ChangeInfo;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowContainer$RemoteToken;Lcom/android/server/wm/WindowContainer$RemoteToken;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/Transition;->collect(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/Transition;->finishTransition(Lcom/android/server/wm/ActionChain;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/inputmethod/InputMethodManagerInternal;Lcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;]Lcom/android/server/wm/ActionChain;Lcom/android/server/wm/ActionChain;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/AppCompatCameraPolicy;Lcom/android/server/wm/AppCompatCameraPolicy;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/SnapshotController;Lcom/android/server/wm/SnapshotController;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/TaskSnapshotController;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/TransitionTracer;Lcom/android/server/wm/PerfettoTransitionTracer;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;
HSPLcom/android/server/wm/Transition;->isInTransition(Lcom/android/server/wm/WindowContainer;)Z
-HSPLcom/android/server/wm/Transition;->onTransactionReady(ILandroid/view/SurfaceControl$Transaction;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/window/ITransitionPlayer;Landroid/window/ITransitionPlayer$Stub$Proxy;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/SnapshotController;Lcom/android/server/wm/SnapshotController;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController$Logger;Lcom/android/server/wm/TransitionController$Logger;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/TransitionTracer;Lcom/android/server/wm/PerfettoTransitionTracer;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;
+HSPLcom/android/server/wm/Transition;->onTransactionReady(ILandroid/view/SurfaceControl$Transaction;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/window/ITransitionPlayer;Landroid/window/ITransitionPlayer$Stub$Proxy;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/SnapshotController;Lcom/android/server/wm/SnapshotController;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController$Logger;Lcom/android/server/wm/TransitionController$Logger;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/TransitionTracer;Lcom/android/server/wm/PerfettoTransitionTracer;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;
HSPLcom/android/server/wm/Transition;->toString()Ljava/lang/String;+]Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$ChangeInfo;
HSPLcom/android/server/wm/TransitionController;->canAssignLayers(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/TransitionController;->inCollectingTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -4108,7 +4250,7 @@
HSPLcom/android/server/wm/WallpaperController;->hideWallpapers(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WallpaperController;->isWallpaperVisible()Z+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HPLcom/android/server/wm/WallpaperController;->setWallpaperZoomOut(Lcom/android/server/wm/WindowState;F)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;Z)Z+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;]Lcom/android/server/wallpaper/WallpaperCropper$WallpaperCropUtils;Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda4;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;Z)Z+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;]Lcom/android/server/wallpaper/WallpaperCropper$WallpaperCropUtils;Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda1;,Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda4;,Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda5;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WallpaperWindowToken;->isVisible()Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
HSPLcom/android/server/wm/WallpaperWindowToken;->prepareSurfaces()V
HSPLcom/android/server/wm/WallpaperWindowToken;->setVisibility(Z)V+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;
@@ -4119,7 +4261,7 @@
HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Ljava/lang/Object;)Z
HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->release()V
HSPLcom/android/server/wm/WindowContainer$RemoteToken;->toWindowContainerToken()Landroid/window/WindowContainerToken;
-HSPLcom/android/server/wm/WindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;
+HSPLcom/android/server/wm/WindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;
HSPLcom/android/server/wm/WindowContainer;->asTask()Lcom/android/server/wm/Task;
HSPLcom/android/server/wm/WindowContainer;->asTaskFragment()Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/WindowContainer;->asWallpaperToken()Lcom/android/server/wm/WallpaperWindowToken;
@@ -4142,17 +4284,16 @@
HSPLcom/android/server/wm/WindowContainer;->getChildCount()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->getDisplayArea()Lcom/android/server/wm/DisplayArea;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContainer;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WindowContainer;->getInsetsSourceProviders()Landroid/util/SparseArray;
-HSPLcom/android/server/wm/WindowContainer;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WindowContainer;->getInsetsSourceProviders()Landroid/util/SparseArray;
+HSPLcom/android/server/wm/WindowContainer;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/lang/Object;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/WindowContainer;
-HSPLcom/android/server/wm/WindowContainer;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;+]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;
+HSPLcom/android/server/wm/WindowContainer;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;+]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;
HSPLcom/android/server/wm/WindowContainer;->getRelativePosition(Landroid/graphics/Point;)V+]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContainer;->getRelativePosition(Landroid/graphics/Rect;Landroid/graphics/Point;)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContainer;->getRootTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->getSurfaceControl()Landroid/view/SurfaceControl;
HSPLcom/android/server/wm/WindowContainer;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/WindowContainer;->getTaskFragment(Ljava/util/function/Predicate;)Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->getTopMostActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/TaskFragment;
HSPLcom/android/server/wm/WindowContainer;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -4175,6 +4316,7 @@
HSPLcom/android/server/wm/WindowContainer;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowContainer;->scheduleAnimation()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/WindowContainer;->updateAboveInsetsState(Landroid/view/InsetsState;Landroid/util/SparseArray;Landroid/util/ArraySet;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WindowContainer;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContainer;->updateSurfacePositionNonOrganized()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->dispatchWindowContextInfoChange()V+]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/WindowFrames;->didFrameSizeChange()Z
@@ -4189,7 +4331,7 @@
HSPLcom/android/server/wm/WindowManagerService;->isKeyguardLocked()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
HSPLcom/android/server/wm/WindowManagerService;->isKeyguardSecure(I)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
HSPLcom/android/server/wm/WindowManagerService;->isUserVisible(I)Z+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
-HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/view/WindowRelayoutResult;)I+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Landroid/view/InsetsFrameProvider$InsetsSizeOverride;Landroid/view/InsetsFrameProvider$InsetsSizeOverride;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Landroid/view/InsetsSourceControl$Array;Landroid/view/InsetsSourceControl$Array;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
+HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/view/WindowRelayoutResult;)I+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;]Landroid/view/InsetsFrameProvider$InsetsSizeOverride;Landroid/view/InsetsFrameProvider$InsetsSizeOverride;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Landroid/view/InsetsSourceControl$Array;Landroid/view/InsetsSourceControl$Array;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
HSPLcom/android/server/wm/WindowManagerService;->resetPriorityAfterLockedSection()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
HSPLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;
HSPLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -4199,12 +4341,13 @@
HSPLcom/android/server/wm/WindowOrganizerController;->applyTransaction(Landroid/window/WindowContainerTransaction;ILcom/android/server/wm/ActionChain;Lcom/android/server/wm/WindowOrganizerController$CallerInfo;)I+]Landroid/window/WindowContainerTransaction$Change;Landroid/window/WindowContainerTransaction$Change;]Lcom/android/server/wm/ActionChain;Lcom/android/server/wm/ActionChain;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowOrganizerController;Lcom/android/server/wm/WindowOrganizerController;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/lang/Object;Lcom/android/server/wm/Task;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
HSPLcom/android/server/wm/WindowProcessController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;IILjava/lang/Object;Lcom/android/server/wm/WindowProcessListener;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
HSPLcom/android/server/wm/WindowProcessController;->addBoundClientUid(ILjava/lang/String;J)V+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
-HPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(ILcom/android/server/wm/BackgroundLaunchProcessController$BalCheckConfiguration;)Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(ILcom/android/server/wm/BackgroundLaunchProcessController$BalCheckConfiguration;)Lcom/android/server/wm/BackgroundActivityStartController$BalVerdict;+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/WindowProcessController;->computeProcessActivityState()V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowProcessController;->dispatchConfiguration(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/WindowProcessController;->handleAppDied()Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowProcessController;->hasActivities()Z
HSPLcom/android/server/wm/WindowProcessController;->hasActivitiesOrRecentTasks()Z
-HPLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
HSPLcom/android/server/wm/WindowProcessController;->hasRecentTasks()Z
HSPLcom/android/server/wm/WindowProcessController;->hasVisibleActivities()Z
HSPLcom/android/server/wm/WindowProcessController;->isHeavyWeightProcess()Z
@@ -4225,14 +4368,14 @@
HSPLcom/android/server/wm/WindowProcessController;->setReportedProcState(I)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;
HSPLcom/android/server/wm/WindowProcessController;->setThread(Landroid/app/IApplicationThread;)V+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
HSPLcom/android/server/wm/WindowProcessControllerMap;->put(ILcom/android/server/wm/WindowProcessController;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLcom/android/server/wm/WindowState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/Session;Landroid/view/IWindow;Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;ILandroid/view/WindowManager$LayoutParams;IIIZ)V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;
-HSPLcom/android/server/wm/WindowState;->applyDims()V+]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
+HSPLcom/android/server/wm/WindowState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/Session;Landroid/view/IWindow;Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;ILandroid/view/WindowManager$LayoutParams;IIIZ)V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;
+HSPLcom/android/server/wm/WindowState;->applyDims()V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
HSPLcom/android/server/wm/WindowState;->applyImeWindowsIfNeeded(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/internal/util/ToBooleanFunction;megamorphic_types
HSPLcom/android/server/wm/WindowState;->areAppWindowBoundsLetterboxed()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->asWindowState()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/WindowState;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WindowState;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->canAddInternalSystemWindow()Z
HSPLcom/android/server/wm/WindowState;->canAffectSystemUiFlags()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
HSPLcom/android/server/wm/WindowState;->canBeHiddenByKeyguard()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
@@ -4258,11 +4401,12 @@
HSPLcom/android/server/wm/WindowState;->getInsetsState()Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->getInsetsState(Z)Landroid/view/InsetsState;+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;
HSPLcom/android/server/wm/WindowState;->getKeepClearAreas(Ljava/util/Collection;Ljava/util/Collection;Landroid/graphics/Matrix;[F)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/Collection;Landroid/util/ArraySet;
-HSPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/CharSequence;Landroid/text/SpannableString;,Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/CharSequence;Ljava/lang/String;
HSPLcom/android/server/wm/WindowState;->getMergedInsetsState()Landroid/view/InsetsState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
HSPLcom/android/server/wm/WindowState;->getName()Ljava/lang/String;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->getOwningPackage()Ljava/lang/String;
HSPLcom/android/server/wm/WindowState;->getOwningUid()I
+HSPLcom/android/server/wm/WindowState;->getParentFrame()Landroid/graphics/Rect;
HSPLcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->getRectsInScreenSpace(Ljava/util/List;Landroid/graphics/Matrix;[F)Ljava/util/List;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
HSPLcom/android/server/wm/WindowState;->getRequestedVisibleTypes()I
@@ -4273,7 +4417,7 @@
HSPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
HSPLcom/android/server/wm/WindowState;->getTransformationMatrix([FLandroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;megamorphic_types
-HSPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Landroid/text/SpannableString;,Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;
HSPLcom/android/server/wm/WindowState;->getWindowType()I
HSPLcom/android/server/wm/WindowState;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -4281,7 +4425,6 @@
HSPLcom/android/server/wm/WindowState;->hasWallpaper()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->isAnimationRunningSelfOrParent()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->isChildWindow()Z
-HSPLcom/android/server/wm/WindowState;->isDimming()Z
HSPLcom/android/server/wm/WindowState;->isDisplayed()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->isDrawn()Z
HSPLcom/android/server/wm/WindowState;->isDreamWindow()Z
@@ -4319,7 +4462,6 @@
HSPLcom/android/server/wm/WindowState;->shouldCheckTokenVisibleRequested()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;
HSPLcom/android/server/wm/WindowState;->shouldDrawBlurBehind()Z
HSPLcom/android/server/wm/WindowState;->shouldSendRedrawForSync()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->show(ZZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
HSPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
HSPLcom/android/server/wm/WindowState;->toString()Ljava/lang/String;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -4335,12 +4477,11 @@
HSPLcom/android/server/wm/WindowState;->wouldBeVisibleRequestedIfPolicyIgnored()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
HSPLcom/android/server/wm/WindowStateAnimator;->applyAnimationLocked(IZ)Z+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
HSPLcom/android/server/wm/WindowStateAnimator;->commitFinishDrawingLocked()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowStateAnimator;->createSurfaceLocked()Landroid/view/SurfaceControl;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Ljava/lang/CharSequence;Landroid/text/SpannableString;,Ljava/lang/String;
+HSPLcom/android/server/wm/WindowStateAnimator;->createSurfaceLocked()Landroid/view/SurfaceControl;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Ljava/lang/CharSequence;Ljava/lang/String;
HSPLcom/android/server/wm/WindowStateAnimator;->getShown()Z
HSPLcom/android/server/wm/WindowStateAnimator;->hasSurface()Z
HSPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;->run()V
-HSPLcom/android/server/wm/WindowSurfacePlacer;->continueLayout(Z)V
HSPLcom/android/server/wm/WindowSurfacePlacer;->isLayoutDeferred()Z
HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement(Z)V
HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementLoop()V+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -4357,13 +4498,154 @@
HSPLcom/android/server/wm/utils/OptPropFactory$OptProp;->shouldEnableWithOptInOverrideAndOptOutProperty(Z)Z+]Ljava/util/function/BooleanSupplier;Lcom/android/server/wm/AppCompatOrientationOverrides$$ExternalSyntheticLambda2;,Lcom/android/server/wm/AppCompatUtils$1;,Lcom/android/server/wm/utils/OptPropFactory$OptProp$$ExternalSyntheticLambda0;
HPLcom/android/server/wm/utils/RegionUtils;->forEachRectReverse(Landroid/graphics/Region;Ljava/util/function/Consumer;)V
HSPLcom/android/server/wm/utils/RegionUtils;->rectListToRegion(Ljava/util/List;Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Ljava/util/List;Ljava/util/ArrayList;
+Landroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;
+Landroid/accounts/AccountManager$BaseFutureTask$Response;
+Landroid/accounts/IAccountAuthenticator$Stub$Proxy;
+Landroid/accounts/IAccountManagerResponse$Stub$Proxy;
+Landroid/app/ActivityManager$2;
+Landroid/app/ActivityThread$ApplicationThread;
+Landroid/app/AlarmManager$ListenerWrapper;
+Landroid/app/AppOpsManager$3;
+Landroid/app/AppOpsManager$4;
+Landroid/app/AppOpsManager$6;
+Landroid/app/ApplicationPackageManager;
+Landroid/app/ContextImpl$ApplicationContentResolver;
Landroid/app/IAlarmListener$Stub$Proxy;
+Landroid/app/IApplicationThread$Stub$Proxy;
+Landroid/app/IForegroundServiceObserver$Stub$Proxy;
+Landroid/app/IInstantAppResolver$Stub$Proxy;
+Landroid/app/IServiceConnection$Stub$Proxy;
+Landroid/app/ITaskStackListener$Stub$Proxy;
+Landroid/app/IUidObserver$Stub$Proxy;
+Landroid/app/IWallpaperManagerCallback$Stub$Proxy;
+Landroid/app/JobSchedulerImpl;
+Landroid/app/KeyguardManager$1;
+Landroid/app/LoadedApk$ReceiverDispatcher$Args;
+Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
+Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;
+Landroid/app/PendingIntent$FinishedDispatcher;
+Landroid/app/SharedPreferencesImpl;
+Landroid/app/backup/IBackupManagerMonitor$Stub$Proxy;
+Landroid/app/backup/IBackupObserver$Stub$Proxy;
Landroid/app/job/IJobService$Stub$Proxy;
+Landroid/app/job/JobServiceEngine$JobInterface;
+Landroid/content/ContentProviderProxy;
+Landroid/content/ContentResolver$CursorWrapperInner;
+Landroid/content/IIntentReceiver$Stub$Proxy;
+Landroid/content/ISyncAdapter$Stub$Proxy;
Landroid/content/ISyncStatusObserver$Stub$Proxy;
+Landroid/content/pm/IOnAppsChangedListener$Stub$Proxy;
+Landroid/content/pm/IOnChecksumsReadyListener$Stub$Proxy;
+Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;
+Landroid/content/pm/LabeledIntent;
+Landroid/content/pm/PackageInstaller$SessionCallbackDelegate;
+Landroid/content/res/XmlBlock$Parser;
+Landroid/database/ContentObserver$Transport;
+Landroid/database/IContentObserver$Stub$Proxy;
+Landroid/database/sqlite/SQLiteCursor;
+Landroid/hardware/SystemSensorManager;
+Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateManagerCallback;
+Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;
+Landroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;
+Landroid/hardware/face/IFaceServiceReceiver$Stub$Proxy;
+Landroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;
+Landroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;
+Landroid/location/LocationManager$LocationListenerTransport;
+Landroid/media/AudioManager$2;
+Landroid/media/AudioManager$3;
+Landroid/media/IAudioRoutesObserver$Stub$Proxy;
+Landroid/media/IMediaRouterClient$Stub$Proxy;
+Landroid/media/IRecordingConfigDispatcher$Stub$Proxy;
+Landroid/media/MediaRouter$Static$1;
+Landroid/media/MediaRouter$Static$Client;
+Landroid/media/session/IActiveSessionsListener$Stub$Proxy;
+Landroid/media/session/ISessionControllerCallback$Stub$Proxy;
+Landroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;
+Landroid/net/INetworkRecommendationProvider$Stub$Proxy;
+Landroid/net/LocalSocketImpl$SocketInputStream;
+Landroid/net/LocalSocketImpl$SocketOutputStream;
+Landroid/net/NetworkStats$1;
+Landroid/net/Uri$HierarchicalUri;
+Landroid/net/Uri$OpaqueUri;
+Landroid/net/Uri$PathSegments;
+Landroid/net/Uri$StringUri;
+Landroid/os/BinderProxy;
+Landroid/os/IInstalld$Stub$Proxy;
+Landroid/os/IRemoteCallback$Stub$Proxy;
Landroid/os/RemoteCallbackList$Builder$1;
+Landroid/os/StrictMode$5;
+Landroid/os/StrictMode$BackgroundActivityLaunchCallback;
+Landroid/os/SystemClock$1;
+Landroid/service/notification/ConditionProviderService$Provider;
Landroid/service/notification/INotificationListener$Stub$Proxy;
+Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+Landroid/service/textclassifier/ITextClassifierCallback$Stub$Proxy;
+Landroid/service/trust/ITrustAgentService$Stub$Proxy;
+Landroid/service/voice/IVoiceInteractionSession$Stub$Proxy;
+Landroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;
+Landroid/system/suspend/internal/ISuspendControlServiceInternal$Stub$Proxy;
+Landroid/telephony/CellIdentityLte;
+Landroid/telephony/CellIdentityNr;
+Landroid/telephony/CellSignalStrengthGsm;
+Landroid/telephony/CellSignalStrengthWcdma;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;
+Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;
+Landroid/telephony/TelephonyRegistryManager$1;
+Landroid/telephony/TelephonyRegistryManager$3;
+Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper;
+Landroid/text/SpannableString;
+Landroid/util/MapCollections$ArrayIterator;
+Landroid/util/MapCollections$EntrySet;
+Landroid/util/MapCollections$KeySet;
+Landroid/util/MapCollections$MapIterator;
+Landroid/util/MapCollections$ValuesCollection;
+Landroid/util/RecurrenceRule$RecurringIterator;
+Landroid/util/Spline$MonotoneCubicSpline;
+Landroid/view/IDisplayWindowInsetsController$Stub$Proxy;
+Landroid/view/IDisplayWindowListener$Stub$Proxy;
+Landroid/view/ISystemGestureExclusionListener$Stub$Proxy;
+Landroid/view/IWallpaperVisibilityListener$Stub$Proxy;
+Landroid/view/IWindow$Stub$Proxy;
+Landroid/view/ViewRootImpl$AccessibilityInteractionConnection;
+Landroid/view/ViewRootImpl$W;
+Landroid/view/WindowManagerImpl;
+Landroid/view/accessibility/AccessibilityManager$1;
+Landroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;
+Landroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;
+Landroid/view/inputmethod/ImeTracker$1;
+Landroid/view/inputmethod/InputMethodManager$2;
+Landroid/window/ITaskFragmentOrganizer$Stub$Proxy;
+Lcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;
Lcom/android/internal/app/IAppOpsCallback$Stub$Proxy;
+Lcom/android/internal/app/IAppOpsNotedCallback$Stub$Proxy;
+Lcom/android/internal/appwidget/IAppWidgetHost$Stub$Proxy;
+Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
+Lcom/android/internal/content/PackageMonitor$PackageMonitorCallback;
+Lcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;
+Lcom/android/internal/inputmethod/ImeTracingPerfettoImpl;
+Lcom/android/internal/os/Clock$1;
+Lcom/android/internal/os/IResultReceiver$Stub$Proxy;
+Lcom/android/internal/pm/parsing/pkg/PackageImpl;
+Lcom/android/internal/pm/pkg/AndroidPackageSplitImpl;
+Lcom/android/internal/pm/pkg/component/ParsedActivityImpl;
+Lcom/android/internal/pm/pkg/component/ParsedAttributionImpl;
+Lcom/android/internal/pm/pkg/component/ParsedIntentInfoImpl;
+Lcom/android/internal/pm/pkg/component/ParsedPermissionImpl;
+Lcom/android/internal/pm/pkg/component/ParsedServiceImpl;
+Lcom/android/internal/pm/pkg/component/ParsedUsesPermissionImpl;
Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
+Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;
+Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
+Lcom/android/internal/util/ArtBinaryXmlPullParser;
+Lcom/android/internal/util/ArtBinaryXmlSerializer;
+Lcom/android/internal/util/ConcurrentUtils$DirectExecutor;
+Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
+Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;
+Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;
+Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+Lcom/android/org/kxml2/io/KXmlParser;
+Lcom/android/org/kxml2/io/KXmlSerializer;
Lcom/android/server/BatteryService$LocalService;
Lcom/android/server/BinaryTransparencyService$BinaryTransparencyServiceImpl$$ExternalSyntheticLambda0;
Lcom/android/server/DeviceIdleController$LocalService;
@@ -4389,6 +4671,7 @@
Lcom/android/server/job/JobSchedulerService$4;
Lcom/android/server/job/controllers/BackgroundJobsController$2;
Lcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;
+Lcom/android/server/lights/LightsService$LightImpl;
Lcom/android/server/net/NetworkManagementService$LocalService;
Lcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener;
Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;
@@ -4397,7 +4680,12 @@
Lcom/android/server/pm/CrossProfileIntentResolver;
Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+Lcom/android/server/pm/PackageSetting;
Lcom/android/server/pm/UserManagerService$LocalService;
+Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;
+Lcom/android/server/pm/local/PackageManagerLocalImpl;
+Lcom/android/server/pm/pkg/PackageUserStateImpl;
+Lcom/android/server/pm/pkg/SharedLibraryWrapper;
Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
Lcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;
Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;
@@ -4407,7 +4695,6 @@
Lcom/android/server/power/PowerManagerService$LocalService;
Lcom/android/server/power/stats/BatteryStatsImpl$1;
Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
-Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;
@@ -4422,3 +4709,88 @@
Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
Lcom/android/server/wm/WindowManagerService$LocalService;
Lcom/android/server/wm/WindowState;
+Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+Ljava/lang/UNIXProcess$ProcessPipeOutputStream;
+Ljava/lang/UNIXProcess;
+Ljava/nio/HeapByteBuffer;
+Ljava/nio/HeapCharBuffer;
+Ljava/security/MessageDigest$Delegate;
+Ljava/time/Clock$SystemClock;
+Ljava/util/ArrayDeque$DeqIterator;
+Ljava/util/ArrayDeque$DescendingIterator;
+Ljava/util/ArrayList$Itr;
+Ljava/util/ArrayList$SubList$1;
+Ljava/util/ArrayList$SubList;
+Ljava/util/Arrays$ArrayItr;
+Ljava/util/Arrays$ArrayList;
+Ljava/util/Collections$1;
+Ljava/util/Collections$EmptyIterator;
+Ljava/util/Collections$EmptyList;
+Ljava/util/Collections$EmptyMap;
+Ljava/util/Collections$EmptySet;
+Ljava/util/Collections$SetFromMap;
+Ljava/util/Collections$SingletonList;
+Ljava/util/Collections$SynchronizedMap;
+Ljava/util/Collections$SynchronizedRandomAccessList;
+Ljava/util/Collections$SynchronizedSet;
+Ljava/util/Collections$UnmodifiableCollection$1;
+Ljava/util/Collections$UnmodifiableCollection;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;
+Ljava/util/Collections$UnmodifiableMap;
+Ljava/util/Collections$UnmodifiableRandomAccessList;
+Ljava/util/Collections$UnmodifiableSet;
+Ljava/util/Comparator$$ExternalSyntheticLambda0;
+Ljava/util/GregorianCalendar;
+Ljava/util/HashMap$EntryIterator;
+Ljava/util/HashMap$EntrySet;
+Ljava/util/HashMap$KeyIterator;
+Ljava/util/HashMap$KeySet;
+Ljava/util/HashMap$Node;
+Ljava/util/HashMap$ValueIterator;
+Ljava/util/HashMap$Values;
+Ljava/util/ImmutableCollections$List12;
+Ljava/util/ImmutableCollections$ListItr;
+Ljava/util/ImmutableCollections$ListN;
+Ljava/util/ImmutableCollections$MapN;
+Ljava/util/ImmutableCollections$Set12;
+Ljava/util/ImmutableCollections$SetN;
+Ljava/util/LinkedHashMap$Entry;
+Ljava/util/LinkedHashMap$LinkedEntryIterator;
+Ljava/util/LinkedHashMap$LinkedEntrySet;
+Ljava/util/LinkedHashMap$LinkedKeyIterator;
+Ljava/util/LinkedHashMap$LinkedKeySet;
+Ljava/util/LinkedHashMap$LinkedValueIterator;
+Ljava/util/LinkedHashMap$LinkedValues;
+Ljava/util/LinkedList$DescendingIterator;
+Ljava/util/LinkedList$ListItr;
+Ljava/util/PriorityQueue$Itr;
+Ljava/util/TreeMap$EntryIterator;
+Ljava/util/TreeMap$EntrySet;
+Ljava/util/TreeMap$KeyIterator;
+Ljava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;
+Ljava/util/TreeMap$TreeMapEntry;
+Ljava/util/TreeMap$ValueIterator;
+Ljava/util/TreeMap$Values;
+Ljava/util/WeakHashMap$KeyIterator;
+Ljava/util/WeakHashMap$KeySet;
+Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
+Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;
+Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
+Ljava/util/concurrent/ConcurrentHashMap$MapEntry;
+Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
+Ljava/util/concurrent/ConcurrentHashMap$ValuesView;
+Ljava/util/concurrent/ConcurrentLinkedQueue$Itr;
+Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+Ljava/util/concurrent/Executors$AutoShutdownDelegatedExecutorService;
+Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
+Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
+Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
+Ljava/util/stream/ReferencePipeline$2;
+Ljava/util/stream/ReferencePipeline$3;
+Ljava/util/stream/ReferencePipeline$4;
+Ljava/util/stream/ReferencePipeline$Head;
+Ljava/util/zip/GZIPInputStream;
+Llibcore/util/ZoneInfo;
+Lsun/nio/fs/UnixPath;
diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
index bd34f33..c182c26 100644
--- a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
+++ b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
@@ -149,7 +149,6 @@
OperationStorage mOperationStorage;
List<PackageInfo> mPackages;
- PackageInfo mCurrentPackage;
boolean mUpdateSchedule;
CountDownLatch mLatch;
FullBackupJob mJob; // if a scheduled job needs to be finished afterwards
@@ -207,10 +206,9 @@
for (String pkg : whichPackages) {
try {
PackageManager pm = backupManagerService.getPackageManager();
- PackageInfo info = pm.getPackageInfoAsUser(pkg,
+ PackageInfo packageInfo = pm.getPackageInfoAsUser(pkg,
PackageManager.GET_SIGNING_CERTIFICATES, mUserId);
- mCurrentPackage = info;
- if (!mBackupEligibilityRules.appIsEligibleForBackup(info.applicationInfo)) {
+ if (!mBackupEligibilityRules.appIsEligibleForBackup(packageInfo.applicationInfo)) {
// Cull any packages that have indicated that backups are not permitted,
// that run as system-domain uids but do not define their own backup agents,
// as well as any explicit mention of the 'special' shared-storage agent
@@ -220,13 +218,13 @@
}
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_INELIGIBLE,
- mCurrentPackage,
+ packageInfo,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- null);
+ /* extras= */ null);
BackupObserverUtils.sendBackupOnPackageResult(mBackupObserver, pkg,
BackupManager.ERROR_BACKUP_NOT_ALLOWED);
continue;
- } else if (!mBackupEligibilityRules.appGetsFullBackup(info)) {
+ } else if (!mBackupEligibilityRules.appGetsFullBackup(packageInfo)) {
// Cull any packages that are found in the queue but now aren't supposed
// to get full-data backup operations.
if (DEBUG) {
@@ -235,13 +233,13 @@
}
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_KEY_VALUE_PARTICIPANT,
- mCurrentPackage,
+ packageInfo,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- null);
+ /* extras= */ null);
BackupObserverUtils.sendBackupOnPackageResult(mBackupObserver, pkg,
BackupManager.ERROR_BACKUP_NOT_ALLOWED);
continue;
- } else if (mBackupEligibilityRules.appIsStopped(info.applicationInfo)) {
+ } else if (mBackupEligibilityRules.appIsStopped(packageInfo.applicationInfo)) {
// Cull any packages in the 'stopped' state: they've either just been
// installed or have explicitly been force-stopped by the user. In both
// cases we do not want to launch them for backup.
@@ -250,21 +248,21 @@
}
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_STOPPED,
- mCurrentPackage,
+ packageInfo,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- null);
+ /* extras= */ null);
BackupObserverUtils.sendBackupOnPackageResult(mBackupObserver, pkg,
BackupManager.ERROR_BACKUP_NOT_ALLOWED);
continue;
}
- mPackages.add(info);
+ mPackages.add(packageInfo);
} catch (NameNotFoundException e) {
Slog.i(TAG, "Requested package " + pkg + " not found; ignoring");
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_FOUND,
- mCurrentPackage,
+ /* pkg= */ null,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- null);
+ /* extras= */ null);
}
}
@@ -352,10 +350,11 @@
} else {
monitoringEvent = BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED;
}
- mBackupManagerMonitorEventSender
- .monitorEvent(monitoringEvent, null,
- BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- null);
+ mBackupManagerMonitorEventSender.monitorEvent(
+ monitoringEvent,
+ /* pkg= */ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
+ /* extras= */ null);
mUpdateSchedule = false;
backupRunStatus = BackupManager.ERROR_BACKUP_NOT_ALLOWED;
return;
@@ -367,8 +366,9 @@
backupRunStatus = BackupManager.ERROR_TRANSPORT_ABORTED;
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_TRANSPORT_NOT_PRESENT,
- mCurrentPackage, BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
- null);
+ /* pkg= */ null,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
+ /* extras= */ null);
return;
}
@@ -461,9 +461,10 @@
}
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_ERROR_PREFLIGHT,
- mCurrentPackage,
+ currentPackage,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- mBackupManagerMonitorEventSender.putMonitoringExtra(null,
+ BackupManagerMonitorEventSender.putMonitoringExtra(
+ /* extras= */ null,
BackupManagerMonitor.EXTRA_LOG_PREFLIGHT_ERROR,
preflightResult));
backupPackageStatus = (int) preflightResult;
@@ -496,9 +497,9 @@
+ ": " + totalRead + " of " + quota);
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_QUOTA_HIT_PREFLIGHT,
- mCurrentPackage,
+ currentPackage,
BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT,
- null);
+ /* extras= */ null);
mBackupRunner.sendQuotaExceeded(totalRead, quota);
}
}
@@ -645,9 +646,9 @@
Slog.w(TAG, "Exception trying full transport backup", e);
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_EXCEPTION_FULL_BACKUP,
- mCurrentPackage,
+ /* pkg= */ null,
BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY,
- mBackupManagerMonitorEventSender.putMonitoringExtra(null,
+ BackupManagerMonitorEventSender.putMonitoringExtra(/* extras= */ null,
BackupManagerMonitor.EXTRA_LOG_EXCEPTION_FULL_BACKUP,
Log.getStackTraceString(e)));
@@ -966,9 +967,6 @@
}
}
-
- // BackupRestoreTask interface: specifically, timeout detection
-
@Override
public void execute() { /* intentionally empty */ }
@@ -981,7 +979,9 @@
mBackupManagerMonitorEventSender.monitorEvent(
BackupManagerMonitor.LOG_EVENT_ID_FULL_BACKUP_CANCEL,
- mCurrentPackage, BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, null);
+ mTarget,
+ BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT,
+ /* extras= */ null);
mIsCancelled = true;
// Cancel tasks spun off by this task.
mUserBackupManagerService.handleCancel(mEphemeralToken, cancelAll);
diff --git a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java
index c4519b1..33668a6 100644
--- a/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java
+++ b/services/backup/java/com/android/server/backup/utils/BackupManagerMonitorEventSender.java
@@ -71,6 +71,7 @@
mMonitor = monitor;
}
+ @Nullable
public IBackupManagerMonitor getMonitor() {
return mMonitor;
}
@@ -87,9 +88,9 @@
*/
public void monitorEvent(
int id,
- PackageInfo pkg,
+ @Nullable PackageInfo pkg,
int category,
- Bundle extras) {
+ @Nullable Bundle extras) {
try {
Bundle bundle = new Bundle();
bundle.putInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID, id);
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index b6fe0ad..e46bbe2 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -160,6 +160,7 @@
import com.android.server.pm.Installer;
import com.android.server.pm.UserManagerInternal;
import com.android.server.storage.AppFuseBridge;
+import com.android.server.storage.ImmutableVolumeInfo;
import com.android.server.storage.StorageSessionController;
import com.android.server.storage.StorageSessionController.ExternalStorageServiceException;
import com.android.server.storage.WatchedVolumeInfo;
@@ -777,7 +778,7 @@
break;
}
case H_VOLUME_UNMOUNT: {
- final WatchedVolumeInfo vol = (WatchedVolumeInfo) msg.obj;
+ final ImmutableVolumeInfo vol = (ImmutableVolumeInfo) msg.obj;
unmount(vol);
break;
}
@@ -898,8 +899,14 @@
for (int i = 0; i < size; i++) {
final WatchedVolumeInfo vol = mVolumes.valueAt(i);
if (vol.getMountUserId() == userId) {
+ // Capture the volume before we set mount user id to null,
+ // so that StorageSessionController remove the session from
+ // the correct user (old mount user id)
+ final ImmutableVolumeInfo volToUnmount
+ = vol.getClonedImmutableVolumeInfo();
vol.setMountUserId(UserHandle.USER_NULL);
- mHandler.obtainMessage(H_VOLUME_UNMOUNT, vol).sendToTarget();
+ mHandler.obtainMessage(H_VOLUME_UNMOUNT, volToUnmount)
+ .sendToTarget();
}
}
}
@@ -1295,7 +1302,12 @@
}
private void maybeRemountVolumes(int userId) {
- List<WatchedVolumeInfo> volumesToRemount = new ArrayList<>();
+ // We need to keep 2 lists
+ // 1. List of volumes before we set the mount user Id so that
+ // StorageSessionController is able to remove the session from the correct user (old one)
+ // 2. List of volumes to mount which should have the up to date info
+ List<ImmutableVolumeInfo> volumesToUnmount = new ArrayList<>();
+ List<WatchedVolumeInfo> volumesToMount = new ArrayList<>();
synchronized (mLock) {
for (int i = 0; i < mVolumes.size(); i++) {
final WatchedVolumeInfo vol = mVolumes.valueAt(i);
@@ -1303,16 +1315,19 @@
&& vol.getMountUserId() != mCurrentUserId) {
// If there's a visible secondary volume mounted,
// we need to update the currentUserId and remount
+ // But capture the volume with the old user id first to use it in unmounting
+ volumesToUnmount.add(vol.getClonedImmutableVolumeInfo());
vol.setMountUserId(mCurrentUserId);
- volumesToRemount.add(vol);
+ volumesToMount.add(vol);
}
}
}
- for (WatchedVolumeInfo vol : volumesToRemount) {
- Slog.i(TAG, "Remounting volume for user: " + userId + ". Volume: " + vol);
- mHandler.obtainMessage(H_VOLUME_UNMOUNT, vol).sendToTarget();
- mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget();
+ for (int i = 0; i < volumesToMount.size(); i++) {
+ Slog.i(TAG, "Remounting volume for user: " + userId + ". Volume: "
+ + volumesToUnmount.get(i));
+ mHandler.obtainMessage(H_VOLUME_UNMOUNT, volumesToUnmount.get(i)).sendToTarget();
+ mHandler.obtainMessage(H_VOLUME_MOUNT, volumesToMount.get(i)).sendToTarget();
}
}
@@ -2430,10 +2445,10 @@
super.unmount_enforcePermission();
final WatchedVolumeInfo vol = findVolumeByIdOrThrow(volId);
- unmount(vol);
+ unmount(vol.getClonedImmutableVolumeInfo());
}
- private void unmount(WatchedVolumeInfo vol) {
+ private void unmount(ImmutableVolumeInfo vol) {
try {
try {
if (vol.getType() == VolumeInfo.TYPE_PRIVATE) {
@@ -2444,7 +2459,7 @@
}
extendWatchdogTimeout("#unmount might be slow");
mVold.unmount(vol.getId());
- mStorageSessionController.onVolumeUnmount(vol.getImmutableVolumeInfo());
+ mStorageSessionController.onVolumeUnmount(vol);
} catch (Exception e) {
Slog.wtf(TAG, e);
}
diff --git a/services/core/java/com/android/server/SystemTimeZone.java b/services/core/java/com/android/server/SystemTimeZone.java
index dd07081..c8810f6 100644
--- a/services/core/java/com/android/server/SystemTimeZone.java
+++ b/services/core/java/com/android/server/SystemTimeZone.java
@@ -133,6 +133,7 @@
boolean timeZoneChanged = false;
synchronized (SystemTimeZone.class) {
String currentTimeZoneId = getTimeZoneId();
+ @TimeZoneConfidence int currentConfidence = getTimeZoneConfidence();
if (currentTimeZoneId == null || !currentTimeZoneId.equals(timeZoneId)) {
SystemProperties.set(TIME_ZONE_SYSTEM_PROPERTY, timeZoneId);
if (DEBUG) {
@@ -145,6 +146,8 @@
String logMsg = "Time zone or confidence set: "
+ " (new) timeZoneId=" + timeZoneId
+ ", (new) confidence=" + confidence
+ + ", (old) timeZoneId=" + currentTimeZoneId
+ + ", (old) confidence=" + currentConfidence
+ ", logInfo=" + logInfo;
addDebugLogEntry(logMsg);
}
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index bd7a0ac..b75b7ddf 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -2816,13 +2816,11 @@
if (!checkNotifyPermission("notifyEmergencyNumberList()")) {
return;
}
- if (Flags.enforceTelephonyFeatureMappingForPublicApis()) {
- if (!mContext.getPackageManager().hasSystemFeature(
- PackageManager.FEATURE_TELEPHONY_CALLING)) {
- // TelephonyManager.getEmergencyNumberList() throws an exception if
- // FEATURE_TELEPHONY_CALLING is not defined.
- return;
- }
+ if (!mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_CALLING)) {
+ // TelephonyManager.getEmergencyNumberList() throws an exception if
+ // FEATURE_TELEPHONY_CALLING is not defined.
+ return;
}
synchronized (mRecords) {
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 8eda176..296f7cf 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -907,7 +907,7 @@
throw new IllegalArgumentException("Unknown mode: " + mode);
}
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
final int user = UserHandle.getCallingUserId();
final long ident = Binder.clearCallingIdentity();
@@ -970,7 +970,7 @@
@AttentionModeThemeOverlayType int attentionModeThemeOverlayType) {
setAttentionModeThemeOverlay_enforcePermission();
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
synchronized (mLock) {
if (mAttentionModeThemeOverlay != attentionModeThemeOverlayType) {
@@ -1070,7 +1070,7 @@
return false;
}
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
// Store the last requested bedtime night mode state so that we don't need to notify
// anyone if the user decides to switch to the night mode to bedtime.
@@ -1124,7 +1124,7 @@
return;
}
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
final int user = UserHandle.getCallingUserId();
final long ident = Binder.clearCallingIdentity();
@@ -1155,7 +1155,7 @@
return;
}
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
final int user = UserHandle.getCallingUserId();
final long ident = Binder.clearCallingIdentity();
@@ -1178,7 +1178,7 @@
assertLegit(callingPackage);
assertSingleProjectionType(projectionType);
enforceProjectionTypePermissions(projectionType);
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
synchronized (mLock) {
if (mProjectionHolders == null) {
@@ -1224,7 +1224,7 @@
assertLegit(callingPackage);
assertSingleProjectionType(projectionType);
enforceProjectionTypePermissions(projectionType);
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
return releaseProjectionUnchecked(projectionType, callingPackage);
}
@@ -1266,7 +1266,7 @@
return;
}
- enforceCurrentUserIfVisibleBackgroundEnabled(mCurrentUser);
+ enforceCurrentUserIfVisibleBackgroundEnabled();
synchronized (mLock) {
if (mProjectionListeners == null) {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 125824c..4187ee2 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -387,6 +387,15 @@
@Overridable
public static final long FGS_SAW_RESTRICTIONS = 319471980L;
+ /**
+ * Allows system to manage foreground state of service with type
+ * <li>{@link android.content.pm.ServiceInfo#FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK}</li>
+ */
+ @ChangeId
+ @EnabledSince(targetSdkVersion = VERSION_CODES.VANILLA_ICE_CREAM)
+ @Overridable
+ public static final long MEDIA_FGS_STATE_TRANSITION = 281762171L;
+
final ActivityManagerService mAm;
// Maximum number of services that we allow to start in the background
@@ -9341,20 +9350,32 @@
== ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE
&& sr.foregroundId == notificationId) {
// check if service is explicitly requested by app to not be in foreground.
- if (sr.systemRequestedFgToBg) {
- Slog.d(TAG,
- "System initiated service transition to foreground "
- + "for package "
- + packageName);
- setServiceForegroundInnerLocked(sr, sr.foregroundId,
- sr.foregroundNoti, /* flags */ 0,
- ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK,
- /* callingUidStart */ 0, /* systemRequestedTransition */ true);
+ if (sr.systemRequestedFgToBg && CompatChanges.isChangeEnabled(
+ MEDIA_FGS_STATE_TRANSITION, sr.appInfo.uid)) {
+ if (DEBUG_FOREGROUND_SERVICE) {
+ Slog.d(TAG,
+ "System initiated service transition to foreground "
+ + "for package "
+ + packageName);
+ }
+ try {
+ setServiceForegroundInnerLocked(sr, sr.foregroundId,
+ sr.foregroundNoti, /* flags */ 0,
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK,
+ /* callingUidStart */ 0, /* systemRequestedTransition */ true);
+ } catch (Exception e) {
+ Slog.w(TAG,
+ "Exception in system initiated foreground service transition "
+ + "for package " + packageName
+ + ":" + e.toString());
+ }
} else {
- Slog.d(TAG,
- "Ignoring system initiated foreground service transition for "
- + "package"
- + packageName);
+ if (DEBUG_FOREGROUND_SERVICE) {
+ Slog.d(TAG,
+ "Ignoring system initiated foreground service transition for "
+ + "package "
+ + packageName);
+ }
}
}
}
@@ -9388,14 +9409,32 @@
if (sr.foregroundServiceType
== ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
&& sr.foregroundId == notificationId) {
- Slog.d(TAG,
- "System initiated transition of foreground service(type:media) to bg "
- + "for package"
- + packageName);
- setServiceForegroundInnerLocked(sr, /* id */ 0,
- /* notification */ null, /* flags */ 0,
- /* foregroundServiceType */ 0, /* callingUidStart */ 0,
- /* systemRequestedTransition */ true);
+ if (CompatChanges.isChangeEnabled(MEDIA_FGS_STATE_TRANSITION, sr.appInfo.uid)) {
+ if (DEBUG_FOREGROUND_SERVICE) {
+ Slog.d(TAG,
+ "System initiated transition of foreground service"
+ + "(type:media) to"
+ + " bg "
+ + "for package "
+ + packageName);
+ }
+ try {
+ setServiceForegroundInnerLocked(sr, /* id */ 0,
+ /* notification */ null, /* flags */ 0,
+ /* foregroundServiceType */ 0, /* callingUidStart */ 0,
+ /* systemRequestedTransition */ true);
+ } catch (Exception e) {
+ Slog.wtf(TAG,
+ "Exception in system initiated background service transition "
+ + "for package " + packageName
+ + ":" + e.toString());
+ }
+ } else {
+ if (DEBUG_FOREGROUND_SERVICE) {
+ Slog.d(TAG, "Ignoring system initiated transition of foreground"
+ + " service(type:media)to bg for package " + packageName);
+ }
+ }
}
}
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 8b701f0..b0b34d0 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -19471,7 +19471,7 @@
/**
* @hide
*/
- @EnforcePermission("android.permission.INTERACT_ACROSS_USERS_FULL")
+ @EnforcePermission(INTERACT_ACROSS_USERS_FULL)
public IBinder refreshIntentCreatorToken(Intent intent) {
refreshIntentCreatorToken_enforcePermission();
IBinder binder = intent.getCreatorToken();
diff --git a/services/core/java/com/android/server/am/BroadcastQueueImpl.java b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
index 36035bd..78beb18 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
@@ -832,7 +832,9 @@
// If this receiver is going to be skipped, skip it now itself and don't even enqueue
// it.
- final String skipReason = mSkipPolicy.shouldSkipMessage(r, receiver);
+ final String skipReason = Flags.avoidNoteOpAtEnqueue()
+ ? mSkipPolicy.shouldSkipAtEnqueueMessage(r, receiver)
+ : mSkipPolicy.shouldSkipMessage(r, receiver);
if (skipReason != null) {
setDeliveryState(null, null, r, i, receiver, BroadcastRecord.DELIVERY_SKIPPED,
"skipped by policy at enqueue: " + skipReason);
diff --git a/services/core/java/com/android/server/am/BroadcastSkipPolicy.java b/services/core/java/com/android/server/am/BroadcastSkipPolicy.java
index d2af84c..b0d5994 100644
--- a/services/core/java/com/android/server/am/BroadcastSkipPolicy.java
+++ b/services/core/java/com/android/server/am/BroadcastSkipPolicy.java
@@ -71,10 +71,20 @@
* {@code null} if it can proceed.
*/
public @Nullable String shouldSkipMessage(@NonNull BroadcastRecord r, @NonNull Object target) {
+ return shouldSkipMessage(r, target, false /* preflight */);
+ }
+
+ public @Nullable String shouldSkipAtEnqueueMessage(@NonNull BroadcastRecord r,
+ @NonNull Object target) {
+ return shouldSkipMessage(r, target, true /* preflight */);
+ }
+
+ private @Nullable String shouldSkipMessage(@NonNull BroadcastRecord r, @NonNull Object target,
+ boolean preflight) {
if (target instanceof BroadcastFilter) {
- return shouldSkipMessage(r, (BroadcastFilter) target);
+ return shouldSkipMessage(r, (BroadcastFilter) target, preflight);
} else {
- return shouldSkipMessage(r, (ResolveInfo) target);
+ return shouldSkipMessage(r, (ResolveInfo) target, preflight);
}
}
@@ -86,7 +96,7 @@
* {@code null} if it can proceed.
*/
private @Nullable String shouldSkipMessage(@NonNull BroadcastRecord r,
- @NonNull ResolveInfo info) {
+ @NonNull ResolveInfo info, boolean preflight) {
final BroadcastOptions brOptions = r.options;
final ComponentName component = new ComponentName(
info.activityInfo.applicationInfo.packageName,
@@ -134,15 +144,23 @@
+ " requires " + info.activityInfo.permission;
}
} else if (info.activityInfo.permission != null) {
- final int opCode = AppOpsManager.permissionToOpCode(info.activityInfo.permission);
- if (opCode != AppOpsManager.OP_NONE && mService.getAppOpsManager().noteOpNoThrow(opCode,
- r.callingUid, r.callerPackage, r.callerFeatureId,
- "Broadcast delivered to " + info.activityInfo.name)
- != AppOpsManager.MODE_ALLOWED) {
- return "Appop Denial: broadcasting "
- + broadcastDescription(r, component)
- + " requires appop " + AppOpsManager.permissionToOp(
- info.activityInfo.permission);
+ final String op = AppOpsManager.permissionToOp(info.activityInfo.permission);
+ if (op != null) {
+ final int mode;
+ if (preflight) {
+ mode = mService.getAppOpsManager().checkOpNoThrow(op,
+ r.callingUid, r.callerPackage, r.callerFeatureId);
+ } else {
+ mode = mService.getAppOpsManager().noteOpNoThrow(op,
+ r.callingUid, r.callerPackage, r.callerFeatureId,
+ "Broadcast delivered to " + info.activityInfo.name);
+ }
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ return "Appop Denial: broadcasting "
+ + broadcastDescription(r, component)
+ + " requires appop " + AppOpsManager.permissionToOp(
+ info.activityInfo.permission);
+ }
}
}
@@ -250,8 +268,8 @@
perm = PackageManager.PERMISSION_DENIED;
}
- int appOp = AppOpsManager.permissionToOpCode(excludedPermission);
- if (appOp != AppOpsManager.OP_NONE) {
+ final String appOp = AppOpsManager.permissionToOp(excludedPermission);
+ if (appOp != null) {
// When there is an app op associated with the permission,
// skip when both the permission and the app op are
// granted.
@@ -259,7 +277,7 @@
mService.getAppOpsManager().checkOpNoThrow(appOp,
info.activityInfo.applicationInfo.uid,
info.activityInfo.packageName)
- == AppOpsManager.MODE_ALLOWED)) {
+ == AppOpsManager.MODE_ALLOWED)) {
return "Skipping delivery to " + info.activityInfo.packageName
+ " due to excluded permission " + excludedPermission;
}
@@ -292,9 +310,10 @@
createAttributionSourcesForResolveInfo(info);
for (int i = 0; i < r.requiredPermissions.length; i++) {
String requiredPermission = r.requiredPermissions[i];
- perm = hasPermissionForDataDelivery(
+ perm = hasPermission(
requiredPermission,
"Broadcast delivered to " + info.activityInfo.name,
+ preflight,
attributionSources)
? PackageManager.PERMISSION_GRANTED
: PackageManager.PERMISSION_DENIED;
@@ -308,10 +327,14 @@
}
}
}
- if (r.appOp != AppOpsManager.OP_NONE) {
- if (!noteOpForManifestReceiver(r.appOp, r, info, component)) {
+ if (r.appOp != AppOpsManager.OP_NONE && AppOpsManager.isValidOp(r.appOp)) {
+ final String op = AppOpsManager.opToPublicName(r.appOp);
+ final boolean appOpAllowed = preflight
+ ? checkOpForManifestReceiver(r.appOp, op, r, info, component)
+ : noteOpForManifestReceiver(r.appOp, op, r, info, component);
+ if (!appOpAllowed) {
return "Skipping delivery to " + info.activityInfo.packageName
- + " due to required appop " + r.appOp;
+ + " due to required appop " + AppOpsManager.opToName(r.appOp);
}
}
@@ -338,7 +361,7 @@
* {@code null} if it can proceed.
*/
private @Nullable String shouldSkipMessage(@NonNull BroadcastRecord r,
- @NonNull BroadcastFilter filter) {
+ @NonNull BroadcastFilter filter, boolean preflight) {
if (r.options != null && !r.options.testRequireCompatChange(filter.owningUid)) {
return "Compat change filtered: broadcasting " + r.intent.toString()
+ " to uid " + filter.owningUid + " due to compat change "
@@ -372,18 +395,25 @@
+ " requires " + filter.requiredPermission
+ " due to registered receiver " + filter;
} else {
- final int opCode = AppOpsManager.permissionToOpCode(filter.requiredPermission);
- if (opCode != AppOpsManager.OP_NONE
- && mService.getAppOpsManager().noteOpNoThrow(opCode, r.callingUid,
- r.callerPackage, r.callerFeatureId, "Broadcast sent to protected receiver")
- != AppOpsManager.MODE_ALLOWED) {
- return "Appop Denial: broadcasting "
- + r.intent.toString()
- + " from " + r.callerPackage + " (pid="
- + r.callingPid + ", uid=" + r.callingUid + ")"
- + " requires appop " + AppOpsManager.permissionToOp(
- filter.requiredPermission)
- + " due to registered receiver " + filter;
+ final String op = AppOpsManager.permissionToOp(filter.requiredPermission);
+ if (op != null) {
+ final int mode;
+ if (preflight) {
+ mode = mService.getAppOpsManager().checkOpNoThrow(op,
+ r.callingUid, r.callerPackage, r.callerFeatureId);
+ } else {
+ mode = mService.getAppOpsManager().noteOpNoThrow(op, r.callingUid,
+ r.callerPackage, r.callerFeatureId,
+ "Broadcast sent to protected receiver");
+ }
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ return "Appop Denial: broadcasting "
+ + r.intent
+ + " from " + r.callerPackage + " (pid="
+ + r.callingPid + ", uid=" + r.callingUid + ")"
+ + " requires appop " + op
+ + " due to registered receiver " + filter;
+ }
}
}
}
@@ -433,9 +463,10 @@
.build();
for (int i = 0; i < r.requiredPermissions.length; i++) {
String requiredPermission = r.requiredPermissions[i];
- final int perm = hasPermissionForDataDelivery(
+ final int perm = hasPermission(
requiredPermission,
"Broadcast delivered to registered receiver " + filter.receiverId,
+ preflight,
attributionSource)
? PackageManager.PERMISSION_GRANTED
: PackageManager.PERMISSION_DENIED;
@@ -471,8 +502,8 @@
final int perm = checkComponentPermission(excludedPermission,
filter.receiverList.pid, filter.receiverList.uid, -1, true);
- int appOp = AppOpsManager.permissionToOpCode(excludedPermission);
- if (appOp != AppOpsManager.OP_NONE) {
+ final String appOp = AppOpsManager.permissionToOp(excludedPermission);
+ if (appOp != null) {
// When there is an app op associated with the permission,
// skip when both the permission and the app op are
// granted.
@@ -480,14 +511,13 @@
mService.getAppOpsManager().checkOpNoThrow(appOp,
filter.receiverList.uid,
filter.packageName)
- == AppOpsManager.MODE_ALLOWED)) {
+ == AppOpsManager.MODE_ALLOWED)) {
return "Appop Denial: receiving "
- + r.intent.toString()
+ + r.intent
+ " to " + filter.receiverList.app
+ " (pid=" + filter.receiverList.pid
+ ", uid=" + filter.receiverList.uid + ")"
- + " excludes appop " + AppOpsManager.permissionToOp(
- excludedPermission)
+ + " excludes appop " + appOp
+ " due to sender " + r.callerPackage
+ " (uid " + r.callingUid + ")";
}
@@ -496,7 +526,7 @@
// skip when permission is granted.
if (perm == PackageManager.PERMISSION_GRANTED) {
return "Permission Denial: receiving "
- + r.intent.toString()
+ + r.intent
+ " to " + filter.receiverList.app
+ " (pid=" + filter.receiverList.pid
+ ", uid=" + filter.receiverList.uid + ")"
@@ -523,19 +553,27 @@
}
// If the broadcast also requires an app op check that as well.
- if (r.appOp != AppOpsManager.OP_NONE
- && mService.getAppOpsManager().noteOpNoThrow(r.appOp,
- filter.receiverList.uid, filter.packageName, filter.featureId,
- "Broadcast delivered to registered receiver " + filter.receiverId)
- != AppOpsManager.MODE_ALLOWED) {
- return "Appop Denial: receiving "
- + r.intent.toString()
- + " to " + filter.receiverList.app
- + " (pid=" + filter.receiverList.pid
- + ", uid=" + filter.receiverList.uid + ")"
- + " requires appop " + AppOpsManager.opToName(r.appOp)
- + " due to sender " + r.callerPackage
- + " (uid " + r.callingUid + ")";
+ if (r.appOp != AppOpsManager.OP_NONE && AppOpsManager.isValidOp(r.appOp)) {
+ final String op = AppOpsManager.opToPublicName(r.appOp);
+ final int mode;
+ if (preflight) {
+ mode = mService.getAppOpsManager().checkOpNoThrow(op,
+ filter.receiverList.uid, filter.packageName, filter.featureId);
+ } else {
+ mode = mService.getAppOpsManager().noteOpNoThrow(op,
+ filter.receiverList.uid, filter.packageName, filter.featureId,
+ "Broadcast delivered to registered receiver " + filter.receiverId);
+ }
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ return "Appop Denial: receiving "
+ + r.intent
+ + " to " + filter.receiverList.app
+ + " (pid=" + filter.receiverList.pid
+ + ", uid=" + filter.receiverList.uid + ")"
+ + " requires appop " + AppOpsManager.opToName(r.appOp)
+ + " due to sender " + r.callerPackage
+ + " (uid " + r.callingUid + ")";
+ }
}
// Ensure that broadcasts are only sent to other apps if they are explicitly marked as
@@ -572,14 +610,14 @@
+ ", uid=" + r.callingUid + ") to " + component.flattenToShortString();
}
- private boolean noteOpForManifestReceiver(int appOp, BroadcastRecord r, ResolveInfo info,
- ComponentName component) {
+ private boolean noteOpForManifestReceiver(int opCode, String appOp, BroadcastRecord r,
+ ResolveInfo info, ComponentName component) {
if (ArrayUtils.isEmpty(info.activityInfo.attributionTags)) {
- return noteOpForManifestReceiverInner(appOp, r, info, component, null);
+ return noteOpForManifestReceiverInner(opCode, appOp, r, info, component, null);
} else {
// Attribution tags provided, noteOp each tag
for (String tag : info.activityInfo.attributionTags) {
- if (!noteOpForManifestReceiverInner(appOp, r, info, component, tag)) {
+ if (!noteOpForManifestReceiverInner(opCode, appOp, r, info, component, tag)) {
return false;
}
}
@@ -587,8 +625,8 @@
}
}
- private boolean noteOpForManifestReceiverInner(int appOp, BroadcastRecord r, ResolveInfo info,
- ComponentName component, String tag) {
+ private boolean noteOpForManifestReceiverInner(int opCode, String appOp, BroadcastRecord r,
+ ResolveInfo info, ComponentName component, String tag) {
if (mService.getAppOpsManager().noteOpNoThrow(appOp,
info.activityInfo.applicationInfo.uid,
info.activityInfo.packageName,
@@ -598,7 +636,37 @@
Slog.w(TAG, "Appop Denial: receiving "
+ r.intent + " to "
+ component.flattenToShortString()
- + " requires appop " + AppOpsManager.opToName(appOp)
+ + " requires appop " + AppOpsManager.opToName(opCode)
+ + " due to sender " + r.callerPackage
+ + " (uid " + r.callingUid + ")");
+ return false;
+ }
+ return true;
+ }
+
+ private boolean checkOpForManifestReceiver(int opCode, String appOp, BroadcastRecord r,
+ ResolveInfo info, ComponentName component) {
+ if (ArrayUtils.isEmpty(info.activityInfo.attributionTags)) {
+ return checkOpForManifestReceiverInner(opCode, appOp, r, info, component, null);
+ } else {
+ // Attribution tags provided, noteOp each tag
+ for (String tag : info.activityInfo.attributionTags) {
+ if (!checkOpForManifestReceiverInner(opCode, appOp, r, info, component, tag)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ private boolean checkOpForManifestReceiverInner(int opCode, String appOp, BroadcastRecord r,
+ ResolveInfo info, ComponentName component, String tag) {
+ if (mService.getAppOpsManager().checkOpNoThrow(appOp, info.activityInfo.applicationInfo.uid,
+ info.activityInfo.packageName, tag) != AppOpsManager.MODE_ALLOWED) {
+ Slog.w(TAG, "Appop Denial: receiving "
+ + r.intent + " to "
+ + component.flattenToShortString()
+ + " requires appop " + AppOpsManager.opToName(opCode)
+ " due to sender " + r.callerPackage
+ " (uid " + r.callingUid + ")");
return false;
@@ -694,9 +762,10 @@
return mPermissionManager;
}
- private boolean hasPermissionForDataDelivery(
+ private boolean hasPermission(
@NonNull String permission,
@NonNull String message,
+ boolean preflight,
@NonNull AttributionSource... attributionSources) {
final PermissionManager permissionManager = getPermissionManager();
if (permissionManager == null) {
@@ -704,9 +773,14 @@
}
for (AttributionSource attributionSource : attributionSources) {
- final int permissionCheckResult =
- permissionManager.checkPermissionForDataDelivery(
- permission, attributionSource, message);
+ final int permissionCheckResult;
+ if (preflight) {
+ permissionCheckResult = permissionManager.checkPermissionForPreflight(
+ permission, attributionSource);
+ } else {
+ permissionCheckResult = permissionManager.checkPermissionForDataDelivery(
+ permission, attributionSource, message);
+ }
if (permissionCheckResult != PackageManager.PERMISSION_GRANTED) {
return false;
}
diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
index f1007e7..0954c49 100644
--- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
+++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
@@ -238,6 +238,8 @@
"pixel_connectivity_gps",
"pixel_continuity",
"pixel_display",
+ "pixel_fingerprint",
+ "pixel_gsc",
"pixel_perf",
"pixel_sensai",
"pixel_sensors",
@@ -245,6 +247,7 @@
"pixel_system_sw_video",
"pixel_video_sw",
"pixel_watch",
+ "pixel_wifi",
"platform_compat",
"platform_security",
"pixel_watch_debug_trace",
diff --git a/services/core/java/com/android/server/am/broadcasts_flags.aconfig b/services/core/java/com/android/server/am/broadcasts_flags.aconfig
index 7f169db..68e21a3 100644
--- a/services/core/java/com/android/server/am/broadcasts_flags.aconfig
+++ b/services/core/java/com/android/server/am/broadcasts_flags.aconfig
@@ -15,4 +15,15 @@
description: "Limit the scope of receiver priorities to within a process"
is_fixed_read_only: true
bug: "369487976"
+}
+
+flag {
+ name: "avoid_note_op_at_enqueue"
+ namespace: "backstage_power"
+ description: "Avoid triggering noteOp while enqueueing a broadcast"
+ is_fixed_read_only: true
+ bug: "268016162"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 3cb2125..0f1228f 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -1164,9 +1164,11 @@
@GuardedBy("mAccessibilityServiceUidsLock")
private int[] mAccessibilityServiceUids;
- // Uid of the active input method service to check if caller is the one or not.
- private int mInputMethodServiceUid = android.os.Process.INVALID_UID;
+ // Input Method
private final Object mInputMethodServiceUidLock = new Object();
+ // Uid of the active input method service to check if caller is the one or not.
+ @GuardedBy("mInputMethodServiceUidLock")
+ private int mInputMethodServiceUid = android.os.Process.INVALID_UID;
private int mEncodedSurroundMode;
private String mEnabledSurroundFormats;
@@ -11405,7 +11407,7 @@
/** see {@link AudioManager#getFocusDuckedUidsForTest()} */
@Override
- @EnforcePermission("android.permission.QUERY_AUDIO_STATE")
+ @EnforcePermission(QUERY_AUDIO_STATE)
public @NonNull List<Integer> getFocusDuckedUidsForTest() {
super.getFocusDuckedUidsForTest_enforcePermission();
return mPlaybackMonitor.getFocusDuckedUids();
@@ -11432,7 +11434,7 @@
* @see AudioManager#getFocusFadeOutDurationForTest()
* @return the fade out duration, in ms
*/
- @EnforcePermission("android.permission.QUERY_AUDIO_STATE")
+ @EnforcePermission(QUERY_AUDIO_STATE)
public long getFocusFadeOutDurationForTest() {
super.getFocusFadeOutDurationForTest_enforcePermission();
return mMediaFocusControl.getFocusFadeOutDurationForTest();
@@ -11445,7 +11447,7 @@
* @return the time gap after a fade out completion on focus loss, and fade in start, in ms
*/
@Override
- @EnforcePermission("android.permission.QUERY_AUDIO_STATE")
+ @EnforcePermission(QUERY_AUDIO_STATE)
public long getFocusUnmuteDelayAfterFadeOutForTest() {
super.getFocusUnmuteDelayAfterFadeOutForTest_enforcePermission();
return mMediaFocusControl.getFocusUnmuteDelayAfterFadeOutForTest();
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 964b97c..551202c 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -1051,7 +1051,9 @@
void handleHdrSdrNitsChanged(float displayNits, float sdrNits) {
final float newHdrSdrRatio;
- if (displayNits != INVALID_NITS && sdrNits != INVALID_NITS) {
+ if (displayNits != INVALID_NITS && sdrNits != INVALID_NITS
+ && (mBacklightAdapter.mUseSurfaceControlBrightness ||
+ mBacklightAdapter.mForceSurfaceControl)) {
// Ensure the ratio stays >= 1.0f as values below that are nonsensical
newHdrSdrRatio = Math.max(1.f, displayNits / sdrNits);
} else {
diff --git a/services/core/java/com/android/server/display/color/OWNERS b/services/core/java/com/android/server/display/color/OWNERS
index 27adf12..8f5a9a0 100644
--- a/services/core/java/com/android/server/display/color/OWNERS
+++ b/services/core/java/com/android/server/display/color/OWNERS
@@ -1,4 +1,3 @@
christyfranks@google.com
-justinklaassen@google.com
-per-file DisplayTransformManager.java=michaelwr@google.com
\ No newline at end of file
+per-file DisplayTransformManager.java=michaelwr@google.com
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 7e8bb28..144caea 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -1365,6 +1365,21 @@
}
}
+ @Override
+ public void setScreensaverEnabled(boolean enabled) {
+ checkPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS);
+ final UserHandle userHandle = getCallingUserHandle();
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.SCREENSAVER_ENABLED, enabled ? 1 : 0,
+ userHandle.getIdentifier());
+ mPowerManagerInternal.updateSettings();
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
boolean canLaunchDreamActivity(String dreamPackageName, String packageName,
int callingUid) {
if (dreamPackageName == null || packageName == null) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
index 6157402..69a2a1c 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
@@ -197,6 +197,8 @@
boolean wasActiveSource = isActiveSource();
super.setActiveSource(logicalAddress, physicalAddress, caller);
if (wasActiveSource && !isActiveSource()) {
+ // Prevent focus stealing when losing active source.
+ removeAction(ActiveSourceAction.class);
onActiveSourceLost();
}
}
diff --git a/services/core/java/com/android/server/input/InputDataStore.java b/services/core/java/com/android/server/input/InputDataStore.java
index 834f815..6ed50b6 100644
--- a/services/core/java/com/android/server/input/InputDataStore.java
+++ b/services/core/java/com/android/server/input/InputDataStore.java
@@ -89,6 +89,10 @@
final InputStream inputStream = mInputGestureFileInjector.openRead(userId);
inputGestureDataList = readInputGesturesXml(inputStream, false);
inputStream.close();
+ } catch (FileNotFoundException exception) {
+ // There are valid reasons for the file to be missing, such as shortcuts having not
+ // been registered by the user.
+ return List.of();
} catch (IOException exception) {
// In case we are unable to read from the file on disk or another IO operation error,
// fail gracefully.
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
index 4f3aa06..280f3b7 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
@@ -120,12 +120,21 @@
* Binding flags for establishing connection to the {@link InputMethodService}.
*/
@VisibleForTesting
- static final int IME_CONNECTION_BIND_FLAGS =
- Context.BIND_AUTO_CREATE
+ static final int IME_CONNECTION_BIND_FLAGS;
+ static {
+ if (android.view.inputmethod.Flags.lowerImeOomImportance()) {
+ IME_CONNECTION_BIND_FLAGS = Context.BIND_AUTO_CREATE
+ | Context.BIND_ALMOST_PERCEPTIBLE
+ | Context.BIND_IMPORTANT_BACKGROUND
+ | Context.BIND_SCHEDULE_LIKE_TOP_APP;
+ } else {
+ IME_CONNECTION_BIND_FLAGS = Context.BIND_AUTO_CREATE
| Context.BIND_NOT_VISIBLE
| Context.BIND_NOT_FOREGROUND
| Context.BIND_IMPORTANT_BACKGROUND
| Context.BIND_SCHEDULE_LIKE_TOP_APP;
+ }
+ }
private final int mImeConnectionBindFlags;
diff --git a/services/core/java/com/android/server/inputmethod/OWNERS b/services/core/java/com/android/server/inputmethod/OWNERS
index e507c6b..9d8aef9 100644
--- a/services/core/java/com/android/server/inputmethod/OWNERS
+++ b/services/core/java/com/android/server/inputmethod/OWNERS
@@ -1,7 +1,6 @@
set noparent
roosa@google.com
-yukawa@google.com
tarandeep@google.com
fstern@google.com
cosminbaies@google.com
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
index 940bcb4..f40d0dd 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
@@ -43,7 +43,10 @@
import com.android.internal.annotations.GuardedBy;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Optional;
+import java.util.Set;
+import java.util.function.Consumer;
/**
* A class that represents a broker for the endpoint registered by the client app. This class
@@ -111,6 +114,11 @@
private final boolean mRemoteInitiated;
+ /**
+ * The set of seq # for pending reliable messages started by this endpoint for this session.
+ */
+ private final Set<Integer> mPendingSequenceNumbers = new HashSet<>();
+
SessionInfo(HubEndpointInfo remoteEndpointInfo, boolean remoteInitiated) {
mRemoteEndpointInfo = remoteEndpointInfo;
mRemoteInitiated = remoteInitiated;
@@ -131,6 +139,24 @@
public boolean isActive() {
return mSessionState == SessionState.ACTIVE;
}
+
+ public boolean isReliableMessagePending(int sequenceNumber) {
+ return mPendingSequenceNumbers.contains(sequenceNumber);
+ }
+
+ public void setReliableMessagePending(int sequenceNumber) {
+ mPendingSequenceNumbers.add(sequenceNumber);
+ }
+
+ public void setReliableMessageCompleted(int sequenceNumber) {
+ mPendingSequenceNumbers.remove(sequenceNumber);
+ }
+
+ public void forEachPendingReliableMessage(Consumer<Integer> consumer) {
+ for (int sequenceNumber : mPendingSequenceNumbers) {
+ consumer.accept(sequenceNumber);
+ }
+ }
}
/** A map between a session ID which maps to its current state. */
@@ -208,10 +234,7 @@
try {
mSessionInfoMap.put(sessionId, new SessionInfo(destination, false));
mHubInterface.openEndpointSession(
- sessionId,
- halEndpointInfo.id,
- mHalEndpointInfo.id,
- serviceDescriptor);
+ sessionId, halEndpointInfo.id, mHalEndpointInfo.id, serviceDescriptor);
} catch (RemoteException | IllegalArgumentException | UnsupportedOperationException e) {
Log.e(TAG, "Exception while calling HAL openEndpointSession", e);
cleanupSessionResources(sessionId);
@@ -286,34 +309,42 @@
public void sendMessage(
int sessionId, HubMessage message, IContextHubTransactionCallback callback) {
super.sendMessage_enforcePermission();
- Message halMessage = ContextHubServiceUtil.createHalMessage(message);
- if (!isSessionActive(sessionId)) {
- throw new SecurityException(
- "sendMessage called on inactive session (id= " + sessionId + ")");
- }
-
- if (callback == null) {
- try {
- mHubInterface.sendMessageToEndpoint(sessionId, halMessage);
- } catch (RemoteException e) {
- Log.w(TAG, "Exception while sending message on session " + sessionId, e);
+ synchronized (mOpenSessionLock) {
+ SessionInfo info = mSessionInfoMap.get(sessionId);
+ if (info == null) {
+ throw new IllegalArgumentException(
+ "sendMessage for invalid session id=" + sessionId);
}
- } else {
- ContextHubServiceTransaction transaction =
- mTransactionManager.createSessionMessageTransaction(
- mHubInterface, sessionId, halMessage, mPackageName, callback);
- try {
- mTransactionManager.addTransaction(transaction);
- } catch (IllegalStateException e) {
- Log.e(
- TAG,
- "Unable to add a transaction in sendMessageToEndpoint "
- + "(session ID = "
- + sessionId
- + ")",
- e);
- transaction.onTransactionComplete(
- ContextHubTransaction.RESULT_FAILED_SERVICE_INTERNAL_FAILURE);
+ if (!info.isActive()) {
+ throw new SecurityException(
+ "sendMessage called on inactive session (id= " + sessionId + ")");
+ }
+
+ Message halMessage = ContextHubServiceUtil.createHalMessage(message);
+ if (callback == null) {
+ try {
+ mHubInterface.sendMessageToEndpoint(sessionId, halMessage);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Exception while sending message on session " + sessionId, e);
+ }
+ } else {
+ ContextHubServiceTransaction transaction =
+ mTransactionManager.createSessionMessageTransaction(
+ mHubInterface, sessionId, halMessage, mPackageName, callback);
+ try {
+ mTransactionManager.addTransaction(transaction);
+ info.setReliableMessagePending(transaction.getMessageSequenceNumber());
+ } catch (IllegalStateException e) {
+ Log.e(
+ TAG,
+ "Unable to add a transaction in sendMessageToEndpoint "
+ + "(session ID = "
+ + sessionId
+ + ")",
+ e);
+ transaction.onTransactionComplete(
+ ContextHubTransaction.RESULT_FAILED_SERVICE_INTERNAL_FAILURE);
+ }
}
}
}
@@ -393,7 +424,9 @@
int id = mSessionInfoMap.keyAt(i);
int count = i + 1;
sb.append(
- " " + count + ". id="
+ " "
+ + count
+ + ". id="
+ id
+ ", remote:"
+ mSessionInfoMap.get(id).getRemoteEndpointInfo());
@@ -461,13 +494,24 @@
/* package */ void onMessageReceived(int sessionId, HubMessage message) {
byte code = onMessageReceivedInternal(sessionId, message);
if (code != ErrorCode.OK && message.isResponseRequired()) {
- sendMessageDeliveryStatus(
- sessionId, message.getMessageSequenceNumber(), code);
+ sendMessageDeliveryStatus(sessionId, message.getMessageSequenceNumber(), code);
}
}
/* package */ void onMessageDeliveryStatusReceived(
int sessionId, int sequenceNumber, byte errorCode) {
+ synchronized (mOpenSessionLock) {
+ SessionInfo info = mSessionInfoMap.get(sessionId);
+ if (info == null || !info.isActive()) {
+ Log.w(TAG, "Received delivery status for invalid session: id=" + sessionId);
+ return;
+ }
+ if (!info.isReliableMessagePending(sequenceNumber)) {
+ Log.w(TAG, "Received delivery status for unknown seq: " + sequenceNumber);
+ return;
+ }
+ info.setReliableMessageCompleted(sequenceNumber);
+ }
mTransactionManager.onMessageDeliveryResponse(sequenceNumber, errorCode == ErrorCode.OK);
}
@@ -492,7 +536,6 @@
onCloseEndpointSession(id, Reason.HUB_RESET);
}
}
- // TODO(b/390029594): Cancel any ongoing reliable communication transactions
}
private Optional<Byte> onEndpointSessionOpenRequestInternal(
@@ -515,9 +558,11 @@
mSessionInfoMap.put(sessionId, new SessionInfo(initiator, true));
}
- boolean success = invokeCallback(
- (consumer) ->
- consumer.onSessionOpenRequest(sessionId, initiator, serviceDescriptor));
+ boolean success =
+ invokeCallback(
+ (consumer) ->
+ consumer.onSessionOpenRequest(
+ sessionId, initiator, serviceDescriptor));
return success ? Optional.empty() : Optional.of(Reason.UNSPECIFIED);
}
@@ -590,8 +635,15 @@
private boolean cleanupSessionResources(int sessionId) {
synchronized (mOpenSessionLock) {
SessionInfo info = mSessionInfoMap.get(sessionId);
- if (info != null && !info.isRemoteInitiated()) {
- mEndpointManager.returnSessionId(sessionId);
+ if (info != null) {
+ if (!info.isRemoteInitiated()) {
+ mEndpointManager.returnSessionId(sessionId);
+ }
+ info.forEachPendingReliableMessage(
+ (sequenceNumber) -> {
+ mTransactionManager.onMessageDeliveryResponse(
+ sequenceNumber, /* success= */ false);
+ });
mSessionInfoMap.remove(sessionId);
}
return info != null;
@@ -646,10 +698,7 @@
try {
mWakeLock.release();
} catch (RuntimeException e) {
- Log.e(
- TAG,
- "Releasing the wakelock for all acquisitions fails - ",
- e);
+ Log.e(TAG, "Releasing the wakelock for all acquisitions fails - ", e);
break;
}
}
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
index a430a82..6a1db02 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
@@ -29,6 +29,7 @@
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import java.time.Duration;
import java.util.ArrayDeque;
@@ -165,52 +166,61 @@
/**
* Creates a transaction for loading a nanoapp.
*
- * @param contextHubId the ID of the hub to load the nanoapp to
- * @param nanoAppBinary the binary of the nanoapp to load
+ * @param contextHubId the ID of the hub to load the nanoapp to
+ * @param nanoAppBinary the binary of the nanoapp to load
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createLoadTransaction(
- int contextHubId, NanoAppBinary nanoAppBinary,
- IContextHubTransactionCallback onCompleteCallback, String packageName) {
+ int contextHubId,
+ NanoAppBinary nanoAppBinary,
+ IContextHubTransactionCallback onCompleteCallback,
+ String packageName) {
return new ContextHubServiceTransaction(
- mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_LOAD_NANOAPP,
- nanoAppBinary.getNanoAppId(), packageName) {
+ mNextAvailableId.getAndIncrement(),
+ ContextHubTransaction.TYPE_LOAD_NANOAPP,
+ nanoAppBinary.getNanoAppId(),
+ packageName) {
@Override
- /* package */ int onTransact() {
+ /* package */ int onTransact() {
try {
return mContextHubProxy.loadNanoapp(
contextHubId, nanoAppBinary, this.getTransactionId());
} catch (RemoteException e) {
- Log.e(TAG, "RemoteException while trying to load nanoapp with ID 0x" +
- Long.toHexString(nanoAppBinary.getNanoAppId()), e);
+ Log.e(
+ TAG,
+ "RemoteException while trying to load nanoapp with ID 0x"
+ + Long.toHexString(nanoAppBinary.getNanoAppId()),
+ e);
return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
}
}
@Override
- /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
+ /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
ContextHubStatsLog.write(
ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED,
nanoAppBinary.getNanoAppId(),
nanoAppBinary.getNanoAppVersion(),
ContextHubStatsLog
- .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_TYPE__TYPE_LOAD,
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_TYPE__TYPE_LOAD,
toStatsTransactionResult(result));
- ContextHubEventLogger.getInstance().logNanoappLoad(
- contextHubId,
- nanoAppBinary.getNanoAppId(),
- nanoAppBinary.getNanoAppVersion(),
- nanoAppBinary.getBinary().length,
- result == ContextHubTransaction.RESULT_SUCCESS);
+ ContextHubEventLogger.getInstance()
+ .logNanoappLoad(
+ contextHubId,
+ nanoAppBinary.getNanoAppId(),
+ nanoAppBinary.getNanoAppVersion(),
+ nanoAppBinary.getBinary().length,
+ result == ContextHubTransaction.RESULT_SUCCESS);
if (result == ContextHubTransaction.RESULT_SUCCESS) {
// NOTE: The legacy JNI code used to do a query right after a load success
// to synchronize the service cache. Instead store the binary that was
// requested to load to update the cache later without doing a query.
mNanoAppStateManager.addNanoAppInstance(
- contextHubId, nanoAppBinary.getNanoAppId(),
+ contextHubId,
+ nanoAppBinary.getNanoAppId(),
nanoAppBinary.getNanoAppVersion());
}
try {
@@ -228,42 +238,51 @@
/**
* Creates a transaction for unloading a nanoapp.
*
- * @param contextHubId the ID of the hub to unload the nanoapp from
- * @param nanoAppId the ID of the nanoapp to unload
+ * @param contextHubId the ID of the hub to unload the nanoapp from
+ * @param nanoAppId the ID of the nanoapp to unload
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createUnloadTransaction(
- int contextHubId, long nanoAppId, IContextHubTransactionCallback onCompleteCallback,
+ int contextHubId,
+ long nanoAppId,
+ IContextHubTransactionCallback onCompleteCallback,
String packageName) {
return new ContextHubServiceTransaction(
- mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_UNLOAD_NANOAPP,
- nanoAppId, packageName) {
+ mNextAvailableId.getAndIncrement(),
+ ContextHubTransaction.TYPE_UNLOAD_NANOAPP,
+ nanoAppId,
+ packageName) {
@Override
- /* package */ int onTransact() {
+ /* package */ int onTransact() {
try {
return mContextHubProxy.unloadNanoapp(
contextHubId, nanoAppId, this.getTransactionId());
} catch (RemoteException e) {
- Log.e(TAG, "RemoteException while trying to unload nanoapp with ID 0x" +
- Long.toHexString(nanoAppId), e);
+ Log.e(
+ TAG,
+ "RemoteException while trying to unload nanoapp with ID 0x"
+ + Long.toHexString(nanoAppId),
+ e);
return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
}
}
@Override
- /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
+ /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
ContextHubStatsLog.write(
- ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED, nanoAppId,
+ ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED,
+ nanoAppId,
0 /* nanoappVersion */,
ContextHubStatsLog
- .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_TYPE__TYPE_UNLOAD,
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_TYPE__TYPE_UNLOAD,
toStatsTransactionResult(result));
- ContextHubEventLogger.getInstance().logNanoappUnload(
- contextHubId,
- nanoAppId,
- result == ContextHubTransaction.RESULT_SUCCESS);
+ ContextHubEventLogger.getInstance()
+ .logNanoappUnload(
+ contextHubId,
+ nanoAppId,
+ result == ContextHubTransaction.RESULT_SUCCESS);
if (result == ContextHubTransaction.RESULT_SUCCESS) {
mNanoAppStateManager.removeNanoAppInstance(contextHubId, nanoAppId);
@@ -283,31 +302,37 @@
/**
* Creates a transaction for enabling a nanoapp.
*
- * @param contextHubId the ID of the hub to enable the nanoapp on
- * @param nanoAppId the ID of the nanoapp to enable
+ * @param contextHubId the ID of the hub to enable the nanoapp on
+ * @param nanoAppId the ID of the nanoapp to enable
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createEnableTransaction(
- int contextHubId, long nanoAppId, IContextHubTransactionCallback onCompleteCallback,
+ int contextHubId,
+ long nanoAppId,
+ IContextHubTransactionCallback onCompleteCallback,
String packageName) {
return new ContextHubServiceTransaction(
- mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_ENABLE_NANOAPP,
+ mNextAvailableId.getAndIncrement(),
+ ContextHubTransaction.TYPE_ENABLE_NANOAPP,
packageName) {
@Override
- /* package */ int onTransact() {
+ /* package */ int onTransact() {
try {
return mContextHubProxy.enableNanoapp(
contextHubId, nanoAppId, this.getTransactionId());
} catch (RemoteException e) {
- Log.e(TAG, "RemoteException while trying to enable nanoapp with ID 0x" +
- Long.toHexString(nanoAppId), e);
+ Log.e(
+ TAG,
+ "RemoteException while trying to enable nanoapp with ID 0x"
+ + Long.toHexString(nanoAppId),
+ e);
return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
}
}
@Override
- /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
+ /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
try {
onCompleteCallback.onTransactionComplete(result);
} catch (RemoteException e) {
@@ -320,31 +345,37 @@
/**
* Creates a transaction for disabling a nanoapp.
*
- * @param contextHubId the ID of the hub to disable the nanoapp on
- * @param nanoAppId the ID of the nanoapp to disable
+ * @param contextHubId the ID of the hub to disable the nanoapp on
+ * @param nanoAppId the ID of the nanoapp to disable
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createDisableTransaction(
- int contextHubId, long nanoAppId, IContextHubTransactionCallback onCompleteCallback,
+ int contextHubId,
+ long nanoAppId,
+ IContextHubTransactionCallback onCompleteCallback,
String packageName) {
return new ContextHubServiceTransaction(
- mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_DISABLE_NANOAPP,
+ mNextAvailableId.getAndIncrement(),
+ ContextHubTransaction.TYPE_DISABLE_NANOAPP,
packageName) {
@Override
- /* package */ int onTransact() {
+ /* package */ int onTransact() {
try {
return mContextHubProxy.disableNanoapp(
contextHubId, nanoAppId, this.getTransactionId());
} catch (RemoteException e) {
- Log.e(TAG, "RemoteException while trying to disable nanoapp with ID 0x" +
- Long.toHexString(nanoAppId), e);
+ Log.e(
+ TAG,
+ "RemoteException while trying to disable nanoapp with ID 0x"
+ + Long.toHexString(nanoAppId),
+ e);
return ContextHubTransaction.RESULT_FAILED_UNKNOWN;
}
}
@Override
- /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
+ /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
try {
onCompleteCallback.onTransactionComplete(result);
} catch (RemoteException e) {
@@ -447,18 +478,20 @@
/**
* Creates a transaction for querying for a list of nanoapps.
*
- * @param contextHubId the ID of the hub to query
+ * @param contextHubId the ID of the hub to query
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createQueryTransaction(
- int contextHubId, IContextHubTransactionCallback onCompleteCallback,
+ int contextHubId,
+ IContextHubTransactionCallback onCompleteCallback,
String packageName) {
return new ContextHubServiceTransaction(
- mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_QUERY_NANOAPPS,
+ mNextAvailableId.getAndIncrement(),
+ ContextHubTransaction.TYPE_QUERY_NANOAPPS,
packageName) {
@Override
- /* package */ int onTransact() {
+ /* package */ int onTransact() {
try {
return mContextHubProxy.queryNanoapps(contextHubId);
} catch (RemoteException e) {
@@ -468,12 +501,12 @@
}
@Override
- /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
+ /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
onQueryResponse(result, Collections.emptyList());
}
@Override
- /* package */ void onQueryResponse(
+ /* package */ void onQueryResponse(
@ContextHubTransaction.Result int result, List<NanoAppState> nanoAppStateList) {
try {
onCompleteCallback.onQueryResponse(result, nanoAppStateList);
@@ -539,6 +572,14 @@
}
}
+ @VisibleForTesting
+ /* package */
+ int numReliableMessageTransactionPending() {
+ synchronized (mReliableMessageLock) {
+ return mReliableMessageTransactionMap.size();
+ }
+ }
+
/**
* Handles a transaction response from a Context Hub.
*
@@ -585,18 +626,21 @@
void onMessageDeliveryResponse(int messageSequenceNumber, boolean success) {
if (!Flags.reliableMessageRetrySupportService()) {
TransactionAcceptConditions conditions =
- transaction -> transaction.getTransactionType()
- == ContextHubTransaction.TYPE_RELIABLE_MESSAGE
- && transaction.getMessageSequenceNumber()
- == messageSequenceNumber;
+ transaction ->
+ transaction.getTransactionType()
+ == ContextHubTransaction.TYPE_RELIABLE_MESSAGE
+ && transaction.getMessageSequenceNumber()
+ == messageSequenceNumber;
ContextHubServiceTransaction transaction = getTransactionAndHandleNext(conditions);
if (transaction == null) {
- Log.w(TAG, "Received unexpected message delivery response (expected"
- + " message sequence number = "
- + messageSequenceNumber
- + ", received messageSequenceNumber = "
- + messageSequenceNumber
- + ")");
+ Log.w(
+ TAG,
+ "Received unexpected message delivery response (expected"
+ + " message sequence number = "
+ + messageSequenceNumber
+ + ", received messageSequenceNumber = "
+ + messageSequenceNumber
+ + ")");
return;
}
@@ -640,8 +684,10 @@
*/
/* package */
void onQueryResponse(List<NanoAppState> nanoAppStateList) {
- TransactionAcceptConditions conditions = transaction ->
- transaction.getTransactionType() == ContextHubTransaction.TYPE_QUERY_NANOAPPS;
+ TransactionAcceptConditions conditions =
+ transaction ->
+ transaction.getTransactionType()
+ == ContextHubTransaction.TYPE_QUERY_NANOAPPS;
ContextHubServiceTransaction transaction = getTransactionAndHandleNext(conditions);
if (transaction == null) {
Log.w(TAG, "Received unexpected query response");
@@ -968,24 +1014,33 @@
private int toStatsTransactionResult(@ContextHubTransaction.Result int result) {
switch (result) {
case ContextHubTransaction.RESULT_SUCCESS:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_SUCCESS;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_SUCCESS;
case ContextHubTransaction.RESULT_FAILED_BAD_PARAMS:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_BAD_PARAMS;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_BAD_PARAMS;
case ContextHubTransaction.RESULT_FAILED_UNINITIALIZED:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_UNINITIALIZED;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_UNINITIALIZED;
case ContextHubTransaction.RESULT_FAILED_BUSY:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_BUSY;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_BUSY;
case ContextHubTransaction.RESULT_FAILED_AT_HUB:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_AT_HUB;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_AT_HUB;
case ContextHubTransaction.RESULT_FAILED_TIMEOUT:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_TIMEOUT;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_TIMEOUT;
case ContextHubTransaction.RESULT_FAILED_SERVICE_INTERNAL_FAILURE:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_SERVICE_INTERNAL_FAILURE;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_SERVICE_INTERNAL_FAILURE;
case ContextHubTransaction.RESULT_FAILED_HAL_UNAVAILABLE:
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_HAL_UNAVAILABLE;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_HAL_UNAVAILABLE;
case ContextHubTransaction.RESULT_FAILED_UNKNOWN:
default: /* fall through */
- return ContextHubStatsLog.CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_UNKNOWN;
+ return ContextHubStatsLog
+ .CHRE_CODE_DOWNLOAD_TRANSACTED__TRANSACTION_RESULT__TRANSACTION_RESULT_FAILED_UNKNOWN;
}
}
diff --git a/services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java b/services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java
index 7a96195..9937049 100644
--- a/services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java
+++ b/services/core/java/com/android/server/net/watchlist/WatchlistReportDbHelper.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabaseCorruptException;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
@@ -204,6 +205,11 @@
return false;
}
final String clause = WhiteListReportContract.TIMESTAMP + "< " + untilTimestamp;
- return db.delete(WhiteListReportContract.TABLE, clause, null) != 0;
+ try {
+ return db.delete(WhiteListReportContract.TABLE, clause, null) != 0;
+ } catch (SQLiteDatabaseCorruptException e) {
+ Slog.e(TAG, "Error deleting records", e);
+ return false;
+ }
}
}
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index 3f2c222..dd52cce 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -46,6 +46,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
public class ConditionProviders extends ManagedServices {
@@ -202,7 +203,14 @@
@Override
protected void loadDefaultsFromConfig() {
- String defaultDndAccess = mContext.getResources().getString(
+ for (String dndPackage : getDefaultDndAccessPackages(mContext)) {
+ addDefaultComponentOrPackage(dndPackage);
+ }
+ }
+
+ static List<String> getDefaultDndAccessPackages(Context context) {
+ ArrayList<String> packages = new ArrayList<>();
+ String defaultDndAccess = context.getResources().getString(
R.string.config_defaultDndAccessPackages);
if (defaultDndAccess != null) {
String[] dnds = defaultDndAccess.split(ManagedServices.ENABLED_SERVICES_SEPARATOR);
@@ -210,9 +218,10 @@
if (TextUtils.isEmpty(dnds[i])) {
continue;
}
- addDefaultComponentOrPackage(dnds[i]);
+ packages.add(dnds[i]);
}
}
+ return packages;
}
@Override
diff --git a/services/core/java/com/android/server/notification/ZenConfigTrimmer.java b/services/core/java/com/android/server/notification/ZenConfigTrimmer.java
new file mode 100644
index 0000000..d65954d
--- /dev/null
+++ b/services/core/java/com/android/server/notification/ZenConfigTrimmer.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2025 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.server.notification;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.service.notification.SystemZenRules;
+import android.service.notification.ZenModeConfig;
+import android.util.Slog;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+class ZenConfigTrimmer {
+
+ private static final String TAG = "ZenConfigTrimmer";
+ private static final int MAXIMUM_PARCELED_SIZE = 150_000; // bytes
+
+ private final HashSet<String> mTrustedPackages;
+
+ ZenConfigTrimmer(Context context) {
+ mTrustedPackages = new HashSet<>();
+ mTrustedPackages.add(SystemZenRules.PACKAGE_ANDROID);
+ mTrustedPackages.addAll(ConditionProviders.getDefaultDndAccessPackages(context));
+ }
+
+ void trimToMaximumSize(ZenModeConfig config) {
+ Map<String, PackageRules> rulesPerPackage = new HashMap<>();
+ for (ZenModeConfig.ZenRule rule : config.automaticRules.values()) {
+ PackageRules pkgRules = rulesPerPackage.computeIfAbsent(rule.pkg, PackageRules::new);
+ pkgRules.mRules.add(rule);
+ }
+
+ int totalSize = 0;
+ for (PackageRules pkgRules : rulesPerPackage.values()) {
+ totalSize += pkgRules.dataSize();
+ }
+
+ if (totalSize > MAXIMUM_PARCELED_SIZE) {
+ List<PackageRules> deletionCandidates = new ArrayList<>();
+ for (PackageRules pkgRules : rulesPerPackage.values()) {
+ if (!mTrustedPackages.contains(pkgRules.mPkg)) {
+ deletionCandidates.add(pkgRules);
+ }
+ }
+ deletionCandidates.sort(Comparator.comparingInt(PackageRules::dataSize).reversed());
+
+ evictPackagesFromConfig(config, deletionCandidates, totalSize);
+ }
+ }
+
+ private static void evictPackagesFromConfig(ZenModeConfig config,
+ List<PackageRules> deletionCandidates, int currentSize) {
+ while (currentSize > MAXIMUM_PARCELED_SIZE && !deletionCandidates.isEmpty()) {
+ PackageRules rulesToDelete = deletionCandidates.removeFirst();
+ Slog.w(TAG, String.format("Evicting %s zen rules from package '%s' (%s bytes)",
+ rulesToDelete.mRules.size(), rulesToDelete.mPkg, rulesToDelete.dataSize()));
+
+ for (ZenModeConfig.ZenRule rule : rulesToDelete.mRules) {
+ config.automaticRules.remove(rule.id);
+ }
+
+ currentSize -= rulesToDelete.dataSize();
+ }
+ }
+
+ private static class PackageRules {
+ private final String mPkg;
+ private final List<ZenModeConfig.ZenRule> mRules;
+ private int mParceledSize = -1;
+
+ PackageRules(String pkg) {
+ mPkg = pkg;
+ mRules = new ArrayList<>();
+ }
+
+ private int dataSize() {
+ if (mParceledSize >= 0) {
+ return mParceledSize;
+ }
+ Parcel parcel = Parcel.obtain();
+ try {
+ parcel.writeParcelableList(mRules, 0);
+ mParceledSize = parcel.dataSize();
+ return mParceledSize;
+ } finally {
+ parcel.recycle();
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 889df51..8b09c2a 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -48,6 +48,7 @@
import static com.android.internal.util.FrameworkStatsLog.DND_MODE_RULE;
import static com.android.internal.util.Preconditions.checkArgument;
import static com.android.server.notification.Flags.preventZenDeviceEffectsWhileDriving;
+import static com.android.server.notification.Flags.limitZenConfigSize;
import static java.util.Objects.requireNonNull;
@@ -192,6 +193,7 @@
private final ConditionProviders.Config mServiceConfig;
private final SystemUiSystemPropertiesFlags.FlagResolver mFlagResolver;
private final ZenModeEventLogger mZenModeEventLogger;
+ private final ZenConfigTrimmer mConfigTrimmer;
@VisibleForTesting protected int mZenMode;
@VisibleForTesting protected NotificationManager.Policy mConsolidatedPolicy;
@@ -226,6 +228,7 @@
mClock = clock;
addCallback(mMetrics);
mAppOps = context.getSystemService(AppOpsManager.class);
+ mConfigTrimmer = new ZenConfigTrimmer(mContext);
mDefaultConfig = Flags.modesUi()
? ZenModeConfig.getDefaultConfig()
@@ -2061,20 +2064,20 @@
Log.w(TAG, "Invalid config in setConfigLocked; " + config);
return false;
}
+ if (limitZenConfigSize() && (origin == ORIGIN_APP || origin == ORIGIN_USER_IN_APP)) {
+ mConfigTrimmer.trimToMaximumSize(config);
+ }
+
if (config.user != mUser) {
// simply store away for background users
- synchronized (mConfigLock) {
- mConfigs.put(config.user, config);
- }
+ mConfigs.put(config.user, config);
if (DEBUG) Log.d(TAG, "setConfigLocked: store config for user " + config.user);
return true;
}
// handle CPS backed conditions - danger! may modify config
mConditions.evaluateConfig(config, null, false /*processSubscriptions*/);
- synchronized (mConfigLock) {
- mConfigs.put(config.user, config);
- }
+ mConfigs.put(config.user, config);
if (DEBUG) Log.d(TAG, "setConfigLocked reason=" + reason, new Throwable());
ZenLog.traceConfig(origin, reason, triggeringComponent, mConfig, config, callingUid);
diff --git a/services/core/java/com/android/server/notification/flags.aconfig b/services/core/java/com/android/server/notification/flags.aconfig
index 76cd5c8..346d65a 100644
--- a/services/core/java/com/android/server/notification/flags.aconfig
+++ b/services/core/java/com/android/server/notification/flags.aconfig
@@ -212,6 +212,16 @@
}
flag {
+ name: "limit_zen_config_size"
+ namespace: "systemui"
+ description: "Enforce a maximum (serialized) size for the Zen configuration"
+ bug: "387498139"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "managed_services_concurrent_multiuser"
namespace: "systemui"
description: "Enables ManagedServices to support Concurrent multi user environment"
diff --git a/services/core/java/com/android/server/om/OverlayManagerSettings.java b/services/core/java/com/android/server/om/OverlayManagerSettings.java
index 1ac9711..395d2e1 100644
--- a/services/core/java/com/android/server/om/OverlayManagerSettings.java
+++ b/services/core/java/com/android/server/om/OverlayManagerSettings.java
@@ -545,8 +545,8 @@
throw new XmlPullParserException("old version " + oldVersion + "; ignoring");
case 3:
case 4:
- // Upgrading from version 3 to 5 is not a breaking change so do not ignore the
- // overlay file.
+ // Upgrading from versions 3 and 4 is not a breaking change, so do not
+ // ignore the overlay file.
return;
default:
throw new XmlPullParserException("unrecognized version " + oldVersion);
diff --git a/services/core/java/com/android/server/pm/OWNERS b/services/core/java/com/android/server/pm/OWNERS
index 62b89f32..f98ec04 100644
--- a/services/core/java/com/android/server/pm/OWNERS
+++ b/services/core/java/com/android/server/pm/OWNERS
@@ -1,7 +1,6 @@
hackbod@android.com
hackbod@google.com
jsharkey@android.com
-jsharkey@google.com
narayan@google.com
include /PACKAGE_MANAGER_OWNERS
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 136cb12..635ef06 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -5189,7 +5189,9 @@
"Session " + sessionId + " is a parent of multi-package session and "
+ "requestUserPreapproval on the parent session isn't supported.");
}
-
+ if (statusReceiver == null) {
+ throw new IllegalArgumentException("Status receiver cannot be null.");
+ }
synchronized (mLock) {
assertPreparedAndNotSealedLocked("request of session " + sessionId);
mPreapprovalDetails = details;
@@ -5542,6 +5544,10 @@
*/
private static void sendOnUserActionRequired(Context context, IntentSender target,
int sessionId, Intent intent) {
+ if (target == null) {
+ Slog.e(TAG, "Missing receiver for pending user action.");
+ return;
+ }
final Intent fillIn = new Intent();
fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId);
fillIn.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_USER_ACTION);
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 80c2d41..93837b3 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -2621,20 +2621,22 @@
* Valid user is the current user or the system or in the same profile group as the current
* user. Visible background users are not valid calling users.
*/
- public static void enforceCurrentUserIfVisibleBackgroundEnabled(@UserIdInt int currentUserId) {
+ public static void enforceCurrentUserIfVisibleBackgroundEnabled() {
if (!UserManager.isVisibleBackgroundUsersEnabled()) {
return;
}
final int callingUserId = UserHandle.getCallingUserId();
- if (DBG) {
- Slog.d(LOG_TAG, "enforceValidCallingUser: callingUserId=" + callingUserId
- + " isSystemUser=" + (callingUserId == USER_SYSTEM)
- + " currentUserId=" + currentUserId
- + " callingPid=" + Binder.getCallingPid()
- + " callingUid=" + Binder.getCallingUid());
- }
final long ident = Binder.clearCallingIdentity();
try {
+ final int currentUserId = ActivityManager.getCurrentUser();
+ if (DBG) {
+ Slog.d(LOG_TAG, "enforceCurrentUserIfVisibleBackgroundEnabled:"
+ + " callingUserId=" + callingUserId
+ + " isSystemUser=" + (callingUserId == USER_SYSTEM)
+ + " currentUserId=" + currentUserId
+ + " callingPid=" + Binder.getCallingPid()
+ + " callingUid=" + Binder.getCallingUid());
+ }
if (callingUserId != USER_SYSTEM && callingUserId != currentUserId
&& !UserManagerService.getInstance()
.isSameProfileGroup(callingUserId, currentUserId)) {
@@ -2937,28 +2939,20 @@
int flags = UserManager.SWITCHABILITY_STATUS_OK;
- t.traceBegin("TM.isInCall");
- final long identity = Binder.clearCallingIdentity();
- try {
- final TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class);
- if (com.android.internal.telephony.flags
- .Flags.enforceTelephonyFeatureMappingForPublicApis()) {
- if (mContext.getPackageManager().hasSystemFeature(
- PackageManager.FEATURE_TELECOM)) {
- if (telecomManager != null && telecomManager.isInCall()) {
- flags |= UserManager.SWITCHABILITY_STATUS_USER_IN_CALL;
- }
- }
- } else {
+ if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELECOM)) {
+ t.traceBegin("TM.isInCall");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ final TelecomManager telecomManager = mContext.getSystemService(
+ TelecomManager.class);
if (telecomManager != null && telecomManager.isInCall()) {
flags |= UserManager.SWITCHABILITY_STATUS_USER_IN_CALL;
}
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
- } finally {
- Binder.restoreCallingIdentity(identity);
+ t.traceEnd();
}
- t.traceEnd();
-
t.traceBegin("hasUserRestriction-DISALLOW_USER_SWITCH");
if (mLocalService.hasUserRestriction(DISALLOW_USER_SWITCH, userId)) {
flags |= UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED;
diff --git a/services/core/java/com/android/server/pm/dex/OWNERS b/services/core/java/com/android/server/pm/dex/OWNERS
index 5ca8ddd..70af4e7 100644
--- a/services/core/java/com/android/server/pm/dex/OWNERS
+++ b/services/core/java/com/android/server/pm/dex/OWNERS
@@ -1,4 +1,3 @@
-alanstokes@google.com
jiakaiz@google.com
ngeoffray@google.com
mast@google.com
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index e3eced2..dd454cd 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -7445,6 +7445,13 @@
public void setDevicePostured(boolean isPostured) {
setDevicePosturedInternal(isPostured);
}
+
+ @Override
+ public void updateSettings() {
+ synchronized (mLock) {
+ updateSettingsLocked();
+ }
+ }
}
/**
diff --git a/services/core/java/com/android/server/power/stats/BatteryHistoryDirectory.java b/services/core/java/com/android/server/power/stats/BatteryHistoryDirectory.java
index adf308a..5563f98 100644
--- a/services/core/java/com/android/server/power/stats/BatteryHistoryDirectory.java
+++ b/services/core/java/com/android/server/power/stats/BatteryHistoryDirectory.java
@@ -143,6 +143,7 @@
/**
* Returns the maximum storage size allocated to battery history.
*/
+ @Override
public int getMaxHistorySize() {
return mMaxHistorySize;
}
@@ -250,6 +251,10 @@
try (FileInputStream stream = file.openRead()) {
byte[] header = new byte[FILE_FORMAT_BYTES];
if (stream.read(header, 0, FILE_FORMAT_BYTES) == -1) {
+ if (file.getBaseFile().length() == 0) {
+ return new byte[0];
+ }
+
Slog.e(TAG, "Invalid battery history file format " + file.getBaseFile());
deleteFragment(fragment);
return null;
diff --git a/services/core/java/com/android/server/power/stats/processor/AggregatedPowerStats.java b/services/core/java/com/android/server/power/stats/processor/AggregatedPowerStats.java
index 53894a1..f2bbdfc 100644
--- a/services/core/java/com/android/server/power/stats/processor/AggregatedPowerStats.java
+++ b/services/core/java/com/android/server/power/stats/processor/AggregatedPowerStats.java
@@ -120,16 +120,18 @@
* {@link com.android.internal.os.MonotonicClock}
* @param currentTime current time in milliseconds, see {@link System#currentTimeMillis()}
*/
- void addClockUpdate(long monotonicTime, @CurrentTimeMillisLong long currentTime) {
+ boolean addClockUpdate(long monotonicTime, @CurrentTimeMillisLong long currentTime) {
ClockUpdate clockUpdate = new ClockUpdate();
clockUpdate.monotonicTime = monotonicTime;
clockUpdate.currentTime = currentTime;
if (mClockUpdates.size() < MAX_CLOCK_UPDATES) {
mClockUpdates.add(clockUpdate);
+ return true;
} else {
Slog.i(TAG, "Too many clock updates. Replacing the previous update with "
+ DateFormat.format("yyyy-MM-dd-HH-mm-ss", currentTime));
mClockUpdates.set(mClockUpdates.size() - 1, clockUpdate);
+ return false;
}
}
diff --git a/services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java b/services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java
index 8461a54..b9862aa 100644
--- a/services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java
+++ b/services/core/java/com/android/server/power/stats/processor/PowerStatsAggregator.java
@@ -98,14 +98,18 @@
if (!startedSession) {
mStats.start(item.time);
- mStats.addClockUpdate(item.time, item.currentTime);
+ if (!mStats.addClockUpdate(item.time, item.currentTime)) {
+ break;
+ }
if (baseTime == UNINITIALIZED) {
baseTime = item.time;
}
startedSession = true;
} else if (item.cmd == BatteryStats.HistoryItem.CMD_CURRENT_TIME
|| item.cmd == BatteryStats.HistoryItem.CMD_RESET) {
- mStats.addClockUpdate(item.time, item.currentTime);
+ if (!mStats.addClockUpdate(item.time, item.currentTime)) {
+ break;
+ }
}
lastTime = item.time;
@@ -164,7 +168,9 @@
consumer.accept(mStats);
}
mStats.reset();
- mStats.addClockUpdate(item.time, item.currentTime);
+ if (!mStats.addClockUpdate(item.time, item.currentTime)) {
+ break;
+ }
baseTime = lastTime = item.time;
}
mStats.addPowerStats(item.powerStats, item.time);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index fab19b6..1afbb34 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -160,8 +160,10 @@
* @param displayId The changed display Id.
* @param rootDisplayAreaId The changed display area Id.
* @param isImmersiveMode {@code true} if the display area get into immersive mode.
+ * @param windowType The window type of the controlling window.
*/
- void immersiveModeChanged(int displayId, int rootDisplayAreaId, boolean isImmersiveMode);
+ void immersiveModeChanged(int displayId, int rootDisplayAreaId, boolean isImmersiveMode,
+ int windowType);
/**
* Show a rotation suggestion that a user may approve to rotate the screen.
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index da9d016..798c794 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -732,7 +732,7 @@
@Override
public void immersiveModeChanged(int displayId, int rootDisplayAreaId,
- boolean isImmersiveMode) {
+ boolean isImmersiveMode, int windowType) {
if (mBar == null) {
return;
}
@@ -746,7 +746,7 @@
if (!CLIENT_TRANSIENT) {
// Only call from here when the client transient is not enabled.
try {
- mBar.immersiveModeChanged(rootDisplayAreaId, isImmersiveMode);
+ mBar.immersiveModeChanged(rootDisplayAreaId, isImmersiveMode, windowType);
} catch (RemoteException ex) {
}
}
diff --git a/services/core/java/com/android/server/storage/WatchedVolumeInfo.java b/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
index 94e52cd..d4b20fb 100644
--- a/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
+++ b/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
@@ -68,6 +68,10 @@
return ImmutableVolumeInfo.fromVolumeInfo(mVolumeInfo);
}
+ public ImmutableVolumeInfo getClonedImmutableVolumeInfo() {
+ return ImmutableVolumeInfo.fromVolumeInfo(mVolumeInfo.clone());
+ }
+
public StorageVolume buildStorageVolume(Context context, int userId, boolean reportUnmounted) {
return mVolumeInfo.buildStorageVolume(context, userId, reportUnmounted);
}
diff --git a/services/core/java/com/android/server/uri/OWNERS b/services/core/java/com/android/server/uri/OWNERS
index cdc07ed..6599db7 100644
--- a/services/core/java/com/android/server/uri/OWNERS
+++ b/services/core/java/com/android/server/uri/OWNERS
@@ -1,3 +1,2 @@
jsharkey@android.com
-jsharkey@google.com
varunshah@google.com
diff --git a/services/core/java/com/android/server/vibrator/VendorVibrationSession.java b/services/core/java/com/android/server/vibrator/VendorVibrationSession.java
index bda3d44..621a128 100644
--- a/services/core/java/com/android/server/vibrator/VendorVibrationSession.java
+++ b/services/core/java/com/android/server/vibrator/VendorVibrationSession.java
@@ -51,6 +51,7 @@
final class VendorVibrationSession extends IVibrationSession.Stub
implements VibrationSession, CancellationSignal.OnCancelListener, IBinder.DeathRecipient {
private static final String TAG = "VendorVibrationSession";
+ private static final boolean DEBUG = false;
/** Calls into VibratorManager functionality needed for playing an {@link ExternalVibration}. */
interface VibratorManagerHooks {
@@ -73,8 +74,8 @@
private final ICancellationSignal mCancellationSignal = CancellationSignal.createTransport();
private final int[] mVibratorIds;
private final long mCreateUptime;
- private final long mCreateTime; // for debugging
- private final IVibrationSessionCallback mCallback;
+ private final long mCreateTime;
+ private final VendorCallbackWrapper mCallback;
private final CallerInfo mCallerInfo;
private final VibratorManagerHooks mManagerHooks;
private final DeviceAdapter mDeviceAdapter;
@@ -88,11 +89,11 @@
@GuardedBy("mLock")
private boolean mEndedByVendor;
@GuardedBy("mLock")
- private long mStartTime; // for debugging
+ private long mStartTime;
@GuardedBy("mLock")
private long mEndUptime;
@GuardedBy("mLock")
- private long mEndTime; // for debugging
+ private long mEndTime;
@GuardedBy("mLock")
private VibrationStepConductor mConductor;
@@ -103,7 +104,7 @@
mCreateTime = System.currentTimeMillis();
mVibratorIds = deviceAdapter.getAvailableVibratorIds();
mHandler = handler;
- mCallback = callback;
+ mCallback = new VendorCallbackWrapper(callback, handler);
mCallerInfo = callerInfo;
mManagerHooks = managerHooks;
mDeviceAdapter = deviceAdapter;
@@ -119,7 +120,9 @@
@Override
public void finishSession() {
- Slog.d(TAG, "Session finish requested, ending vibration session...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session finish requested, ending vibration session...");
+ }
// Do not abort session in HAL, wait for ongoing vibration requests to complete.
// This might take a while to end the session, but it can be aborted by cancelSession.
requestEndSession(Status.FINISHED, /* shouldAbort= */ false, /* isVendorRequest= */ true);
@@ -127,7 +130,9 @@
@Override
public void cancelSession() {
- Slog.d(TAG, "Session cancel requested, aborting vibration session...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session cancel requested, aborting vibration session...");
+ }
// Always abort session in HAL while cancelling it.
// This might be triggered after finishSession was already called.
requestEndSession(Status.CANCELLED_BY_USER, /* shouldAbort= */ true,
@@ -156,7 +161,7 @@
@Override
public IBinder getCallerToken() {
- return mCallback.asBinder();
+ return mCallback.getBinderToken();
}
@Override
@@ -176,36 +181,30 @@
@Override
public void onCancel() {
- Slog.d(TAG, "Session cancellation signal received, aborting vibration session...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session cancellation signal received, aborting vibration session...");
+ }
requestEndSession(Status.CANCELLED_BY_USER, /* shouldAbort= */ true,
/* isVendorRequest= */ true);
}
@Override
public void binderDied() {
- Slog.d(TAG, "Session binder died, aborting vibration session...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session binder died, aborting vibration session...");
+ }
requestEndSession(Status.CANCELLED_BINDER_DIED, /* shouldAbort= */ true,
/* isVendorRequest= */ false);
}
@Override
public boolean linkToDeath() {
- try {
- mCallback.asBinder().linkToDeath(this, 0);
- } catch (RemoteException e) {
- Slog.e(TAG, "Error linking session to token death", e);
- return false;
- }
- return true;
+ return mCallback.linkToDeath(this);
}
@Override
public void unlinkToDeath() {
- try {
- mCallback.asBinder().unlinkToDeath(this, 0);
- } catch (NoSuchElementException e) {
- Slog.wtf(TAG, "Failed to unlink session to token death", e);
- }
+ mCallback.unlinkToDeath(this);
}
@Override
@@ -219,26 +218,37 @@
@Override
public void notifyVibratorCallback(int vibratorId, long vibrationId, long stepId) {
- Slog.d(TAG, "Vibration callback received for vibration " + vibrationId + " step " + stepId
- + " on vibrator " + vibratorId + ", ignoring...");
+ if (DEBUG) {
+ Slog.d(TAG, "Vibration callback received for vibration " + vibrationId
+ + " step " + stepId + " on vibrator " + vibratorId + ", ignoring...");
+ }
}
@Override
public void notifySyncedVibratorsCallback(long vibrationId) {
- Slog.d(TAG, "Synced vibration callback received for vibration " + vibrationId
- + ", ignoring...");
+ if (DEBUG) {
+ Slog.d(TAG, "Synced vibration callback received for vibration " + vibrationId
+ + ", ignoring...");
+ }
}
@Override
public void notifySessionCallback() {
- Slog.d(TAG, "Session callback received, ending vibration session...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session callback received, ending vibration session...");
+ }
synchronized (mLock) {
// If end was not requested then the HAL has cancelled the session.
- maybeSetEndRequestLocked(Status.CANCELLED_BY_UNKNOWN_REASON,
+ notifyEndRequestLocked(Status.CANCELLED_BY_UNKNOWN_REASON,
/* isVendorRequest= */ false);
maybeSetStatusToRequestedLocked();
clearVibrationConductor();
- mHandler.post(() -> mManagerHooks.onSessionReleased(mSessionId));
+ final Status endStatus = mStatus;
+ mHandler.post(() -> {
+ mManagerHooks.onSessionReleased(mSessionId);
+ // Only trigger client callback after session is released in the manager.
+ mCallback.notifyFinished(endStatus);
+ });
}
}
@@ -271,7 +281,7 @@
public boolean isEnded() {
synchronized (mLock) {
- return mStatus != Status.RUNNING;
+ return mEndTime > 0;
}
}
@@ -297,19 +307,17 @@
// Session already ended, skip start callbacks.
isAlreadyEnded = true;
} else {
+ if (DEBUG) {
+ Slog.d(TAG, "Session started at the HAL");
+ }
mStartTime = System.currentTimeMillis();
- // Run client callback in separate thread.
- mHandler.post(() -> {
- try {
- mCallback.onStarted(this);
- } catch (RemoteException e) {
- Slog.e(TAG, "Error notifying vendor session started", e);
- }
- });
+ mCallback.notifyStarted(this);
}
}
if (isAlreadyEnded) {
- Slog.d(TAG, "Session already ended after starting the HAL, aborting...");
+ if (DEBUG) {
+ Slog.d(TAG, "Session already ended after starting the HAL, aborting...");
+ }
mHandler.post(() -> mManagerHooks.endSession(mSessionId, /* shouldAbort= */ true));
}
}
@@ -337,8 +345,10 @@
public boolean maybeSetVibrationConductor(VibrationStepConductor conductor) {
synchronized (mLock) {
if (mConductor != null) {
- Slog.d(TAG, "Session still dispatching previous vibration, new vibration "
- + conductor.getVibration().id + " ignored");
+ if (DEBUG) {
+ Slog.d(TAG, "Session still dispatching previous vibration, new vibration "
+ + conductor.getVibration().id + " ignored");
+ }
return false;
}
mConductor = conductor;
@@ -347,53 +357,45 @@
}
private void requestEndSession(Status status, boolean shouldAbort, boolean isVendorRequest) {
- Slog.d(TAG, "Session end request received with status " + status);
- boolean shouldTriggerSessionHook = false;
+ if (DEBUG) {
+ Slog.d(TAG, "Session end request received with status " + status);
+ }
synchronized (mLock) {
- maybeSetEndRequestLocked(status, isVendorRequest);
+ notifyEndRequestLocked(status, isVendorRequest);
if (!isEnded() && isStarted()) {
// Trigger session hook even if it was already triggered, in case a second request
// is aborting the ongoing/ending session. This might cause it to end right away.
// Wait for HAL callback before setting the end status.
- shouldTriggerSessionHook = true;
+ if (DEBUG) {
+ Slog.d(TAG, "Requesting HAL session end with abort=" + shouldAbort);
+ }
+ mHandler.post(() -> mManagerHooks.endSession(mSessionId, shouldAbort));
} else {
- // Session not active in the HAL, set end status right away.
+ // Session not active in the HAL, try to set end status right away.
maybeSetStatusToRequestedLocked();
+ // Use status used to end this session, which might be different from requested.
+ mCallback.notifyFinished(mStatus);
}
}
- if (shouldTriggerSessionHook) {
- Slog.d(TAG, "Requesting HAL session end with abort=" + shouldAbort);
- mHandler.post(() -> mManagerHooks.endSession(mSessionId, shouldAbort));
- }
}
@GuardedBy("mLock")
- private void maybeSetEndRequestLocked(Status status, boolean isVendorRequest) {
+ private void notifyEndRequestLocked(Status status, boolean isVendorRequest) {
if (mEndStatusRequest != null) {
- // End already requested, keep first requested status and time.
+ // End already requested, keep first requested status.
return;
}
- Slog.d(TAG, "Session end request accepted for status " + status);
+ if (DEBUG) {
+ Slog.d(TAG, "Session end request accepted for status " + status);
+ }
mEndStatusRequest = status;
mEndedByVendor = isVendorRequest;
- mEndTime = System.currentTimeMillis();
- mEndUptime = SystemClock.uptimeMillis();
+ mCallback.notifyFinishing();
if (mConductor != null) {
// Vibration is being dispatched when session end was requested, cancel it.
mConductor.notifyCancelled(new Vibration.EndInfo(status),
/* immediate= */ status != Status.FINISHED);
}
- if (isStarted()) {
- // Only trigger "finishing" callback if session started.
- // Run client callback in separate thread.
- mHandler.post(() -> {
- try {
- mCallback.onFinishing();
- } catch (RemoteException e) {
- Slog.e(TAG, "Error notifying vendor session is finishing", e);
- }
- });
- }
}
@GuardedBy("mLock")
@@ -406,40 +408,123 @@
// No end status was requested, nothing to set.
return;
}
- Slog.d(TAG, "Session end request applied for status " + mEndStatusRequest);
+ if (DEBUG) {
+ Slog.d(TAG, "Session end request applied for status " + mEndStatusRequest);
+ }
mStatus = mEndStatusRequest;
- // Run client callback in separate thread.
- final Status endStatus = mStatus;
- mHandler.post(() -> {
- try {
- mCallback.onFinished(toSessionStatus(endStatus));
- } catch (RemoteException e) {
- Slog.e(TAG, "Error notifying vendor session finished", e);
- }
- });
+ mEndTime = System.currentTimeMillis();
+ mEndUptime = SystemClock.uptimeMillis();
}
- @android.os.vibrator.VendorVibrationSession.Status
- private static int toSessionStatus(Status status) {
- // Exhaustive switch to cover all possible internal status.
- return switch (status) {
- case FINISHED
- -> android.os.vibrator.VendorVibrationSession.STATUS_SUCCESS;
- case IGNORED_UNSUPPORTED
- -> STATUS_UNSUPPORTED;
- case CANCELLED_BINDER_DIED, CANCELLED_BY_APP_OPS, CANCELLED_BY_USER,
- CANCELLED_SUPERSEDED, CANCELLED_BY_FOREGROUND_USER, CANCELLED_BY_SCREEN_OFF,
- CANCELLED_BY_SETTINGS_UPDATE, CANCELLED_BY_UNKNOWN_REASON
- -> android.os.vibrator.VendorVibrationSession.STATUS_CANCELED;
- case IGNORED_APP_OPS, IGNORED_BACKGROUND, IGNORED_FOR_EXTERNAL, IGNORED_FOR_ONGOING,
- IGNORED_FOR_POWER, IGNORED_FOR_SETTINGS, IGNORED_FOR_HIGHER_IMPORTANCE,
- IGNORED_FOR_RINGER_MODE, IGNORED_FROM_VIRTUAL_DEVICE, IGNORED_SUPERSEDED,
- IGNORED_MISSING_PERMISSION, IGNORED_ON_WIRELESS_CHARGER
- -> android.os.vibrator.VendorVibrationSession.STATUS_IGNORED;
- case UNKNOWN, IGNORED_ERROR_APP_OPS, IGNORED_ERROR_CANCELLING, IGNORED_ERROR_SCHEDULING,
- IGNORED_ERROR_TOKEN, FORWARDED_TO_INPUT_DEVICES, FINISHED_UNEXPECTED, RUNNING
- -> android.os.vibrator.VendorVibrationSession.STATUS_UNKNOWN_ERROR;
- };
+ /**
+ * Wrapper class to handle client callbacks asynchronously.
+ *
+ * <p>This class is also responsible for link/unlink to the client process binder death, and for
+ * making sure the callbacks are only triggered once. The conversion between session status and
+ * the API status code is also defined here.
+ */
+ private static final class VendorCallbackWrapper {
+ private final IVibrationSessionCallback mCallback;
+ private final Handler mHandler;
+
+ private boolean mIsStarted;
+ private boolean mIsFinishing;
+ private boolean mIsFinished;
+
+ VendorCallbackWrapper(@NonNull IVibrationSessionCallback callback,
+ @NonNull Handler handler) {
+ mCallback = callback;
+ mHandler = handler;
+ }
+
+ synchronized IBinder getBinderToken() {
+ return mCallback.asBinder();
+ }
+
+ synchronized boolean linkToDeath(DeathRecipient recipient) {
+ try {
+ mCallback.asBinder().linkToDeath(recipient, 0);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error linking session to token death", e);
+ return false;
+ }
+ return true;
+ }
+
+ synchronized void unlinkToDeath(DeathRecipient recipient) {
+ try {
+ mCallback.asBinder().unlinkToDeath(recipient, 0);
+ } catch (NoSuchElementException e) {
+ Slog.wtf(TAG, "Failed to unlink session to token death", e);
+ }
+ }
+
+ synchronized void notifyStarted(IVibrationSession session) {
+ if (mIsStarted) {
+ return;
+ }
+ mIsStarted = true;
+ mHandler.post(() -> {
+ try {
+ mCallback.onStarted(session);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error notifying vendor session started", e);
+ }
+ });
+ }
+
+ synchronized void notifyFinishing() {
+ if (!mIsStarted || mIsFinishing || mIsFinished) {
+ // Ignore if never started or if already finishing or finished.
+ return;
+ }
+ mIsFinishing = true;
+ mHandler.post(() -> {
+ try {
+ mCallback.onFinishing();
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error notifying vendor session is finishing", e);
+ }
+ });
+ }
+
+ synchronized void notifyFinished(Status status) {
+ if (mIsFinished) {
+ return;
+ }
+ mIsFinished = true;
+ mHandler.post(() -> {
+ try {
+ mCallback.onFinished(toSessionStatus(status));
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error notifying vendor session finished", e);
+ }
+ });
+ }
+
+ @android.os.vibrator.VendorVibrationSession.Status
+ private static int toSessionStatus(Status status) {
+ // Exhaustive switch to cover all possible internal status.
+ return switch (status) {
+ case FINISHED
+ -> android.os.vibrator.VendorVibrationSession.STATUS_SUCCESS;
+ case IGNORED_UNSUPPORTED
+ -> STATUS_UNSUPPORTED;
+ case CANCELLED_BINDER_DIED, CANCELLED_BY_APP_OPS, CANCELLED_BY_USER,
+ CANCELLED_SUPERSEDED, CANCELLED_BY_FOREGROUND_USER, CANCELLED_BY_SCREEN_OFF,
+ CANCELLED_BY_SETTINGS_UPDATE, CANCELLED_BY_UNKNOWN_REASON
+ -> android.os.vibrator.VendorVibrationSession.STATUS_CANCELED;
+ case IGNORED_APP_OPS, IGNORED_BACKGROUND, IGNORED_FOR_EXTERNAL, IGNORED_FOR_ONGOING,
+ IGNORED_FOR_POWER, IGNORED_FOR_SETTINGS, IGNORED_FOR_HIGHER_IMPORTANCE,
+ IGNORED_FOR_RINGER_MODE, IGNORED_FROM_VIRTUAL_DEVICE, IGNORED_SUPERSEDED,
+ IGNORED_MISSING_PERMISSION, IGNORED_ON_WIRELESS_CHARGER
+ -> android.os.vibrator.VendorVibrationSession.STATUS_IGNORED;
+ case UNKNOWN, IGNORED_ERROR_APP_OPS, IGNORED_ERROR_CANCELLING,
+ IGNORED_ERROR_SCHEDULING, IGNORED_ERROR_TOKEN, FORWARDED_TO_INPUT_DEVICES,
+ FINISHED_UNEXPECTED, RUNNING
+ -> android.os.vibrator.VendorVibrationSession.STATUS_UNKNOWN_ERROR;
+ };
+ }
}
/**
@@ -499,7 +584,7 @@
@Override
public void logMetrics(VibratorFrameworkStatsLogger statsLogger) {
if (mStartTime > 0) {
- // Only log sessions that have started.
+ // Only log sessions that have started in the HAL.
statsLogger.logVibrationVendorSessionStarted(mCallerInfo.uid);
statsLogger.logVibrationVendorSessionVibrations(mCallerInfo.uid,
mVibrations.size());
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 12409793..d452d76 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2326,13 +2326,16 @@
if (isActivityTypeHome()) {
// The snapshot of home is only used once because it won't be updated while screen
// is on (see {@link TaskSnapshotController#screenTurningOff}).
- mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId);
final Transition transition = mTransitionController.getCollectingTransition();
if (transition != null && (transition.getFlags()
& WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) == 0) {
+ mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId);
// Only use snapshot of home as starting window when unlocking directly.
return false;
}
+ // Add a reference before removing snapshot from cache.
+ snapshot.addReference(TaskSnapshot.REFERENCE_WRITE_TO_PARCEL);
+ mWmService.mTaskSnapshotController.removeSnapshotCache(task.mTaskId);
}
return createSnapshot(snapshot, typeParameter);
}
@@ -6002,12 +6005,6 @@
setVisibility(false);
switch (mState) {
- case STOPPING:
- case STOPPED:
- // Reset the flag indicating that an app can enter picture-in-picture once the
- // activity is hidden
- supportsEnterPipOnTaskSwitch = false;
- break;
case RESUMED:
case INITIALIZING:
case PAUSING:
diff --git a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
index 5eed5470..cb82f48 100644
--- a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
+++ b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
@@ -18,6 +18,7 @@
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH;
+import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA;
@@ -183,9 +184,10 @@
private boolean shouldEnableCameraCompatFreeformTreatmentForApp() {
if (mCameraCompatAllowOrientationTreatmentOptProp != null) {
+ // OptProp is not-null iff the opt-out flag is on.
return mCameraCompatAllowOrientationTreatmentOptProp
.shouldEnableWithOptOutOverrideAndProperty(isChangeEnabled(mActivityRecord,
- OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT));
+ OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION));
} else {
return isChangeEnabled(mActivityRecord,
OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT);
diff --git a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
index aed5e14..f51e60c 100644
--- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
+++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
@@ -144,9 +144,9 @@
.setPendingIntentCreatorBackgroundActivityStartMode(
MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED);
- private ActivityTaskManagerService mService;
+ private final ActivityTaskManagerService mService;
- private ActivityTaskSupervisor mSupervisor;
+ private final ActivityTaskSupervisor mSupervisor;
@GuardedBy("mStrictModeBalCallbacks")
private final SparseArray<ArrayMap<IBinder, IBackgroundActivityLaunchCallback>>
mStrictModeBalCallbacks = new SparseArray<>();
@@ -279,16 +279,24 @@
mSupervisor = supervisor;
}
+ private ActivityTaskManagerService getService() {
+ return mService;
+ }
+
+ private ActivityTaskSupervisor getSupervisor() {
+ return mSupervisor;
+ }
+
private boolean isHomeApp(int uid, @Nullable String packageName) {
- if (mService.mHomeProcess != null) {
+ if (getService().mHomeProcess != null) {
// Fast check
- return uid == mService.mHomeProcess.mUid;
+ return uid == getService().mHomeProcess.mUid;
}
if (packageName == null) {
return false;
}
ComponentName activity =
- mService.getPackageManagerInternalLocked()
+ getService().getPackageManagerInternalLocked()
.getDefaultHomeActivity(UserHandle.getUserId(uid));
return activity != null && packageName.equals(activity.getPackageName());
}
@@ -342,7 +350,8 @@
mAllowBalExemptionForSystemProcess = allowBalExemptionForSystemProcess;
mOriginatingPendingIntent = originatingPendingIntent;
mIntent = intent;
- mRealCallingPackage = mService.getPackageNameIfUnique(realCallingUid, realCallingPid);
+ mRealCallingPackage = getService().getPackageNameIfUnique(realCallingUid,
+ realCallingPid);
mIsCallForResult = resultRecord != null;
mCheckedOptions = checkedOptions;
@BackgroundActivityStartMode int callerBackgroundActivityStartMode =
@@ -401,13 +410,13 @@
checkedOptions, realCallingUid, mRealCallingPackage);
}
- mAppSwitchState = mService.getBalAppSwitchesState();
- mCallingUidProcState = mService.mActiveUids.getUidState(callingUid);
+ mAppSwitchState = getService().getBalAppSwitchesState();
+ mCallingUidProcState = getService().mActiveUids.getUidState(callingUid);
mIsCallingUidPersistentSystemProcess =
mCallingUidProcState <= ActivityManager.PROCESS_STATE_PERSISTENT_UI;
mCallingUidHasVisibleActivity =
- mService.mVisibleActivityProcessTracker.hasVisibleActivity(callingUid);
- mCallingUidHasNonAppVisibleWindow = mService.mActiveUids.hasNonAppVisibleWindow(
+ getService().mVisibleActivityProcessTracker.hasVisibleActivity(callingUid);
+ mCallingUidHasNonAppVisibleWindow = getService().mActiveUids.hasNonAppVisibleWindow(
callingUid);
if (realCallingUid == NO_PROCESS_UID) {
// no process provided
@@ -422,16 +431,17 @@
mRealCallingUidHasNonAppVisibleWindow = mCallingUidHasNonAppVisibleWindow;
// In the PendingIntent case callerApp is not passed in, so resolve it ourselves.
mRealCallerApp = callerApp == null
- ? mService.getProcessController(realCallingPid, realCallingUid)
+ ? getService().getProcessController(realCallingPid, realCallingUid)
: callerApp;
mIsRealCallingUidPersistentSystemProcess = mIsCallingUidPersistentSystemProcess;
} else {
- mRealCallingUidProcState = mService.mActiveUids.getUidState(realCallingUid);
+ mRealCallingUidProcState = getService().mActiveUids.getUidState(realCallingUid);
mRealCallingUidHasVisibleActivity =
- mService.mVisibleActivityProcessTracker.hasVisibleActivity(realCallingUid);
+ getService().mVisibleActivityProcessTracker.hasVisibleActivity(
+ realCallingUid);
mRealCallingUidHasNonAppVisibleWindow =
- mService.mActiveUids.hasNonAppVisibleWindow(realCallingUid);
- mRealCallerApp = mService.getProcessController(realCallingPid, realCallingUid);
+ getService().mActiveUids.hasNonAppVisibleWindow(realCallingUid);
+ mRealCallerApp = getService().getProcessController(realCallingPid, realCallingUid);
mIsRealCallingUidPersistentSystemProcess =
mRealCallingUidProcState <= ActivityManager.PROCESS_STATE_PERSISTENT_UI;
}
@@ -481,7 +491,7 @@
if (uid == 0) {
return "root[debugOnly]";
}
- String name = mService.getPackageManagerInternalLocked().getNameForUid(uid);
+ String name = getService().getPackageManagerInternalLocked().getNameForUid(uid);
if (name == null) {
name = "uid=" + uid;
}
@@ -783,7 +793,7 @@
Process.getAppUidForSdkSandboxUid(state.mRealCallingUid);
// realCallingSdkSandboxUidToAppUid should probably just be used instead (or in addition
// to realCallingUid when calculating resultForRealCaller below.
- if (mService.hasActiveVisibleWindow(realCallingSdkSandboxUidToAppUid)) {
+ if (getService().hasActiveVisibleWindow(realCallingSdkSandboxUidToAppUid)) {
state.setResultForRealCaller(new BalVerdict(BAL_ALLOW_SDK_SANDBOX,
/*background*/ false,
"uid in SDK sandbox has visible (non-toast) window"));
@@ -1000,30 +1010,28 @@
* or {@link #BAL_BLOCK} if the launch should be blocked
*/
BalVerdict checkBackgroundActivityStartAllowedByCaller(BalState state) {
+ boolean evaluateVisibleOnly = balAdditionalStartModes()
+ && state.mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
+ == MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE;
+ if (evaluateVisibleOnly) {
+ return evaluateChain(state, mCheckCallerVisible, mCheckCallerNonAppVisible,
+ mCheckCallerProcessAllowsForeground);
+ }
if (state.isPendingIntent()) {
// PendingIntents should mostly be allowed by the sender (real caller) or a permission
// the creator of the PendingIntent has. Visibility should be the exceptional case, so
// test it last (this does not change the result, just the bal code).
- BalVerdict result = BalVerdict.BLOCK;
- if (!(balAdditionalStartModes()
- && state.mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
- == MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE)) {
- result = checkBackgroundActivityStartAllowedByCallerInBackground(state);
- }
- if (result == BalVerdict.BLOCK) {
- result = checkBackgroundActivityStartAllowedByCallerInForeground(state);
-
- }
- return result;
- } else {
- BalVerdict result = checkBackgroundActivityStartAllowedByCallerInForeground(state);
- if (result == BalVerdict.BLOCK && !(balAdditionalStartModes()
- && state.mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()
- == MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE)) {
- result = checkBackgroundActivityStartAllowedByCallerInBackground(state);
- }
- return result;
+ return evaluateChain(state, mCheckCallerIsAllowlistedUid,
+ mCheckCallerIsAllowlistedComponent, mCheckCallerHasBackgroundPermission,
+ mCheckCallerHasSawPermission, mCheckCallerHasBgStartAppOp,
+ mCheckCallerProcessAllowsBackground, mCheckCallerVisible,
+ mCheckCallerNonAppVisible, mCheckCallerProcessAllowsForeground);
}
+ return evaluateChain(state, mCheckCallerVisible, mCheckCallerNonAppVisible,
+ mCheckCallerProcessAllowsForeground, mCheckCallerIsAllowlistedUid,
+ mCheckCallerIsAllowlistedComponent, mCheckCallerHasBackgroundPermission,
+ mCheckCallerHasSawPermission, mCheckCallerHasBgStartAppOp,
+ mCheckCallerProcessAllowsBackground);
}
interface BalExemptionCheck {
@@ -1061,7 +1069,7 @@
if (state.mCallingUidHasNonAppVisibleWindow) {
return new BalVerdict(BAL_ALLOW_NON_APP_VISIBLE_WINDOW,
/*background*/ false, "callingUid has non-app visible window "
- + mService.mActiveUids.getNonAppVisibleWindowDetails(state.mCallingUid));
+ + getService().mActiveUids.getNonAppVisibleWindowDetails(state.mCallingUid));
}
return BalVerdict.BLOCK;
};
@@ -1090,7 +1098,7 @@
final int callingAppId = UserHandle.getAppId(state.mCallingUid);
// IME should always be allowed to start activity, like IME settings.
final WindowState imeWindow =
- mService.mRootWindowContainer.getCurrentInputMethodWindow();
+ getService().mRootWindowContainer.getCurrentInputMethodWindow();
if (imeWindow != null && callingAppId == imeWindow.mOwnerUid) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ false,
@@ -1104,23 +1112,23 @@
}
// don't abort if the caller has the same uid as the recents component
- if (mSupervisor.mRecentTasks.isCallerRecents(state.mCallingUid)) {
+ if (getSupervisor().mRecentTasks.isCallerRecents(state.mCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ true, "Recents Component");
}
// don't abort if the callingUid is the device owner
- if (mService.isDeviceOwner(state.mCallingUid)) {
+ if (getService().isDeviceOwner(state.mCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ true, "Device Owner");
}
// don't abort if the callingUid is a affiliated profile owner
- if (mService.isAffiliatedProfileOwner(state.mCallingUid)) {
+ if (getService().isAffiliatedProfileOwner(state.mCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ true, "Affiliated Profile Owner");
}
// don't abort if the callingUid has companion device
final int callingUserId = UserHandle.getUserId(state.mCallingUid);
- if (mService.isAssociatedCompanionApp(callingUserId, state.mCallingUid)) {
+ if (getService().isAssociatedCompanionApp(callingUserId, state.mCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ true, "Companion App");
}
@@ -1138,7 +1146,7 @@
};
private final BalExemptionCheck mCheckCallerHasSawPermission = state -> {
// don't abort if the callingUid has SYSTEM_ALERT_WINDOW permission
- if (mService.hasSystemAlertWindowPermission(state.mCallingUid, state.mCallingPid,
+ if (getService().hasSystemAlertWindowPermission(state.mCallingUid, state.mCallingPid,
state.mCallingPackage)) {
return new BalVerdict(BAL_ALLOW_SAW_PERMISSION,
/*background*/ true, "SYSTEM_ALERT_WINDOW permission is granted");
@@ -1148,7 +1156,7 @@
private final BalExemptionCheck mCheckCallerHasBgStartAppOp = state -> {
// don't abort if the callingUid and callingPackage have the
// OP_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION appop
- if (isSystemExemptFlagEnabled() && mService.getAppOpsManager().checkOpNoThrow(
+ if (isSystemExemptFlagEnabled() && getService().getAppOpsManager().checkOpNoThrow(
AppOpsManager.OP_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION,
state.mCallingUid, state.mCallingPackage) == AppOpsManager.MODE_ALLOWED) {
return new BalVerdict(BAL_ALLOW_PERMISSION, /*background*/ true,
@@ -1170,34 +1178,18 @@
* @return A code denoting which BAL rule allows an activity to be started,
* or {@link #BAL_BLOCK} if the launch should be blocked
*/
- BalVerdict checkBackgroundActivityStartAllowedByCallerInForeground(BalState state) {
- return evaluateChain(state, mCheckCallerVisible, mCheckCallerNonAppVisible,
- mCheckCallerProcessAllowsForeground);
- }
-
- /**
- * @return A code denoting which BAL rule allows an activity to be started,
- * or {@link #BAL_BLOCK} if the launch should be blocked
- */
- BalVerdict checkBackgroundActivityStartAllowedByCallerInBackground(BalState state) {
- return evaluateChain(state, mCheckCallerIsAllowlistedUid,
- mCheckCallerIsAllowlistedComponent, mCheckCallerHasBackgroundPermission,
- mCheckCallerHasSawPermission, mCheckCallerHasBgStartAppOp,
- mCheckCallerProcessAllowsBackground);
- }
-
- /**
- * @return A code denoting which BAL rule allows an activity to be started,
- * or {@link #BAL_BLOCK} if the launch should be blocked
- */
BalVerdict checkBackgroundActivityStartAllowedByRealCaller(BalState state) {
- BalVerdict result = checkBackgroundActivityStartAllowedByRealCallerInForeground(state);
- if (result == BalVerdict.BLOCK && !(balAdditionalStartModes()
+ boolean evaluateVisibleOnly = balAdditionalStartModes()
&& state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
- == MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE)) {
- result = checkBackgroundActivityStartAllowedByRealCallerInBackground(state);
+ == MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE;
+ if (evaluateVisibleOnly) {
+ return evaluateChain(state, mCheckRealCallerVisible, mCheckRealCallerNonAppVisible,
+ mCheckRealCallerProcessAllowsBalForeground);
}
- return result;
+ return evaluateChain(state, mCheckRealCallerVisible, mCheckRealCallerNonAppVisible,
+ mCheckRealCallerProcessAllowsBalForeground, mCheckRealCallerBalPermission,
+ mCheckRealCallerSawPermission, mCheckRealCallerAllowlistedUid,
+ mCheckRealCallerAllowlistedComponent, mCheckRealCallerProcessAllowsBalBackground);
}
private final BalExemptionCheck mCheckRealCallerVisible = state -> {
@@ -1218,21 +1210,20 @@
if (state.mRealCallingUidHasNonAppVisibleWindow) {
return new BalVerdict(BAL_ALLOW_NON_APP_VISIBLE_WINDOW,
/*background*/ false, "realCallingUid has non-app visible window "
- + mService.mActiveUids.getNonAppVisibleWindowDetails(state.mRealCallingUid));
+ + getService().mActiveUids.getNonAppVisibleWindowDetails(
+ state.mRealCallingUid));
}
return BalVerdict.BLOCK;
};
- private final BalExemptionCheck mCheckRealCallerProcessAllowsBalForeground = state -> {
- // Don't abort if the realCallerApp or other processes of that uid are considered to be in
- // the foreground.
- return checkProcessAllowsBal(state.mRealCallerApp, state, BAL_CHECK_FOREGROUND);
- };
+ // Don't abort if the realCallerApp or other processes of that uid are considered to be in
+ // the foreground.
+ private final BalExemptionCheck mCheckRealCallerProcessAllowsBalForeground =
+ state -> checkProcessAllowsBal(state.mRealCallerApp, state, BAL_CHECK_FOREGROUND);
- private final BalExemptionCheck mCheckRealCallerProcessAllowsBalBackground = state -> {
- // don't abort if the callerApp or other processes of that uid are allowed in any way
- return checkProcessAllowsBal(state.mRealCallerApp, state, BAL_CHECK_BACKGROUND);
- };
+ // don't abort if the callerApp or other processes of that uid are allowed in any way
+ private final BalExemptionCheck mCheckRealCallerProcessAllowsBalBackground =
+ state -> checkProcessAllowsBal(state.mRealCallerApp, state, BAL_CHECK_BACKGROUND);
private final BalExemptionCheck mCheckRealCallerBalPermission = state -> {
boolean allowAlways = state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
@@ -1251,7 +1242,7 @@
== MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
// don't abort if the realCallingUid has SYSTEM_ALERT_WINDOW permission
if (allowAlways
- && mService.hasSystemAlertWindowPermission(state.mRealCallingUid,
+ && getService().hasSystemAlertWindowPermission(state.mRealCallingUid,
state.mRealCallingPid, state.mRealCallingPackage)) {
return new BalVerdict(BAL_ALLOW_SAW_PERMISSION,
/*background*/ true, "SYSTEM_ALERT_WINDOW permission is granted");
@@ -1276,7 +1267,7 @@
private final BalExemptionCheck mCheckRealCallerAllowlistedComponent = state -> {
// don't abort if the realCallingUid is an associated companion app
- if (mService.isAssociatedCompanionApp(
+ if (getService().isAssociatedCompanionApp(
UserHandle.getUserId(state.mRealCallingUid), state.mRealCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
/*background*/ false,
@@ -1285,25 +1276,6 @@
return BalVerdict.BLOCK;
};
- /**
- * @return A code denoting which BAL rule allows an activity to be started,
- * or {@link #BAL_BLOCK} if the launch should be blocked
- */
- BalVerdict checkBackgroundActivityStartAllowedByRealCallerInForeground(BalState state) {
- return evaluateChain(state, mCheckRealCallerVisible, mCheckRealCallerNonAppVisible,
- mCheckRealCallerProcessAllowsBalForeground);
- }
-
- /**
- * @return A code denoting which BAL rule allows an activity to be started,
- * or {@link #BAL_BLOCK} if the launch should be blocked
- */
- BalVerdict checkBackgroundActivityStartAllowedByRealCallerInBackground(BalState state) {
- return evaluateChain(state, mCheckRealCallerBalPermission, mCheckRealCallerSawPermission,
- mCheckRealCallerAllowlistedUid, mCheckRealCallerAllowlistedComponent,
- mCheckRealCallerProcessAllowsBalBackground);
- }
-
@VisibleForTesting boolean hasBalPermission(int uid, int pid) {
return ActivityTaskManagerService.checkPermission(START_ACTIVITIES_FROM_BACKGROUND,
pid, uid) == PERMISSION_GRANTED;
@@ -1329,7 +1301,7 @@
} else {
// only if that one wasn't allowed, check the other ones
final ArraySet<WindowProcessController> uidProcesses =
- mService.mProcessMap.getProcesses(app.mUid);
+ getService().mProcessMap.getProcesses(app.mUid);
if (uidProcesses != null) {
for (int i = uidProcesses.size() - 1; i >= 0; i--) {
final WindowProcessController proc = uidProcesses.valueAt(i);
@@ -1500,7 +1472,7 @@
if (ActivitySecurityModelFeatureFlags.shouldShowToast(callingUid)) {
String toastText = ActivitySecurityModelFeatureFlags.DOC_LINK
+ (enforceBlock ? " blocked " : " would block ")
- + getApplicationLabel(mService.mContext.getPackageManager(),
+ + getApplicationLabel(getService().mContext.getPackageManager(),
launchedFromPackageName);
showToast(toastText);
@@ -1522,7 +1494,7 @@
}
@VisibleForTesting void showToast(String toastText) {
- UiThread.getHandler().post(() -> Toast.makeText(mService.mContext,
+ UiThread.getHandler().post(() -> Toast.makeText(getService().mContext,
toastText, Toast.LENGTH_LONG).show());
}
@@ -1599,7 +1571,7 @@
return;
}
- String packageName = mService.mContext.getPackageManager().getNameForUid(callingUid);
+ String packageName = getService().mContext.getPackageManager().getNameForUid(callingUid);
BalState state = new BalState(callingUid, callingPid, packageName, INVALID_UID,
INVALID_PID, null, null, false, null, null, ActivityOptions.makeBasic());
@BalCode int balCode = checkBackgroundActivityStartAllowedByCaller(state).mCode;
@@ -1660,7 +1632,7 @@
boolean restrictActivitySwitch = ActivitySecurityModelFeatureFlags
.shouldRestrictActivitySwitch(callingUid) && bas.mTopActivityOptedIn;
- PackageManager pm = mService.mContext.getPackageManager();
+ PackageManager pm = getService().mContext.getPackageManager();
String callingPackage = pm.getNameForUid(callingUid);
final CharSequence callingLabel;
if (callingPackage == null) {
@@ -1821,7 +1793,7 @@
return bas.optedIn(ar);
}
- PackageManager pm = mService.mContext.getPackageManager();
+ PackageManager pm = getService().mContext.getPackageManager();
ApplicationInfo applicationInfo;
final int sourceUserId = UserHandle.getUserId(sourceUid);
@@ -1878,7 +1850,7 @@
if (sourceRecord == null) {
joiner.add(prefix + "Source Package: " + targetRecord.launchedFromPackage);
- String realCallingPackage = mService.mContext.getPackageManager().getNameForUid(
+ String realCallingPackage = getService().mContext.getPackageManager().getNameForUid(
realCallingUid);
joiner.add(prefix + "Real Calling Uid Package: " + realCallingPackage);
} else {
@@ -1913,7 +1885,7 @@
joiner.add(prefix + "BalCode: " + balCodeToString(balCode));
joiner.add(prefix + "Allowed By Grace Period: " + allowedByGracePeriod);
joiner.add(prefix + "LastResumedActivity: "
- + recordToString.apply(mService.mLastResumedActivity));
+ + recordToString.apply(getService().mLastResumedActivity));
joiner.add(prefix + "System opted into enforcement: " + asmOptSystemIntoEnforcement());
if (mTopFinishedActivity != null) {
@@ -1986,7 +1958,7 @@
}
private BalVerdict statsLog(BalVerdict finalVerdict, BalState state) {
- if (finalVerdict.blocks() && mService.isActivityStartsLoggingEnabled()) {
+ if (finalVerdict.blocks() && getService().isActivityStartsLoggingEnabled()) {
// log aborted activity start to TRON
mSupervisor
.getActivityMetricsLogger()
@@ -2222,7 +2194,7 @@
return -1;
}
try {
- PackageManager pm = mService.mContext.getPackageManager();
+ PackageManager pm = getService().mContext.getPackageManager();
return pm.getTargetSdkVersion(packageName);
} catch (Exception e) {
return -1;
@@ -2243,8 +2215,8 @@
this.mLaunchCount = entry == null || !ar.isUid(entry.mUid) ? 1 : entry.mLaunchCount + 1;
this.mDebugInfo = getDebugStringForActivityRecord(ar);
- mService.mH.postDelayed(() -> {
- synchronized (mService.mGlobalLock) {
+ getService().mH.postDelayed(() -> {
+ synchronized (getService().mGlobalLock) {
if (mTaskIdToFinishedActivity.get(taskId) == this) {
mTaskIdToFinishedActivity.remove(taskId);
}
diff --git a/services/core/java/com/android/server/wm/ContentRecorder.java b/services/core/java/com/android/server/wm/ContentRecorder.java
index d6ae651..c26acec 100644
--- a/services/core/java/com/android/server/wm/ContentRecorder.java
+++ b/services/core/java/com/android/server/wm/ContentRecorder.java
@@ -490,7 +490,7 @@
return null;
}
final Task taskToRecord = wc.asTask();
- if (taskToRecord == null) {
+ if (taskToRecord == null || !taskToRecord.isAttached()) {
handleStartRecordingFailed();
ProtoLog.v(WM_DEBUG_CONTENT_RECORDING,
"Content Recording: Unable to retrieve task to start recording for "
diff --git a/services/core/java/com/android/server/wm/DesktopModeHelper.java b/services/core/java/com/android/server/wm/DesktopModeHelper.java
index c2255d8..dc42b32 100644
--- a/services/core/java/com/android/server/wm/DesktopModeHelper.java
+++ b/services/core/java/com/android/server/wm/DesktopModeHelper.java
@@ -79,7 +79,7 @@
}
@VisibleForTesting
- static boolean isDeviceEligibleForDesktopMode(@NonNull Context context) {
+ public static boolean isDeviceEligibleForDesktopMode(@NonNull Context context) {
if (!shouldEnforceDeviceRestrictions()) {
return true;
}
diff --git a/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java b/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
index b6f74a0..a4eeb68 100644
--- a/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
@@ -16,6 +16,10 @@
package com.android.server.wm;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.DesktopModeHelper.canEnterDesktopMode;
@@ -23,10 +27,13 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityOptions;
+import android.app.WindowConfiguration;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.util.Slog;
+import android.window.DesktopModeFlags;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.server.wm.LaunchParamsController.LaunchParamsModifier;
/**
* The class that defines default launch params for tasks in desktop mode
@@ -74,6 +81,13 @@
appendLog("task null, skipping");
return RESULT_SKIP;
}
+
+ if (DesktopModeFlags.DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX.isTrue()
+ && !isEnteringDesktopMode(task, options, currentParams)) {
+ appendLog("not entering desktop mode, skipping");
+ return RESULT_SKIP;
+ }
+
if (com.android.window.flags.Flags.fixLayoutExistingTask()
&& task.getCreatedByOrganizerTask() != null) {
appendLog("has created-by-organizer-task, skipping");
@@ -122,6 +136,62 @@
return RESULT_CONTINUE;
}
+ /**
+ * Returns true if a task is entering desktop mode, due to its windowing mode being freeform or
+ * if there exists other freeform tasks on the display.
+ */
+ @VisibleForTesting
+ boolean isEnteringDesktopMode(
+ @NonNull Task task,
+ @Nullable ActivityOptions options,
+ @NonNull LaunchParamsController.LaunchParams currentParams) {
+ // As freeform tasks cannot exist outside of desktop mode, it is safe to assume if
+ // freeform tasks are visible we are in desktop mode and as a result any launching
+ // activity will also enter desktop mode. On this same relationship, we can also assume
+ // if there are not visible freeform tasks but a freeform activity is now launching, it
+ // will force the device into desktop mode.
+ return (task.getDisplayContent().getTopMostVisibleFreeformActivity() != null
+ && checkSourceWindowModesCompatible(task, options, currentParams))
+ || isRequestingFreeformWindowMode(task, options, currentParams);
+ }
+
+ private boolean isRequestingFreeformWindowMode(
+ @NonNull Task task,
+ @Nullable ActivityOptions options,
+ @NonNull LaunchParamsController.LaunchParams currentParams) {
+ return task.inFreeformWindowingMode()
+ || (options != null && options.getLaunchWindowingMode() == WINDOWING_MODE_FREEFORM)
+ || (currentParams.hasWindowingMode()
+ && currentParams.mWindowingMode == WINDOWING_MODE_FREEFORM);
+ }
+
+ /**
+ * Returns true is all possible source window modes are compatible with desktop mode.
+ */
+ private boolean checkSourceWindowModesCompatible(
+ @NonNull Task task,
+ @Nullable ActivityOptions options,
+ @NonNull LaunchParamsController.LaunchParams currentParams) {
+ return isCompatibleDesktopWindowingMode(task.getWindowingMode())
+ && (options == null
+ || isCompatibleDesktopWindowingMode(options.getLaunchWindowingMode()))
+ && isCompatibleDesktopWindowingMode(currentParams.mWindowingMode);
+ }
+
+ /**
+ * Returns true is the requesting window mode is one that can lead to the activity entering
+ * desktop.
+ */
+ private boolean isCompatibleDesktopWindowingMode(
+ @WindowConfiguration.WindowingMode int windowingMode) {
+ return switch (windowingMode) {
+ case WINDOWING_MODE_UNDEFINED,
+ WINDOWING_MODE_FULLSCREEN,
+ WINDOWING_MODE_FREEFORM -> true;
+ default -> false;
+ };
+ }
+
private void initLogBuilder(Task task, ActivityRecord activity) {
if (DEBUG) {
mLogBuilder = new StringBuilder(
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a874ef6..64c19ff 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -157,6 +157,7 @@
import static com.android.server.wm.utils.RegionUtils.forEachRectReverse;
import static com.android.server.wm.utils.RegionUtils.rectListToRegion;
import static com.android.window.flags.Flags.enablePersistingDensityScaleForConnectedDisplays;
+import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -3673,6 +3674,11 @@
pw.println();
super.dump(pw, prefix, dumpAll);
+ pw.print(prefix);
+ if (mHasSetIgnoreOrientationRequest) {
+ pw.print("mHasSetIgnoreOrientationRequest=true ");
+ }
+ pw.print("ignoreOrientationRequest="); pw.println(getIgnoreOrientationRequest());
pw.print(prefix); pw.print("mLayoutSeq="); pw.println(mLayoutSeq);
pw.print(" mCurrentFocus="); pw.println(mCurrentFocus);
@@ -3835,13 +3841,18 @@
/**
* Looking for the focused window on this display if the top focused display hasn't been
- * found yet (topFocusedDisplayId is INVALID_DISPLAY) or per-display focused was allowed.
+ * found yet (topFocusedDisplayId is INVALID_DISPLAY), per-display focused was allowed, or
+ * the display is presenting. The last one is needed to update system bar visibility in response
+ * to presentation visibility because per-display focus is needed to change system bar
+ * visibility, but the display shouldn't get global focus when a presentation gets shown.
*
* @param topFocusedDisplayId Id of the top focused display.
* @return The focused window or null if there isn't any or no need to seek.
*/
WindowState findFocusedWindowIfNeeded(int topFocusedDisplayId) {
- return (hasOwnFocus() || topFocusedDisplayId == INVALID_DISPLAY)
+ return (hasOwnFocus() || topFocusedDisplayId == INVALID_DISPLAY
+ || (enablePresentationForConnectedDisplays()
+ && mWmService.mPresentationController.isPresentationVisible(mDisplayId)))
? findFocusedWindow() : null;
}
@@ -6932,6 +6943,8 @@
/** The actual requested visible inset types for this display */
private @InsetsType int mRequestedVisibleTypes = WindowInsets.Type.defaultVisible();
+ private @InsetsType int mAnimatingTypes = 0;
+
/** The component name of the top focused window on this display */
private ComponentName mTopFocusedComponentName = null;
@@ -7069,6 +7082,18 @@
}
return 0;
}
+
+ @Override
+ public @InsetsType int getAnimatingTypes() {
+ return mAnimatingTypes;
+ }
+
+ @Override
+ public void setAnimatingTypes(@InsetsType int animatingTypes) {
+ if (mAnimatingTypes != animatingTypes) {
+ mAnimatingTypes = animatingTypes;
+ }
+ }
}
MagnificationSpec getMagnificationSpec() {
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 4908df0..ec5b503f 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2564,7 +2564,7 @@
final int rootDisplayAreaId = root == null ? FEATURE_UNDEFINED : root.mFeatureId;
// TODO(b/277290737): Move this to the client side, instead of using a proxy.
callStatusBarSafely(statusBar -> statusBar.immersiveModeChanged(getDisplayId(),
- rootDisplayAreaId, isImmersiveMode));
+ rootDisplayAreaId, isImmersiveMode, win.getWindowType()));
}
// Show transient bars for panic if needed.
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 1a90bcc..9cf792d 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -25,6 +25,7 @@
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_ORIENTATION;
+import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_ORIENTATION_CHANGE;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_OPEN;
import static com.android.server.wm.DisplayRotationProto.FIXED_TO_USER_ROTATION_MODE;
import static com.android.server.wm.DisplayRotationProto.FROZEN_TO_USER_ROTATION;
@@ -587,11 +588,6 @@
ActivityInfo.screenOrientationToString(lastOrientation), lastOrientation,
Surface.rotationToString(oldRotation), oldRotation);
- ProtoLog.v(WM_DEBUG_ORIENTATION,
- "Display id=%d selected orientation %s (%d), got rotation %s (%d)", displayId,
- ActivityInfo.screenOrientationToString(lastOrientation), lastOrientation,
- Surface.rotationToString(rotation), rotation);
-
if (oldRotation == rotation) {
// No change.
return false;
@@ -601,9 +597,11 @@
mDisplayRotationCoordinator.onDefaultDisplayRotationChanged(rotation);
}
- ProtoLog.v(WM_DEBUG_ORIENTATION,
- "Display id=%d rotation changed to %d from %d, lastOrientation=%d",
- displayId, rotation, oldRotation, lastOrientation);
+ ProtoLog.i(WM_DEBUG_ORIENTATION_CHANGE, "Display id=%d rotation changed to %d from %d,"
+ + " lastOrientation=%d userRotationMode=%d userRotation=%d"
+ + " lastSensorRotation=%d",
+ displayId, rotation, oldRotation, lastOrientation, mUserRotationMode, mUserRotation,
+ mLastSensorRotation);
mRotation = rotation;
diff --git a/services/core/java/com/android/server/wm/InsetsControlTarget.java b/services/core/java/com/android/server/wm/InsetsControlTarget.java
index cee4967..6462a37 100644
--- a/services/core/java/com/android/server/wm/InsetsControlTarget.java
+++ b/services/core/java/com/android/server/wm/InsetsControlTarget.java
@@ -97,6 +97,20 @@
@NonNull ImeTracker.Token statsToken) {
}
+ /**
+ * @return {@link WindowInsets.Type.InsetsType}s which are currently animating (showing or
+ * hiding).
+ */
+ default @InsetsType int getAnimatingTypes() {
+ return 0;
+ }
+
+ /**
+ * @param animatingTypes the {@link InsetsType}s, that are currently animating
+ */
+ default void setAnimatingTypes(@InsetsType int animatingTypes) {
+ }
+
/** Returns {@code target.getWindow()}, or null if {@code target} is {@code null}. */
static WindowState asWindowOrNull(InsetsControlTarget target) {
return target != null ? target.getWindow() : null;
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index 009d482..2872214 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -790,8 +790,6 @@
private final Handler mHandler;
private final String mName;
- private boolean mInsetsAnimationRunning;
-
Host(Handler handler, String name) {
mHandler = handler;
mName = name;
@@ -901,10 +899,5 @@
public IBinder getWindowToken() {
return null;
}
-
- @Override
- public void notifyAnimationRunningStateChanged(boolean running) {
- mInsetsAnimationRunning = running;
- }
}
}
diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java
index 164abab..5e0395f 100644
--- a/services/core/java/com/android/server/wm/InsetsStateController.java
+++ b/services/core/java/com/android/server/wm/InsetsStateController.java
@@ -225,13 +225,16 @@
for (int i = mProviders.size() - 1; i >= 0; i--) {
final InsetsSourceProvider provider = mProviders.valueAt(i);
final @InsetsType int type = provider.getSource().getType();
+ final boolean isImeProvider = type == WindowInsets.Type.ime();
if ((type & changedTypes) != 0) {
- final boolean isImeProvider = type == WindowInsets.Type.ime();
changed |= provider.updateClientVisibility(
- caller, isImeProvider ? statsToken : null)
+ caller, isImeProvider ? statsToken : null)
// Fake control target cannot change the client visibility, but it should
// change the insets with its newly requested visibility.
|| (caller == provider.getFakeControlTarget());
+ } else if (isImeProvider && android.view.inputmethod.Flags.refactorInsetsController()) {
+ ImeTracker.forLogging().onCancelled(statsToken,
+ ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
}
}
if (changed) {
diff --git a/services/core/java/com/android/server/wm/OWNERS b/services/core/java/com/android/server/wm/OWNERS
index dede767..243a532 100644
--- a/services/core/java/com/android/server/wm/OWNERS
+++ b/services/core/java/com/android/server/wm/OWNERS
@@ -3,7 +3,6 @@
ogunwale@google.com
jjaggi@google.com
racarr@google.com
-chaviw@google.com
vishnun@google.com
akulian@google.com
roosa@google.com
diff --git a/services/core/java/com/android/server/wm/PresentationController.java b/services/core/java/com/android/server/wm/PresentationController.java
index b3cff9c..acc658b 100644
--- a/services/core/java/com/android/server/wm/PresentationController.java
+++ b/services/core/java/com/android/server/wm/PresentationController.java
@@ -16,10 +16,17 @@
package com.android.server.wm;
+import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
+
+import static com.android.internal.protolog.WmProtoLogGroups.WM_ERROR;
import static com.android.window.flags.Flags.enablePresentationForConnectedDisplays;
import android.annotation.NonNull;
-import android.util.IntArray;
+import android.annotation.Nullable;
+import android.hardware.display.DisplayManager;
+import android.util.SparseArray;
+import android.view.WindowManager.LayoutParams.WindowType;
import com.android.internal.protolog.ProtoLog;
import com.android.internal.protolog.WmProtoLogGroups;
@@ -27,15 +34,125 @@
/**
* Manages presentation windows.
*/
-class PresentationController {
+class PresentationController implements DisplayManager.DisplayListener {
- // TODO(b/395475549): Add support for display add/remove, and activity move across displays.
- private final IntArray mPresentingDisplayIds = new IntArray();
+ private static class Presentation {
+ @NonNull final WindowState mWin;
+ @NonNull final WindowContainerListener mPresentationListener;
+ // This is the task which started this presentation. This shouldn't be null in most cases
+ // because the intended usage of the Presentation API is that an activity that started a
+ // presentation should control the UI and lifecycle of the presentation window.
+ // However, the API doesn't necessarily requires a host activity to exist (e.g. a background
+ // service can launch a presentation), so this can be null.
+ @Nullable final Task mHostTask;
+ @Nullable final WindowContainerListener mHostTaskListener;
- PresentationController() {}
+ Presentation(@NonNull WindowState win,
+ @NonNull WindowContainerListener presentationListener,
+ @Nullable Task hostTask,
+ @Nullable WindowContainerListener hostTaskListener) {
+ mWin = win;
+ mPresentationListener = presentationListener;
+ mHostTask = hostTask;
+ mHostTaskListener = hostTaskListener;
+ }
- private boolean isPresenting(int displayId) {
- return mPresentingDisplayIds.contains(displayId);
+ @Override
+ public String toString() {
+ return "{win: " + mWin.getName() + ", display: " + mWin.getDisplayId()
+ + ", hostTask: " + (mHostTask != null ? mHostTask.getName() : null) + "}";
+ }
+ }
+
+ private final SparseArray<Presentation> mPresentations = new SparseArray();
+
+ @Nullable
+ private Presentation getPresentation(@Nullable WindowState win) {
+ if (win == null) return null;
+ for (int i = 0; i < mPresentations.size(); i++) {
+ final Presentation presentation = mPresentations.valueAt(i);
+ if (win == presentation.mWin) return presentation;
+ }
+ return null;
+ }
+
+ private boolean hasPresentationWindow(int displayId) {
+ return mPresentations.contains(displayId);
+ }
+
+ boolean isPresentationVisible(int displayId) {
+ final Presentation presentation = mPresentations.get(displayId);
+ return presentation != null && presentation.mWin.mToken.isVisibleRequested();
+ }
+
+ boolean canPresent(@NonNull WindowState win, @NonNull DisplayContent displayContent) {
+ return canPresent(win, displayContent, win.mAttrs.type, win.getUid());
+ }
+
+ /**
+ * Checks if a presentation window can be shown on the given display.
+ * If the given |win| is empty, a new presentation window is being created.
+ * If the given |win| is not empty, the window already exists as presentation, and we're
+ * revalidate if the |win| is still qualified to be shown.
+ */
+ boolean canPresent(@Nullable WindowState win, @NonNull DisplayContent displayContent,
+ @WindowType int type, int uid) {
+ if (type == TYPE_PRIVATE_PRESENTATION) {
+ // Private presentations can only be created on private displays.
+ return displayContent.isPrivate();
+ }
+
+ if (type != TYPE_PRESENTATION) {
+ return false;
+ }
+
+ if (!enablePresentationForConnectedDisplays()) {
+ return displayContent.getDisplay().isPublicPresentation();
+ }
+
+ boolean allDisplaysArePresenting = true;
+ for (int i = 0; i < displayContent.mWmService.mRoot.mChildren.size(); i++) {
+ final DisplayContent dc = displayContent.mWmService.mRoot.mChildren.get(i);
+ if (displayContent.mDisplayId != dc.mDisplayId
+ && !mPresentations.contains(dc.mDisplayId)) {
+ allDisplaysArePresenting = false;
+ break;
+ }
+ }
+ if (allDisplaysArePresenting) {
+ // All displays can't present simultaneously.
+ return false;
+ }
+
+ final int displayId = displayContent.mDisplayId;
+ if (hasPresentationWindow(displayId)
+ && win != null && win != mPresentations.get(displayId).mWin) {
+ // A display can't have multiple presentations.
+ return false;
+ }
+
+ Task hostTask = null;
+ final Presentation presentation = getPresentation(win);
+ if (presentation != null) {
+ hostTask = presentation.mHostTask;
+ } else if (win == null) {
+ final Task globallyFocusedTask =
+ displayContent.mWmService.mRoot.getTopDisplayFocusedRootTask();
+ if (globallyFocusedTask != null && uid == globallyFocusedTask.effectiveUid) {
+ hostTask = globallyFocusedTask;
+ }
+ }
+ if (hostTask != null && displayId == hostTask.getDisplayId()) {
+ // A presentation can't cover its own host task.
+ return false;
+ }
+ if (hostTask == null && !displayContent.getDisplay().isPublicPresentation()) {
+ // A globally focused host task on a different display is needed to show a
+ // presentation on a non-presenting display.
+ return false;
+ }
+
+ return true;
}
boolean shouldOccludeActivities(int displayId) {
@@ -45,32 +162,87 @@
// be shown on them.
// TODO(b/390481621): Disallow a presentation from covering its controlling activity so that
// the presentation won't stop its controlling activity.
- return enablePresentationForConnectedDisplays() && isPresenting(displayId);
+ return enablePresentationForConnectedDisplays() && isPresentationVisible(displayId);
}
- void onPresentationAdded(@NonNull WindowState win) {
+ void onPresentationAdded(@NonNull WindowState win, int uid) {
final int displayId = win.getDisplayId();
- if (isPresenting(displayId)) {
- return;
- }
ProtoLog.v(WmProtoLogGroups.WM_DEBUG_PRESENTATION, "Presentation added to display %d: %s",
- win.getDisplayId(), win);
- mPresentingDisplayIds.add(win.getDisplayId());
+ displayId, win);
win.mWmService.mDisplayManagerInternal.onPresentation(displayId, /*isShown=*/ true);
+
+ final WindowContainerListener presentationWindowListener = new WindowContainerListener() {
+ @Override
+ public void onRemoved() {
+ if (!hasPresentationWindow(displayId)) {
+ ProtoLog.e(WM_ERROR, "Failed to remove presentation on"
+ + "non-presenting display %d: %s", displayId, win);
+ return;
+ }
+ final Presentation presentation = mPresentations.get(displayId);
+ win.mToken.unregisterWindowContainerListener(presentation.mPresentationListener);
+ if (presentation.mHostTask != null) {
+ presentation.mHostTask.unregisterWindowContainerListener(
+ presentation.mHostTaskListener);
+ }
+ mPresentations.remove(displayId);
+ win.mWmService.mDisplayManagerInternal.onPresentation(displayId, false /*isShown*/);
+ }
+ };
+ win.mToken.registerWindowContainerListener(presentationWindowListener);
+
+ Task hostTask = null;
+ if (enablePresentationForConnectedDisplays()) {
+ final Task globallyFocusedTask =
+ win.mWmService.mRoot.getTopDisplayFocusedRootTask();
+ if (globallyFocusedTask != null && uid == globallyFocusedTask.effectiveUid) {
+ hostTask = globallyFocusedTask;
+ }
+ }
+ WindowContainerListener hostTaskListener = null;
+ if (hostTask != null) {
+ hostTaskListener = new WindowContainerListener() {
+ public void onDisplayChanged(DisplayContent dc) {
+ final Presentation presentation = mPresentations.get(dc.getDisplayId());
+ if (presentation != null && !canPresent(presentation.mWin, dc)) {
+ removePresentation(dc.mDisplayId, "host task moved to display "
+ + dc.getDisplayId());
+ }
+ }
+
+ public void onRemoved() {
+ removePresentation(win.getDisplayId(), "host task removed");
+ }
+ };
+ hostTask.registerWindowContainerListener(hostTaskListener);
+ }
+
+ mPresentations.put(displayId, new Presentation(win, presentationWindowListener, hostTask,
+ hostTaskListener));
}
- void onPresentationRemoved(@NonNull WindowState win) {
- final int displayId = win.getDisplayId();
- if (!isPresenting(displayId)) {
- return;
+ void removePresentation(int displayId, @NonNull String reason) {
+ final Presentation presentation = mPresentations.get(displayId);
+ if (enablePresentationForConnectedDisplays() && presentation != null) {
+ ProtoLog.v(WmProtoLogGroups.WM_DEBUG_PRESENTATION, "Removing Presentation %s for "
+ + "reason %s", mPresentations.get(displayId), reason);
+ final WindowState win = presentation.mWin;
+ win.mWmService.mAtmService.mH.post(() -> {
+ synchronized (win.mWmService.mGlobalLock) {
+ win.removeIfPossible();
+ }
+ });
}
- ProtoLog.v(WmProtoLogGroups.WM_DEBUG_PRESENTATION,
- "Presentation removed from display %d: %s", win.getDisplayId(), win);
- // TODO(b/393945496): Make sure that there's one presentation at most per display.
- final int displayIdIndex = mPresentingDisplayIds.indexOf(displayId);
- if (displayIdIndex != -1) {
- mPresentingDisplayIds.remove(displayIdIndex);
- }
- win.mWmService.mDisplayManagerInternal.onPresentation(displayId, /*isShown=*/ false);
}
+
+ @Override
+ public void onDisplayAdded(int displayId) {}
+
+ @Override
+ public void onDisplayRemoved(int displayId) {
+ removePresentation(displayId, "display removed " + displayId);
+ }
+
+ @Override
+ public void onDisplayChanged(int displayId) {}
}
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 8d198b2..3ed16db 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -737,6 +737,17 @@
}
}
+ @Override
+ public void updateAnimatingTypes(IWindow window, @InsetsType int animatingTypes) {
+ synchronized (mService.mGlobalLock) {
+ final WindowState win = mService.windowForClientLocked(this, window,
+ false /* throwOnError */);
+ if (win != null) {
+ win.setAnimatingTypes(animatingTypes);
+ }
+ }
+ }
+
void onWindowAdded(WindowState w) {
if (mPackageName == null) {
mPackageName = mProcess.mInfo.packageName;
@@ -1015,15 +1026,4 @@
}
}
}
-
- @Override
- public void notifyInsetsAnimationRunningStateChanged(IWindow window, boolean running) {
- synchronized (mService.mGlobalLock) {
- final WindowState win = mService.windowForClientLocked(this, window,
- false /* throwOnError */);
- if (win != null) {
- win.notifyInsetsAnimationRunningStateChanged(running);
- }
- }
- }
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index a8c67f8..f95698a 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -2062,6 +2062,7 @@
if (prev != null) {
prev.setWillCloseOrEnterPip(false);
+ prev.supportsEnterPipOnTaskSwitch = false;
final boolean wasStopping = prev.isState(STOPPING);
prev.setState(PAUSED, "completePausedLocked");
mPausingActivity = null;
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 78c6f90..3db1d50 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -3638,11 +3638,6 @@
}
final boolean nowVisible = wc.isVisibleRequested();
if (nowVisible == mVisible) {
- if (mRestoringTransientHide) {
- // The requested visibility has not changed for transient-hide containers, but
- // we are restoring them so we should considering them moving to front again
- return TRANSIT_TO_FRONT;
- }
return TRANSIT_CHANGE;
}
if (mExistenceChanged) {
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index d0d2067..1c3510d 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -2007,6 +2007,11 @@
return getActivity(r -> !r.finishing, true /* traverseTopToBottom */);
}
+ ActivityRecord getTopMostVisibleFreeformActivity() {
+ return getActivity(r -> r.isVisibleRequested() && r.inFreeformWindowingMode(),
+ true /* traverseTopToBottom */);
+ }
+
ActivityRecord getTopActivity(boolean includeFinishing, boolean includeOverlays) {
// Break down into 4 calls to avoid object creation due to capturing input params.
if (includeFinishing) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 821c040..28f2825 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -1583,14 +1583,18 @@
return WindowManagerGlobal.ADD_DUPLICATE_ADD;
}
- if (type == TYPE_PRIVATE_PRESENTATION && !displayContent.isPrivate()) {
+ if (type == TYPE_PRIVATE_PRESENTATION
+ && !mPresentationController.canPresent(null /*win*/, displayContent, type,
+ callingUid)) {
ProtoLog.w(WM_ERROR,
"Attempted to add private presentation window to a non-private display. "
+ "Aborting.");
return WindowManagerGlobal.ADD_PERMISSION_DENIED;
}
- if (type == TYPE_PRESENTATION && !displayContent.getDisplay().isPublicPresentation()) {
+ if (type == TYPE_PRESENTATION
+ && !mPresentationController.canPresent(null /*win*/, displayContent, type,
+ callingUid)) {
ProtoLog.w(WM_ERROR,
"Attempted to add presentation window to a non-suitable display. "
+ "Aborting.");
@@ -1830,7 +1834,8 @@
}
win.mTransitionController.collect(win.mToken);
res |= addWindowInner(win, displayPolicy, activity, displayContent, outInsetsState,
- outAttachedFrame, outActiveControls, client, outSizeCompatScale, attrs);
+ outAttachedFrame, outActiveControls, client, outSizeCompatScale, attrs,
+ callingUid);
// A presentation hides all activities behind on the same display.
win.mDisplayContent.ensureActivitiesVisible(/*starting=*/ null,
/*notifyClients=*/ true);
@@ -1841,7 +1846,8 @@
}
} else {
res |= addWindowInner(win, displayPolicy, activity, displayContent, outInsetsState,
- outAttachedFrame, outActiveControls, client, outSizeCompatScale, attrs);
+ outAttachedFrame, outActiveControls, client, outSizeCompatScale, attrs,
+ callingUid);
}
}
@@ -1854,7 +1860,7 @@
@NonNull ActivityRecord activity, @NonNull DisplayContent displayContent,
@NonNull InsetsState outInsetsState, @NonNull Rect outAttachedFrame,
@NonNull InsetsSourceControl.Array outActiveControls, @NonNull IWindow client,
- @NonNull float[] outSizeCompatScale, @NonNull LayoutParams attrs) {
+ @NonNull float[] outSizeCompatScale, @NonNull LayoutParams attrs, int uid) {
int res = 0;
final int type = attrs.type;
boolean imMayMove = true;
@@ -1971,7 +1977,7 @@
outSizeCompatScale[0] = win.getCompatScaleForClient();
if (res >= ADD_OKAY && win.isPresentation()) {
- mPresentationController.onPresentationAdded(win);
+ mPresentationController.onPresentationAdded(win, uid);
}
return res;
@@ -4767,6 +4773,26 @@
}
}
+ @EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS)
+ @Override
+ public void updateDisplayWindowAnimatingTypes(int displayId, @InsetsType int animatingTypes) {
+ updateDisplayWindowAnimatingTypes_enforcePermission();
+ if (android.view.inputmethod.Flags.reportAnimatingInsetsTypes()) {
+ final long origId = Binder.clearCallingIdentity();
+ try {
+ synchronized (mGlobalLock) {
+ final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc == null || dc.mRemoteInsetsControlTarget == null) {
+ return;
+ }
+ dc.mRemoteInsetsControlTarget.setAnimatingTypes(animatingTypes);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(origId);
+ }
+ }
+ }
+
@Override
public int watchRotation(IRotationWatcher watcher, int displayId) {
final DisplayContent displayContent;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index ec67dd87..3b7d312 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -736,6 +736,8 @@
private @InsetsType int mRequestedVisibleTypes = WindowInsets.Type.defaultVisible();
+ private @InsetsType int mAnimatingTypes = 0;
+
/**
* Freeze the insets state in some cases that not necessarily keeps up-to-date to the client.
* (e.g app exiting transition)
@@ -842,6 +844,27 @@
mRequestedVisibleTypes & ~mask | requestedVisibleTypes & mask);
}
+ @Override
+ public @InsetsType int getAnimatingTypes() {
+ return mAnimatingTypes;
+ }
+
+ @Override
+ public void setAnimatingTypes(@InsetsType int animatingTypes) {
+ if (mAnimatingTypes != animatingTypes) {
+ if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
+ Trace.instant(TRACE_TAG_WINDOW_MANAGER,
+ TextUtils.formatSimple("%s: setAnimatingTypes(%s)",
+ getName(),
+ animatingTypes));
+ }
+ mInsetsAnimationRunning = animatingTypes != 0;
+ mWmService.scheduleAnimationLocked();
+
+ mAnimatingTypes = animatingTypes;
+ }
+ }
+
/**
* Set a freeze state for the window to ignore dispatching its insets state to the client.
*
@@ -2435,7 +2458,6 @@
mAnimatingExit = true;
mRemoveOnExit = true;
mToken.setVisibleRequested(false);
- mWmService.mPresentationController.onPresentationRemoved(this);
// A presentation hides all activities behind on the same display.
mDisplayContent.ensureActivitiesVisible(/*starting=*/ null,
/*notifyClients=*/ true);
@@ -2656,7 +2678,7 @@
// The client gave us a touchable region and so first
// we calculate the untouchable region, then punch that out of our
// expanded modal region.
- mTmpRegion.set(0, 0, frame.right, frame.bottom);
+ mTmpRegion.set(0, 0, frame.width(), frame.height());
mTmpRegion.op(mGivenTouchableRegion, Region.Op.DIFFERENCE);
region.op(mTmpRegion, Region.Op.DIFFERENCE);
}
@@ -6079,17 +6101,6 @@
mWmService.scheduleAnimationLocked();
}
- void notifyInsetsAnimationRunningStateChanged(boolean running) {
- if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
- Trace.instant(TRACE_TAG_WINDOW_MANAGER,
- TextUtils.formatSimple("%s: notifyInsetsAnimationRunningStateChanged(%s)",
- getName(),
- Boolean.toString(running)));
- }
- mInsetsAnimationRunning = running;
- mWmService.scheduleAnimationLocked();
- }
-
boolean isInsetsAnimationRunning() {
return mInsetsAnimationRunning;
}
diff --git a/services/core/jni/stats/OWNERS b/services/core/jni/stats/OWNERS
index 2611e5b..8d87925 100644
--- a/services/core/jni/stats/OWNERS
+++ b/services/core/jni/stats/OWNERS
@@ -1,8 +1,6 @@
jeffreyhuang@google.com
-jtnguyen@google.com
muhammadq@google.com
sharaieko@google.com
singhtejinder@google.com
tsaichristine@google.com
yaochen@google.com
-yro@google.com
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index e158310..860b6fb 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -1814,7 +1814,7 @@
t.traceEnd();
}
- if (!isWatch && !isTv && !isAutomotive
+ if (!isWatch && !isTv && !isAutomotive && !isDesktop
&& android.security.Flags.aapmApi()) {
t.traceBegin("StartAdvancedProtectionService");
mSystemServiceManager.startService(AdvancedProtectionService.Lifecycle.class);
diff --git a/services/musicrecognition/OWNERS b/services/musicrecognition/OWNERS
index 037b048..820be00 100644
--- a/services/musicrecognition/OWNERS
+++ b/services/musicrecognition/OWNERS
@@ -1,5 +1,4 @@
# Bug component: 830636
oni@google.com
-volnov@google.com
diff --git a/services/serial/OWNERS b/services/serial/OWNERS
new file mode 100644
index 0000000..89ce78e
--- /dev/null
+++ b/services/serial/OWNERS
@@ -0,0 +1 @@
+include /core/java/android/hardware/serial/OWNERS
\ No newline at end of file
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
index 5fe5b23..d6a6853 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
@@ -18,6 +18,9 @@
<option name="test-suite-tag" value="apct" />
<option name="test-suite-tag" value="apct-instrumentation" />
+ <!-- Needed for reading the app files for the test artifacts -->
+ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
+
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="install-arg" value="-t" />
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BaseBroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BaseBroadcastQueueTest.java
index 5eb23a2..1286648 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BaseBroadcastQueueTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BaseBroadcastQueueTest.java
@@ -16,29 +16,43 @@
package com.android.server.am;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import android.annotation.NonNull;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.app.BackgroundStartPrivileges;
+import android.app.BroadcastOptions;
+import android.app.SystemServiceRegistry;
import android.app.usage.UsageStatsManagerInternal;
import android.content.ComponentName;
import android.content.Context;
+import android.content.IIntentReceiver;
+import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
+import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.TestLooperManager;
import android.os.UserHandle;
+import android.permission.IPermissionManager;
+import android.permission.PermissionManager;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -47,7 +61,6 @@
import androidx.test.platform.app.InstrumentationRegistry;
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.internal.util.FrameworkStatsLog;
import com.android.modules.utils.testing.ExtendedMockitoRule;
import com.android.server.AlarmManagerInternal;
@@ -55,6 +68,7 @@
import com.android.server.LocalServices;
import com.android.server.appop.AppOpsService;
import com.android.server.compat.PlatformCompat;
+import com.android.server.firewall.IntentFirewall;
import com.android.server.wm.ActivityTaskManagerService;
import org.junit.Rule;
@@ -63,8 +77,11 @@
import org.mockito.MockitoAnnotations;
import java.io.File;
+import java.util.Collections;
+import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiFunction;
public abstract class BaseBroadcastQueueTest {
@@ -97,6 +114,8 @@
public final ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule.Builder(this)
.spyStatic(FrameworkStatsLog.class)
.spyStatic(ProcessList.class)
+ .spyStatic(SystemServiceRegistry.class)
+ .mockStatic(AppGlobals.class)
.build();
@@ -119,6 +138,16 @@
ProcessList mProcessList;
@Mock
PlatformCompat mPlatformCompat;
+ @Mock
+ IntentFirewall mIntentFirewall;
+ @Mock
+ IPackageManager mIPackageManager;
+ @Mock
+ AppOpsManager mAppOpsManager;
+ @Mock
+ IPermissionManager mIPermissionManager;
+ @Mock
+ PermissionManager mPermissionManager;
@Mock
AppStartInfoTracker mAppStartInfoTracker;
@@ -167,22 +196,22 @@
return getUidForPackage(invocation.getArgument(0));
}).when(mPackageManagerInt).getPackageUid(any(), anyLong(), eq(UserHandle.USER_SYSTEM));
+ final Context spyContext = spy(mContext);
+ doReturn(mPermissionManager).when(spyContext).getSystemService(PermissionManager.class);
final ActivityManagerService realAms = new ActivityManagerService(
- new TestInjector(mContext), mServiceThreadRule.getThread());
+ new TestInjector(spyContext), mServiceThreadRule.getThread());
realAms.mActivityTaskManager = new ActivityTaskManagerService(mContext);
realAms.mActivityTaskManager.initialize(null, null, mContext.getMainLooper());
realAms.mAtmInternal = spy(realAms.mActivityTaskManager.getAtmInternal());
realAms.mOomAdjuster.mCachedAppOptimizer = mock(CachedAppOptimizer.class);
realAms.mOomAdjuster = spy(realAms.mOomAdjuster);
- ExtendedMockito.doNothing().when(() -> ProcessList.setOomAdj(anyInt(), anyInt(), anyInt()));
+ doNothing().when(() -> ProcessList.setOomAdj(anyInt(), anyInt(), anyInt()));
realAms.mPackageManagerInt = mPackageManagerInt;
realAms.mUsageStatsService = mUsageStatsManagerInt;
realAms.mProcessesReady = true;
mAms = spy(realAms);
- mSkipPolicy = spy(new BroadcastSkipPolicy(mAms));
- doReturn(null).when(mSkipPolicy).shouldSkipMessage(any(), any());
- doReturn(false).when(mSkipPolicy).disallowBackgroundStart(any());
+ mSkipPolicy = createBroadcastSkipPolicy();
doReturn(mAppStartInfoTracker).when(mProcessList).getAppStartInfoTracker();
@@ -198,6 +227,14 @@
}
}
+ public BroadcastSkipPolicy createBroadcastSkipPolicy() {
+ final BroadcastSkipPolicy skipPolicy = spy(new BroadcastSkipPolicy(mAms));
+ doReturn(null).when(skipPolicy).shouldSkipAtEnqueueMessage(any(), any());
+ doReturn(null).when(skipPolicy).shouldSkipMessage(any(), any());
+ doReturn(false).when(skipPolicy).disallowBackgroundStart(any());
+ return skipPolicy;
+ }
+
static int getUidForPackage(@NonNull String packageName) {
switch (packageName) {
case PACKAGE_ANDROID: return android.os.Process.SYSTEM_UID;
@@ -240,6 +277,11 @@
public BroadcastQueue getBroadcastQueue(ActivityManagerService service) {
return null;
}
+
+ @Override
+ public IntentFirewall getIntentFirewall() {
+ return mIntentFirewall;
+ }
}
abstract String getTag();
@@ -281,24 +323,35 @@
ri.activityInfo.packageName = packageName;
ri.activityInfo.processName = processName;
ri.activityInfo.name = name;
+ ri.activityInfo.exported = true;
ri.activityInfo.applicationInfo = makeApplicationInfo(packageName, processName, userId);
return ri;
}
+ // TODO: Reuse BroadcastQueueTest.makeActiveProcessRecord()
+ @SuppressWarnings("GuardedBy")
+ ProcessRecord makeProcessRecord(ApplicationInfo info) {
+ final ProcessRecord r = spy(new ProcessRecord(mAms, info, info.processName, info.uid));
+ r.setPid(mNextPid.incrementAndGet());
+ ProcessRecord.updateProcessRecordNodes(r);
+ return r;
+ }
+
BroadcastFilter makeRegisteredReceiver(ProcessRecord app) {
return makeRegisteredReceiver(app, 0);
}
BroadcastFilter makeRegisteredReceiver(ProcessRecord app, int priority) {
final ReceiverList receiverList = mRegisteredReceivers.get(app.getPid());
- return makeRegisteredReceiver(receiverList, priority);
+ return makeRegisteredReceiver(receiverList, priority, null);
}
- static BroadcastFilter makeRegisteredReceiver(ReceiverList receiverList, int priority) {
+ static BroadcastFilter makeRegisteredReceiver(ReceiverList receiverList, int priority,
+ String requiredPermission) {
final IntentFilter filter = new IntentFilter();
filter.setPriority(priority);
final BroadcastFilter res = new BroadcastFilter(filter, receiverList,
- receiverList.app.info.packageName, null, null, null, receiverList.uid,
+ receiverList.app.info.packageName, null, null, requiredPermission, receiverList.uid,
receiverList.userId, false, false, true, receiverList.app.info,
mock(PlatformCompat.class));
receiverList.add(res);
@@ -313,4 +366,62 @@
ArgumentMatcher<ApplicationInfo> appInfoEquals(int uid) {
return test -> (test.uid == uid);
}
+
+ static final class BroadcastRecordBuilder {
+ private BroadcastQueue mQueue = mock(BroadcastQueue.class);
+ private Intent mIntent = mock(Intent.class);
+ private ProcessRecord mProcessRecord = mock(ProcessRecord.class);
+ private String mCallerPackage;
+ private String mCallerFeatureId;
+ private int mCallingPid;
+ private int mCallingUid;
+ private boolean mCallerInstantApp;
+ private String mResolvedType;
+ private String[] mRequiredPermissions;
+ private String[] mExcludedPermissions;
+ private String[] mExcludedPackages;
+ private int mAppOp;
+ private BroadcastOptions mOptions = BroadcastOptions.makeBasic();
+ private List mReceivers = Collections.emptyList();
+ private ProcessRecord mResultToApp;
+ private IIntentReceiver mResultTo;
+ private int mResultCode = Activity.RESULT_OK;
+ private String mResultData;
+ private Bundle mResultExtras;
+ private boolean mSerialized;
+ private boolean mSticky;
+ private boolean mInitialSticky;
+ private int mUserId = UserHandle.USER_SYSTEM;
+ private BackgroundStartPrivileges mBackgroundStartPrivileges =
+ BackgroundStartPrivileges.NONE;
+ private boolean mTimeoutExempt;
+ private BiFunction<Integer, Bundle, Bundle> mFilterExtrasForReceiver;
+ private int mCallerAppProcState = ActivityManager.PROCESS_STATE_UNKNOWN;
+ private PlatformCompat mPlatformCompat = mock(PlatformCompat.class);
+
+ public BroadcastRecordBuilder setIntent(Intent intent) {
+ mIntent = intent;
+ return this;
+ }
+
+ public BroadcastRecordBuilder setRequiredPermissions(String[] requiredPermissions) {
+ mRequiredPermissions = requiredPermissions;
+ return this;
+ }
+
+ public BroadcastRecordBuilder setAppOp(int appOp) {
+ mAppOp = appOp;
+ return this;
+ }
+
+ public BroadcastRecord build() {
+ return new BroadcastRecord(mQueue, mIntent, mProcessRecord, mCallerPackage,
+ mCallerFeatureId, mCallingPid, mCallingUid, mCallerInstantApp, mResolvedType,
+ mRequiredPermissions, mExcludedPermissions, mExcludedPackages, mAppOp,
+ mOptions, mReceivers, mResultToApp, mResultTo, mResultCode, mResultData,
+ mResultExtras, mSerialized, mSticky, mInitialSticky, mUserId,
+ mBackgroundStartPrivileges, mTimeoutExempt, mFilterExtrasForReceiver,
+ mCallerAppProcState, mPlatformCompat);
+ }
+ }
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueImplTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueImplTest.java
index 409706b..b32ce49 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueImplTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueImplTest.java
@@ -1803,6 +1803,46 @@
assertEquals(ProcessList.SCHED_GROUP_DEFAULT, queue.getPreferredSchedulingGroupLocked());
}
+ @SuppressWarnings("GuardedBy")
+ @DisableFlags(Flags.FLAG_AVOID_NOTE_OP_AT_ENQUEUE)
+ @Test
+ public void testSkipPolicy_atEnqueueTime_flagDisabled() throws Exception {
+ final Intent userPresent = new Intent(Intent.ACTION_USER_PRESENT);
+ final Object greenReceiver = makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN);
+ final Object redReceiver = makeManifestReceiver(PACKAGE_RED, CLASS_RED);
+
+ final BroadcastRecord userPresentRecord = makeBroadcastRecord(userPresent,
+ List.of(greenReceiver, redReceiver));
+
+ final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
+ final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick,
+ List.of(greenReceiver, redReceiver));
+
+ doAnswer(invocation -> {
+ final BroadcastRecord r = invocation.getArgument(0);
+ final Object o = invocation.getArgument(1);
+ if (userPresent.getAction().equals(r.intent.getAction())
+ && isReceiverEquals(o, greenReceiver)) {
+ return "receiver skipped by test";
+ }
+ return null;
+ }).when(mSkipPolicy).shouldSkipMessage(any(BroadcastRecord.class), any());
+
+ mImpl.enqueueBroadcastLocked(userPresentRecord);
+ mImpl.enqueueBroadcastLocked(timeTickRecord);
+
+ final BroadcastProcessQueue greenQueue = mImpl.getProcessQueue(PACKAGE_GREEN,
+ getUidForPackage(PACKAGE_GREEN));
+ // There should be only one broadcast for green process as the other would have
+ // been skipped.
+ verifyPendingRecords(greenQueue, List.of(timeTick));
+ final BroadcastProcessQueue redQueue = mImpl.getProcessQueue(PACKAGE_RED,
+ getUidForPackage(PACKAGE_RED));
+ verifyPendingRecords(redQueue, List.of(userPresent, timeTick));
+ }
+
+ @SuppressWarnings("GuardedBy")
+ @EnableFlags(Flags.FLAG_AVOID_NOTE_OP_AT_ENQUEUE)
@Test
public void testSkipPolicy_atEnqueueTime() throws Exception {
final Intent userPresent = new Intent(Intent.ACTION_USER_PRESENT);
@@ -1824,7 +1864,7 @@
return "receiver skipped by test";
}
return null;
- }).when(mSkipPolicy).shouldSkipMessage(any(BroadcastRecord.class), any());
+ }).when(mSkipPolicy).shouldSkipAtEnqueueMessage(any(BroadcastRecord.class), any());
mImpl.enqueueBroadcastLocked(userPresentRecord);
mImpl.enqueueBroadcastLocked(timeTickRecord);
@@ -2270,19 +2310,11 @@
assertFalse(mImpl.isProcessFreezable(greenProcess));
}
- // TODO: Reuse BroadcastQueueTest.makeActiveProcessRecord()
- private ProcessRecord makeProcessRecord(ApplicationInfo info) {
- final ProcessRecord r = spy(new ProcessRecord(mAms, info, info.processName, info.uid));
- r.setPid(mNextPid.incrementAndGet());
- ProcessRecord.updateProcessRecordNodes(r);
- return r;
- }
-
BroadcastFilter makeRegisteredReceiver(ProcessRecord app, int priority) {
final IIntentReceiver receiver = mock(IIntentReceiver.class);
final ReceiverList receiverList = new ReceiverList(mAms, app, app.getPid(), app.info.uid,
UserHandle.getUserId(app.info.uid), receiver);
- return makeRegisteredReceiver(receiverList, priority);
+ return makeRegisteredReceiver(receiverList, priority, null /* requiredPermission */);
}
private Intent createPackageChangedIntent(int uid, List<String> componentNameList) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
index ad35b25..3a9c99d 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
@@ -2301,6 +2301,52 @@
}
/**
+ * Verify that we skip broadcasts at enqueue if {@link BroadcastSkipPolicy} decides it
+ * should be skipped.
+ */
+ @EnableFlags(Flags.FLAG_AVOID_NOTE_OP_AT_ENQUEUE)
+ @Test
+ public void testSkipPolicy_atEnqueueTime() throws Exception {
+ final ProcessRecord callerApp = makeActiveProcessRecord(PACKAGE_RED);
+ final ProcessRecord receiverGreenApp = makeActiveProcessRecord(PACKAGE_GREEN);
+ final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
+
+ final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+ final Object greenReceiver = makeRegisteredReceiver(receiverGreenApp);
+ final Object blueReceiver = makeRegisteredReceiver(receiverBlueApp);
+ final Object yellowReceiver = makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW);
+ final Object orangeReceiver = makeManifestReceiver(PACKAGE_ORANGE, CLASS_ORANGE);
+
+ doAnswer(invocation -> {
+ final BroadcastRecord r = invocation.getArgument(0);
+ final Object o = invocation.getArgument(1);
+ if (airplane.getAction().equals(r.intent.getAction())
+ && (isReceiverEquals(o, greenReceiver)
+ || isReceiverEquals(o, orangeReceiver))) {
+ return "test skipped receiver";
+ }
+ return null;
+ }).when(mSkipPolicy).shouldSkipAtEnqueueMessage(any(BroadcastRecord.class), any());
+ enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
+ List.of(greenReceiver, blueReceiver, yellowReceiver, orangeReceiver)));
+
+ waitForIdle();
+ // Verify that only blue and yellow receiver apps received the broadcast.
+ verifyScheduleRegisteredReceiver(never(), receiverGreenApp, USER_SYSTEM);
+ verify(mSkipPolicy, never()).shouldSkipMessage(any(BroadcastRecord.class),
+ eq(greenReceiver));
+ verifyScheduleRegisteredReceiver(receiverBlueApp, airplane);
+ final ProcessRecord receiverYellowApp = mAms.getProcessRecordLocked(PACKAGE_YELLOW,
+ getUidForPackage(PACKAGE_YELLOW));
+ verifyScheduleReceiver(receiverYellowApp, airplane);
+ final ProcessRecord receiverOrangeApp = mAms.getProcessRecordLocked(PACKAGE_ORANGE,
+ getUidForPackage(PACKAGE_ORANGE));
+ assertNull(receiverOrangeApp);
+ verify(mSkipPolicy, never()).shouldSkipMessage(any(BroadcastRecord.class),
+ eq(orangeReceiver));
+ }
+
+ /**
* Verify broadcasts to runtime receivers in cached processes are deferred
* until that process leaves the cached state.
*/
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastSkipPolicyTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastSkipPolicyTest.java
new file mode 100644
index 0000000..c8aad79e
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastSkipPolicyTest.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2025 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.server.am;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.never;
+
+import android.Manifest;
+import android.app.ActivityManager;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.content.IIntentReceiver;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.UserHandle;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+@SmallTest
+public class BroadcastSkipPolicyTest extends BaseBroadcastQueueTest {
+ private static final String TAG = "BroadcastSkipPolicyTest";
+
+ BroadcastSkipPolicy mBroadcastSkipPolicy;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ mBroadcastSkipPolicy = new BroadcastSkipPolicy(mAms);
+
+ doReturn(true).when(mIntentFirewall).checkBroadcast(any(Intent.class),
+ anyInt(), anyInt(), nullable(String.class), anyInt());
+
+ doReturn(mIPackageManager).when(AppGlobals::getPackageManager);
+ doReturn(true).when(mIPackageManager).isPackageAvailable(anyString(), anyInt());
+
+ doReturn(ActivityManager.APP_START_MODE_NORMAL).when(mAms).getAppStartModeLOSP(anyInt(),
+ anyString(), anyInt(), anyInt(), eq(true), eq(false), eq(false));
+
+ doReturn(mAppOpsManager).when(mAms).getAppOpsManager();
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).checkOpNoThrow(anyString(),
+ anyInt(), anyString(), nullable(String.class));
+ doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).noteOpNoThrow(anyString(),
+ anyInt(), anyString(), nullable(String.class), anyString());
+
+ doReturn(mIPermissionManager).when(AppGlobals::getPermissionManager);
+ doReturn(PackageManager.PERMISSION_GRANTED).when(mIPermissionManager).checkUidPermission(
+ anyInt(), anyString(), anyInt());
+ }
+
+ @Override
+ public String getTag() {
+ return TAG;
+ }
+
+ @Override
+ public BroadcastSkipPolicy createBroadcastSkipPolicy() {
+ return new BroadcastSkipPolicy(mAms);
+ }
+
+ @Test
+ public void testShouldSkipMessage_withManifestRcvr_withCompPerm_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .build();
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record,
+ makeManifestReceiverWithPermission(PACKAGE_GREEN, CLASS_GREEN,
+ Manifest.permission.PACKAGE_USAGE_STATS));
+ assertNull(msg);
+ verify(mAppOpsManager).noteOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(record.callingUid), eq(record.callerPackage), eq(record.callerFeatureId),
+ anyString());
+ verify(mAppOpsManager, never()).checkOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class));
+ }
+
+ @Test
+ public void testShouldSkipMessage_withRegRcvr_withCompPerm_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record,
+ makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ Manifest.permission.PACKAGE_USAGE_STATS));
+ assertNull(msg);
+ verify(mAppOpsManager).noteOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(record.callingUid), eq(record.callerPackage), eq(record.callerFeatureId),
+ anyString());
+ verify(mAppOpsManager, never()).checkOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class));
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withManifestRcvr_withCompPerm_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .build();
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record,
+ makeManifestReceiverWithPermission(PACKAGE_GREEN, CLASS_GREEN,
+ Manifest.permission.PACKAGE_USAGE_STATS));
+ assertNull(msg);
+ verify(mAppOpsManager).checkOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(record.callingUid), eq(record.callerPackage), eq(record.callerFeatureId));
+ verify(mAppOpsManager, never()).noteOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class), anyString());
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withRegRcvr_withCompPerm_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record,
+ makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ Manifest.permission.PACKAGE_USAGE_STATS));
+ assertNull(msg);
+ verify(mAppOpsManager).checkOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(record.callingUid), eq(record.callerPackage), eq(record.callerFeatureId));
+ verify(mAppOpsManager, never()).noteOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class), anyString());
+ }
+
+ @Test
+ public void testShouldSkipMessage_withManifestRcvr_withAppOp_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setAppOp(AppOpsManager.permissionToOpCode(Manifest.permission.PACKAGE_USAGE_STATS))
+ .build();
+ final ResolveInfo receiver = makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN);
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record, receiver);
+ assertNull(msg);
+ verify(mAppOpsManager).noteOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(receiver.activityInfo.applicationInfo.uid),
+ eq(receiver.activityInfo.packageName), nullable(String.class), anyString());
+ verify(mAppOpsManager, never()).checkOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class));
+ }
+
+ @Test
+ public void testShouldSkipMessage_withRegRcvr_withAppOp_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setAppOp(AppOpsManager.permissionToOpCode(Manifest.permission.PACKAGE_USAGE_STATS))
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final BroadcastFilter filter = makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ null /* requiredPermission */);
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record, filter);
+ assertNull(msg);
+ verify(mAppOpsManager).noteOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(filter.receiverList.uid),
+ eq(filter.packageName), nullable(String.class), anyString());
+ verify(mAppOpsManager, never()).checkOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class));
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withManifestRcvr_withAppOp_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setAppOp(AppOpsManager.permissionToOpCode(Manifest.permission.PACKAGE_USAGE_STATS))
+ .build();
+ final ResolveInfo receiver = makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN);
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record, receiver);
+ assertNull(msg);
+ verify(mAppOpsManager).checkOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(receiver.activityInfo.applicationInfo.uid),
+ eq(receiver.activityInfo.applicationInfo.packageName), nullable(String.class));
+ verify(mAppOpsManager, never()).noteOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class), anyString());
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withRegRcvr_withAppOp_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setAppOp(AppOpsManager.permissionToOpCode(Manifest.permission.PACKAGE_USAGE_STATS))
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final BroadcastFilter filter = makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ null /* requiredPermission */);
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record, filter);
+ assertNull(msg);
+ verify(mAppOpsManager).checkOpNoThrow(
+ eq(AppOpsManager.permissionToOp(Manifest.permission.PACKAGE_USAGE_STATS)),
+ eq(filter.receiverList.uid),
+ eq(filter.packageName), nullable(String.class));
+ verify(mAppOpsManager, never()).noteOpNoThrow(
+ anyString(), anyInt(), anyString(), nullable(String.class), anyString());
+ }
+
+ @Test
+ public void testShouldSkipMessage_withManifestRcvr_withRequiredPerms_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setRequiredPermissions(new String[] {Manifest.permission.PACKAGE_USAGE_STATS})
+ .build();
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record,
+ makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN));
+ assertNull(msg);
+ verify(mPermissionManager).checkPermissionForDataDelivery(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any(), anyString());
+ verify(mPermissionManager, never()).checkPermissionForPreflight(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any());
+ }
+
+ @Test
+ public void testShouldSkipMessage_withRegRcvr_withRequiredPerms_invokesNoteOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setRequiredPermissions(new String[] {Manifest.permission.PACKAGE_USAGE_STATS})
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final String msg = mBroadcastSkipPolicy.shouldSkipMessage(record,
+ makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ null /* requiredPermission */));
+ assertNull(msg);
+ verify(mPermissionManager).checkPermissionForDataDelivery(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any(), anyString());
+ verify(mPermissionManager, never()).checkPermissionForPreflight(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any());
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withManifestRcvr_withRequiredPerms_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setRequiredPermissions(new String[] {Manifest.permission.PACKAGE_USAGE_STATS})
+ .build();
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record,
+ makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN));
+ assertNull(msg);
+ verify(mPermissionManager, never()).checkPermissionForDataDelivery(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any(), anyString());
+ verify(mPermissionManager).checkPermissionForPreflight(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any());
+ }
+
+ @Test
+ public void testShouldSkipAtEnqueueMessage_withRegRcvr_withRequiredPerms_invokesCheckOp() {
+ final BroadcastRecord record = new BroadcastRecordBuilder()
+ .setIntent(new Intent(Intent.ACTION_TIME_TICK))
+ .setRequiredPermissions(new String[] {Manifest.permission.PACKAGE_USAGE_STATS})
+ .build();
+ final ProcessRecord receiverApp = makeProcessRecord(makeApplicationInfo(PACKAGE_GREEN));
+ final String msg = mBroadcastSkipPolicy.shouldSkipAtEnqueueMessage(record,
+ makeRegisteredReceiver(receiverApp, 0 /* priority */,
+ null /* requiredPermission */));
+ assertNull(msg);
+ verify(mPermissionManager, never()).checkPermissionForDataDelivery(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any(), anyString());
+ verify(mPermissionManager).checkPermissionForPreflight(
+ eq(Manifest.permission.PACKAGE_USAGE_STATS), any());
+ }
+
+ private ResolveInfo makeManifestReceiverWithPermission(String packageName, String name,
+ String permission) {
+ final ResolveInfo resolveInfo = makeManifestReceiver(packageName, name);
+ resolveInfo.activityInfo.permission = permission;
+ return resolveInfo;
+ }
+
+ private BroadcastFilter makeRegisteredReceiver(ProcessRecord app, int priority,
+ String requiredPermission) {
+ final IIntentReceiver receiver = mock(IIntentReceiver.class);
+ final ReceiverList receiverList = new ReceiverList(mAms, app, app.getPid(), app.info.uid,
+ UserHandle.getUserId(app.info.uid), receiver);
+ return makeRegisteredReceiver(receiverList, priority, requiredPermission);
+ }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
index bada337..6b8ef88 100644
--- a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
@@ -64,7 +64,6 @@
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.pm.ServiceInfo;
-import android.content.res.Resources;
import android.graphics.Color;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
@@ -95,6 +94,7 @@
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
import com.android.server.LocalServices;
+import com.android.server.wm.DesktopModeHelper;
import com.android.server.wm.WindowManagerInternal;
import org.hamcrest.CoreMatchers;
@@ -155,8 +155,6 @@
private IPackageManager mIpm = AppGlobals.getPackageManager();
- private Resources mResources = sContext.getResources();
-
@Mock
private DisplayManager mDisplayManager;
@@ -178,6 +176,7 @@
.spyStatic(WallpaperUtils.class)
.spyStatic(LocalServices.class)
.spyStatic(WallpaperManager.class)
+ .spyStatic(DesktopModeHelper.class)
.startMocking();
sWindowManagerInternal = mock(WindowManagerInternal.class);
@@ -246,6 +245,8 @@
int userId = (invocation.getArgument(0));
return getWallpaperTestDir(userId);
}).when(() -> WallpaperUtils.getWallpaperDir(anyInt()));
+ ExtendedMockito.doAnswer(invocation -> true).when(
+ () -> DesktopModeHelper.isDeviceEligibleForDesktopMode(any()));
sContext.addMockSystemService(DisplayManager.class, mDisplayManager);
@@ -257,10 +258,6 @@
doReturn(displays).when(mDisplayManager).getDisplays();
spyOn(mIpm);
- spyOn(mResources);
- doReturn(true).when(mResources).getBoolean(eq(R.bool.config_isDesktopModeSupported));
- doReturn(true).when(mResources).getBoolean(
- eq(R.bool.config_canInternalDisplayHostDesktops));
mService = new TestWallpaperManagerService(sContext);
spyOn(mService);
mService.systemReady();
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
index 8fad931..5165e34 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
@@ -456,6 +456,8 @@
}
private void fillActiveFile(BatteryStatsHistory history) {
+ awaitCompletion(); // Wait for BatteryHistoryDirectory.trim if necessary.
+
// Create roughly 1K of history
int initialSize = history.getHistoryUsedSize();
while (history.getHistoryUsedSize() < initialSize + 1000) {
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
index fcde405..c84cc00 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
@@ -60,6 +60,7 @@
private TestLooper mTestLooper = new TestLooper();
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
private int mPhysicalAddress;
+ private boolean mIsPowerStandby;
@Before
public void setUp() throws Exception {
@@ -68,12 +69,13 @@
.hasSystemFeature(FEATURE_HDMI_CEC));
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ mIsPowerStandby = false;
FakeAudioFramework audioFramework = new FakeAudioFramework();
mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(),
audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
- return false;
+ return mIsPowerStandby;
}
@Override
@@ -151,4 +153,41 @@
assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress);
assertThat(playbackDevice.isActiveSource()).isTrue();
}
+
+ @Test
+ public void onActiveSourceLost_removePendingActiveSourceAction() {
+ HdmiCecLocalDevicePlayback playbackDevice = new HdmiCecLocalDevicePlayback(
+ mHdmiControlService);
+ playbackDevice.init();
+ mLocalDevices.add(playbackDevice);
+ mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
+ mIsPowerStandby = true;
+ mTestLooper.dispatchAll();
+
+ mNativeWrapper.clearResultMessages();
+ mTestLooper.dispatchAll();
+
+ int otherPlaybackLogicalAddress = playbackDevice.getDeviceInfo().getLogicalAddress()
+ == Constants.ADDR_PLAYBACK_2
+ ? Constants.ADDR_PLAYBACK_1 : Constants.ADDR_PLAYBACK_2;
+ HdmiCecMessage activeSourceFromOtherDevice =
+ HdmiCecMessageBuilder.buildActiveSource(
+ otherPlaybackLogicalAddress, 0x2200);
+ HdmiCecMessage activeSourceFromDevice =
+ HdmiCecMessageBuilder.buildActiveSource(
+ playbackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+
+ HdmiCecFeatureAction action = new com.android.server.hdmi.ActiveSourceAction(
+ playbackDevice, ADDR_TV);
+ playbackDevice.addAndStartAction(action);
+ mTestLooper.dispatchAll();
+
+ assertThat(playbackDevice.getActions(ActiveSourceAction.class)).hasSize(1);
+ playbackDevice.handleActiveSource(activeSourceFromOtherDevice);
+ mTestLooper.dispatchAll();
+
+ // Action is removed
+ assertThat(playbackDevice.getActions(ActiveSourceAction.class)).hasSize(0);
+ assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSourceFromDevice);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java b/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java
index a4e77c0..1de864c 100644
--- a/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java
+++ b/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubEndpointTest.java
@@ -17,9 +17,9 @@
package com.android.server.location.contexthub;
import static com.google.common.truth.Truth.assertThat;
-
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -33,15 +33,21 @@
import android.hardware.contexthub.IContextHubEndpoint;
import android.hardware.contexthub.IContextHubEndpointCallback;
import android.hardware.contexthub.IEndpointCommunication;
+import android.hardware.contexthub.Message;
import android.hardware.contexthub.MessageDeliveryStatus;
import android.hardware.contexthub.Reason;
+import android.hardware.location.IContextHubTransactionCallback;
+import android.hardware.location.NanoAppState;
import android.os.Binder;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
-
+import android.util.Log;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
+import java.util.Collections;
+import java.util.List;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -51,11 +57,11 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
-import java.util.Collections;
-
@RunWith(AndroidJUnit4.class)
@Presubmit
public class ContextHubEndpointTest {
+ private static final String TAG = "ContextHubEndpointTest";
+
private static final int SESSION_ID_RANGE = ContextHubEndpointManager.SERVICE_SESSION_RANGE;
private static final int MIN_SESSION_ID = 0;
private static final int MAX_SESSION_ID = MIN_SESSION_ID + SESSION_ID_RANGE - 1;
@@ -206,6 +212,68 @@
assertThat(mEndpointManager.getNumAvailableSessions()).isEqualTo(SESSION_ID_RANGE);
}
+ @Test
+ public void testMessageTransaction() throws RemoteException {
+ IContextHubEndpoint endpoint = registerExampleEndpoint();
+ testMessageTransactionInternal(endpoint, /* deliverMessageStatus= */ true);
+
+ unregisterExampleEndpoint(endpoint);
+ }
+
+ @Test
+ public void testMessageTransactionCleanupOnUnregistration() throws RemoteException {
+ IContextHubEndpoint endpoint = registerExampleEndpoint();
+ testMessageTransactionInternal(endpoint, /* deliverMessageStatus= */ false);
+
+ unregisterExampleEndpoint(endpoint);
+ assertThat(mTransactionManager.numReliableMessageTransactionPending()).isEqualTo(0);
+ }
+
+ /** A helper method to create a session and validates reliable message sending. */
+ private void testMessageTransactionInternal(
+ IContextHubEndpoint endpoint, boolean deliverMessageStatus) throws RemoteException {
+ HubEndpointInfo targetInfo =
+ new HubEndpointInfo(
+ TARGET_ENDPOINT_NAME,
+ TARGET_ENDPOINT_ID,
+ ENDPOINT_PACKAGE_NAME,
+ Collections.emptyList());
+ int sessionId = endpoint.openSession(targetInfo, /* serviceDescriptor= */ null);
+ mEndpointManager.onEndpointSessionOpenComplete(sessionId);
+
+ final int messageType = 1234;
+ HubMessage message =
+ new HubMessage.Builder(messageType, new byte[] {1, 2, 3, 4, 5})
+ .setResponseRequired(true)
+ .build();
+ IContextHubTransactionCallback callback =
+ new IContextHubTransactionCallback.Stub() {
+ @Override
+ public void onQueryResponse(int result, List<NanoAppState> nanoappList) {
+ Log.i(TAG, "Received onQueryResponse callback, result=" + result);
+ }
+
+ @Override
+ public void onTransactionComplete(int result) {
+ Log.i(TAG, "Received onTransactionComplete callback, result=" + result);
+ }
+ };
+ endpoint.sendMessage(sessionId, message, callback);
+ ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
+ verify(mMockEndpointCommunications, timeout(1000))
+ .sendMessageToEndpoint(eq(sessionId), messageCaptor.capture());
+ Message halMessage = messageCaptor.getValue();
+ assertThat(halMessage.type).isEqualTo(message.getMessageType());
+ assertThat(halMessage.content).isEqualTo(message.getMessageBody());
+ assertThat(mTransactionManager.numReliableMessageTransactionPending()).isEqualTo(1);
+
+ if (deliverMessageStatus) {
+ mEndpointManager.onMessageDeliveryStatusReceived(
+ sessionId, halMessage.sequenceNumber, ErrorCode.OK);
+ assertThat(mTransactionManager.numReliableMessageTransactionPending()).isEqualTo(0);
+ }
+ }
+
private IContextHubEndpoint registerExampleEndpoint() throws RemoteException {
HubEndpointInfo info =
new HubEndpointInfo(
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index d6de314..bbc2cb2 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -196,7 +196,7 @@
/**
* Test for the restoration from saved file.
*/
- public void testInitializeFromSavedFile() {
+ public void disabled_testInitializeFromSavedFile() {
mInjectedCurrentTimeMillis = START_TIME + 4 * INTERVAL + 50;
assertResetTimes(START_TIME + 4 * INTERVAL, START_TIME + 5 * INTERVAL);
@@ -220,7 +220,7 @@
// TODO Add various broken cases.
}
- public void testLoadConfig() {
+ public void disabled_testLoadConfig() {
mService.updateConfigurationLocked(
ConfigConstants.KEY_RESET_INTERVAL_SEC + "=123,"
+ ConfigConstants.KEY_MAX_SHORTCUTS + "=4,"
@@ -270,13 +270,13 @@
assertEquals(MAX_UPDATES_PER_INTERVAL, mManager.getRemainingCallCount());
}
- public void testGetIconMaxDimensions() {
+ public void disabled_testGetIconMaxDimensions() {
assertEquals(MAX_ICON_DIMENSION, mManager.getIconMaxWidth());
assertEquals(MAX_ICON_DIMENSION, mManager.getIconMaxHeight());
}
/** Test for {@link android.content.pm.ShortcutManager#getRateLimitResetTime()} */
- public void testGetRateLimitResetTime() {
+ public void disabled_testGetRateLimitResetTime() {
assertEquals(START_TIME + INTERVAL, mManager.getRateLimitResetTime());
mInjectedCurrentTimeMillis = START_TIME + 4 * INTERVAL + 50;
@@ -354,7 +354,7 @@
});
}
- public void testAddDynamicShortcuts() {
+ public void disabled_testAddDynamicShortcuts() {
setCaller(CALLING_PACKAGE_1, USER_10);
final ShortcutInfo si1 = makeShortcut("shortcut1");
@@ -752,7 +752,7 @@
});
}
- public void testDeleteDynamicShortcuts() {
+ public void disabled_testDeleteDynamicShortcuts() {
final ShortcutInfo si1 = makeShortcut("shortcut1");
final ShortcutInfo si2 = makeShortcut("shortcut2");
final ShortcutInfo si3 = makeShortcut("shortcut3");
@@ -822,7 +822,7 @@
assertEquals(1, mManager.getRemainingCallCount());
}
- public void testIcons() throws IOException {
+ public void disabled_testIcons() throws IOException {
final Icon res32x32 = Icon.createWithResource(getTestContext(), R.drawable.black_32x32);
final Icon res64x64 = Icon.createWithResource(getTestContext(), R.drawable.black_64x64);
final Icon res512x512 = Icon.createWithResource(getTestContext(), R.drawable.black_512x512);
@@ -1228,7 +1228,7 @@
return out.getFile();
}
- public void testOpenIconFileForWrite() throws IOException {
+ public void disabled_testOpenIconFileForWrite() throws IOException {
mInjectedCurrentTimeMillis = 1000;
final File p10_1_1 = openIconFileForWriteAndGetPath(10, CALLING_PACKAGE_1);
@@ -1618,7 +1618,7 @@
assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED), "s1", "s2");
}
- public void testCachedShortcuts() {
+ public void disabled_testCachedShortcuts() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(makeShortcut("s1"),
makeLongLivedShortcut("s2"), makeLongLivedShortcut("s3"),
@@ -1999,7 +1999,7 @@
"s1", "s3");
}
- public void testGetShortcuts_shortcutKinds() throws Exception {
+ public void disabled_testGetShortcuts_shortcutKinds() throws Exception {
// Create 3 manifest and 3 dynamic shortcuts
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
@@ -2110,7 +2110,7 @@
});
}
- public void testGetShortcuts_resolveStrings() throws Exception {
+ public void disabled_testGetShortcuts_resolveStrings() throws Exception {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
ShortcutInfo si = new ShortcutInfo.Builder(mClientContext)
.setId("id")
@@ -2833,7 +2833,7 @@
});
}
- public void testPinShortcutAndGetPinnedShortcuts_assistant() {
+ public void disabled_testPinShortcutAndGetPinnedShortcuts_assistant() {
// Create some shortcuts.
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(
@@ -3613,7 +3613,7 @@
// TODO Check extra, etc
}
- public void testLauncherCallback() throws Throwable {
+ public void disabled_testLauncherCallback() throws Throwable {
// Disable throttling for this test.
mService.updateConfigurationLocked(
ConfigConstants.KEY_MAX_UPDATES_PER_INTERVAL + "=99999999,"
@@ -3779,7 +3779,7 @@
.isEmpty();
}
- public void testLauncherCallback_crossProfile() throws Throwable {
+ public void disabled_testLauncherCallback_crossProfile() throws Throwable {
prepareCrossProfileDataSet();
final Handler h = new Handler(Looper.getMainLooper());
@@ -4060,7 +4060,7 @@
// TODO Check all other fields
}
- public void testLoadCorruptedShortcuts() throws Exception {
+ public void disabled_testLoadCorruptedShortcuts() throws Exception {
initService();
addPackage("com.android.chrome", 0, 0);
@@ -4575,7 +4575,7 @@
});
}
- public void testHandleGonePackage_crossProfile() {
+ public void disabled_testHandleGonePackage_crossProfile() {
// Create some shortcuts.
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(
@@ -4910,7 +4910,7 @@
checkCanRestoreTo(DISABLED_REASON_BACKUP_NOT_SUPPORTED, spi3, true, 10, true, "sig1");
}
- public void testHandlePackageDelete() {
+ public void disabled_testHandlePackageDelete() {
checkHandlePackageDeleteInner((userId, packageName) -> {
uninstallPackage(userId, packageName);
mService.mPackageMonitor.onReceive(getTestContext(),
@@ -4918,7 +4918,7 @@
});
}
- public void testHandlePackageDisable() {
+ public void disabled_testHandlePackageDisable() {
checkHandlePackageDeleteInner((userId, packageName) -> {
disablePackage(userId, packageName);
mService.mPackageMonitor.onReceive(getTestContext(),
@@ -5050,7 +5050,7 @@
}
/** Almost ame as testHandlePackageDelete, except it doesn't uninstall packages. */
- public void testHandlePackageClearData() {
+ public void disabled_testHandlePackageClearData() {
final Icon bmp32x32 = Icon.createWithBitmap(BitmapFactory.decodeResource(
getTestContext().getResources(), R.drawable.black_32x32));
setCaller(CALLING_PACKAGE_1, USER_10);
@@ -5126,7 +5126,7 @@
assertTrue(bitmapDirectoryExists(CALLING_PACKAGE_3, USER_11));
}
- public void testHandlePackageClearData_manifestRepublished() {
+ public void disabled_testHandlePackageClearData_manifestRepublished() {
mRunningUsers.put(USER_11, true);
@@ -5168,7 +5168,7 @@
});
}
- public void testHandlePackageUpdate() throws Throwable {
+ public void disabled_testHandlePackageUpdate() throws Throwable {
// Set up shortcuts and launchers.
final Icon res32x32 = Icon.createWithResource(getTestContext(), R.drawable.black_32x32);
@@ -5342,7 +5342,7 @@
/**
* Test the case where an updated app has resource IDs changed.
*/
- public void testHandlePackageUpdate_resIdChanged() throws Exception {
+ public void disabled_testHandlePackageUpdate_resIdChanged() throws Exception {
final Icon icon1 = Icon.createWithResource(getTestContext(), /* res ID */ 1000);
final Icon icon2 = Icon.createWithResource(getTestContext(), /* res ID */ 1001);
@@ -5417,7 +5417,7 @@
});
}
- public void testHandlePackageUpdate_systemAppUpdate() {
+ public void disabled_testHandlePackageUpdate_systemAppUpdate() {
// Package1 is a system app. Package 2 is not a system app, so it's not scanned
// in this test at all.
@@ -5523,7 +5523,7 @@
mService.getUserShortcutsLocked(USER_10).getLastAppScanOsFingerprint());
}
- public void testHandlePackageChanged() {
+ public void disabled_testHandlePackageChanged() {
final ComponentName ACTIVITY1 = new ComponentName(CALLING_PACKAGE_1, "act1");
final ComponentName ACTIVITY2 = new ComponentName(CALLING_PACKAGE_1, "act2");
@@ -5653,7 +5653,7 @@
});
}
- public void testHandlePackageUpdate_activityNoLongerMain() throws Throwable {
+ public void disabled_testHandlePackageUpdate_activityNoLongerMain() throws Throwable {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(
makeShortcutWithActivity("s1a",
@@ -5739,7 +5739,7 @@
* - Unpinned dynamic shortcuts
* - Bitmaps
*/
- public void testBackupAndRestore() {
+ public void disabled_testBackupAndRestore() {
assertFileNotExists("user-0/shortcut_dump/restore-0-start.txt");
assertFileNotExists("user-0/shortcut_dump/restore-1-payload.xml");
@@ -5760,7 +5760,7 @@
checkBackupAndRestore_success(/*firstRestore=*/ true);
}
- public void testBackupAndRestore_backupRestoreTwice() {
+ public void disabled_testBackupAndRestore_backupRestoreTwice() {
prepareForBackupTest();
checkBackupAndRestore_success(/*firstRestore=*/ true);
@@ -5776,7 +5776,7 @@
checkBackupAndRestore_success(/*firstRestore=*/ false);
}
- public void testBackupAndRestore_restoreToNewVersion() {
+ public void disabled_testBackupAndRestore_restoreToNewVersion() {
prepareForBackupTest();
addPackage(CALLING_PACKAGE_1, CALLING_UID_1, 2);
@@ -5982,7 +5982,7 @@
});
}
- public void testBackupAndRestore_publisherWrongSignature() {
+ public void disabled_testBackupAndRestore_publisherWrongSignature() {
prepareForBackupTest();
addPackage(CALLING_PACKAGE_1, CALLING_UID_1, 10, "sigx"); // different signature
@@ -5990,7 +5990,7 @@
checkBackupAndRestore_publisherNotRestored(ShortcutInfo.DISABLED_REASON_SIGNATURE_MISMATCH);
}
- public void testBackupAndRestore_publisherNoLongerBackupTarget() {
+ public void disabled_testBackupAndRestore_publisherNoLongerBackupTarget() {
prepareForBackupTest();
updatePackageInfo(CALLING_PACKAGE_1,
@@ -6119,7 +6119,7 @@
});
}
- public void testBackupAndRestore_launcherLowerVersion() {
+ public void disabled_testBackupAndRestore_launcherLowerVersion() {
prepareForBackupTest();
addPackage(LAUNCHER_1, LAUNCHER_UID_1, 0); // Lower version
@@ -6128,7 +6128,7 @@
checkBackupAndRestore_success(/*firstRestore=*/ true);
}
- public void testBackupAndRestore_launcherWrongSignature() {
+ public void disabled_testBackupAndRestore_launcherWrongSignature() {
prepareForBackupTest();
addPackage(LAUNCHER_1, LAUNCHER_UID_1, 10, "sigx"); // different signature
@@ -6136,7 +6136,7 @@
checkBackupAndRestore_launcherNotRestored(true);
}
- public void testBackupAndRestore_launcherNoLongerBackupTarget() {
+ public void disabled_testBackupAndRestore_launcherNoLongerBackupTarget() {
prepareForBackupTest();
updatePackageInfo(LAUNCHER_1,
@@ -6241,7 +6241,7 @@
});
}
- public void testBackupAndRestore_launcherAndPackageNoLongerBackupTarget() {
+ public void disabled_testBackupAndRestore_launcherAndPackageNoLongerBackupTarget() {
prepareForBackupTest();
updatePackageInfo(CALLING_PACKAGE_1,
@@ -6339,7 +6339,7 @@
});
}
- public void testBackupAndRestore_disabled() {
+ public void disabled_testBackupAndRestore_disabled() {
prepareCrossProfileDataSet();
// Before doing backup & restore, disable s1.
@@ -6404,7 +6404,7 @@
}
- public void testBackupAndRestore_manifestRePublished() {
+ public void disabled_testBackupAndRestore_manifestRePublished() {
// Publish two manifest shortcuts.
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
@@ -6495,7 +6495,7 @@
* logcat.
* - if it has allowBackup=false, we don't touch any of the existing shortcuts.
*/
- public void testBackupAndRestore_appAlreadyInstalledWhenRestored() {
+ public void disabled_testBackupAndRestore_appAlreadyInstalledWhenRestored() {
// Pre-backup. Same as testBackupAndRestore_manifestRePublished().
// Publish two manifest shortcuts.
@@ -6620,7 +6620,7 @@
/**
* Test for restoring the pre-P backup format.
*/
- public void testBackupAndRestore_api27format() throws Exception {
+ public void disabled_testBackupAndRestore_api27format() throws Exception {
final byte[] payload = readTestAsset("shortcut/shortcut_api27_backup.xml").getBytes();
addPackage(CALLING_PACKAGE_1, CALLING_UID_1, 10, "22222");
@@ -6861,7 +6861,7 @@
.getPackageUserId());
}
- public void testOnApplicationActive_permission() {
+ public void disabled_testOnApplicationActive_permission() {
assertExpectException(SecurityException.class, "Missing permission", () ->
mManager.onApplicationActive(CALLING_PACKAGE_1, USER_10));
@@ -6870,7 +6870,7 @@
mManager.onApplicationActive(CALLING_PACKAGE_1, USER_10);
}
- public void testGetShareTargets_permission() {
+ public void disabled_testGetShareTargets_permission() {
addPackage(CHOOSER_ACTIVITY_PACKAGE, CHOOSER_ACTIVITY_UID, 10, "sig1");
mInjectedChooserActivity =
ComponentName.createRelative(CHOOSER_ACTIVITY_PACKAGE, ".ChooserActivity");
@@ -6889,7 +6889,7 @@
});
}
- public void testHasShareTargets_permission() {
+ public void disabled_testHasShareTargets_permission() {
assertExpectException(SecurityException.class, "Missing permission", () ->
mManager.hasShareTargets(CALLING_PACKAGE_1));
@@ -6898,7 +6898,8 @@
mManager.hasShareTargets(CALLING_PACKAGE_1);
}
- public void testisSharingShortcut_permission() throws IntentFilter.MalformedMimeTypeException {
+ public void disabled_testisSharingShortcut_permission()
+ throws IntentFilter.MalformedMimeTypeException {
setCaller(LAUNCHER_1, USER_10);
IntentFilter filter_any = new IntentFilter();
@@ -6919,12 +6920,12 @@
}
public void disabled_testDumpsys_withIcons() throws IOException {
- testIcons();
+ disabled_testIcons();
// Dump after having some icons.
dumpsysOnLogcat("test1", /* force= */ true);
}
- public void testManifestShortcut_publishOnUnlockUser() {
+ public void disabled_testManifestShortcut_publishOnUnlockUser() {
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
R.xml.shortcut_1);
@@ -7138,7 +7139,7 @@
assertNull(mService.getPackageShortcutForTest(LAUNCHER_1, USER_10));
}
- public void testManifestShortcut_publishOnBroadcast() {
+ public void disabled_testManifestShortcut_publishOnBroadcast() {
// First, no packages are installed.
uninstallPackage(USER_10, CALLING_PACKAGE_1);
uninstallPackage(USER_10, CALLING_PACKAGE_2);
@@ -7394,7 +7395,7 @@
});
}
- public void testManifestShortcuts_missingMandatoryFields() {
+ public void disabled_testManifestShortcuts_missingMandatoryFields() {
// Start with no apps installed.
uninstallPackage(USER_10, CALLING_PACKAGE_1);
uninstallPackage(USER_10, CALLING_PACKAGE_2);
@@ -7463,7 +7464,7 @@
});
}
- public void testManifestShortcuts_intentDefinitions() {
+ public void disabled_testManifestShortcuts_intentDefinitions() {
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
R.xml.shortcut_error_4);
@@ -7605,7 +7606,7 @@
});
}
- public void testManifestShortcuts_checkAllFields() {
+ public void disabled_testManifestShortcuts_checkAllFields() {
mService.handleUnlockUser(USER_10);
// Package 1 updated, which has one valid manifest shortcut and one invalid.
@@ -7710,7 +7711,7 @@
});
}
- public void testManifestShortcuts_localeChange() throws InterruptedException {
+ public void disabled_testManifestShortcuts_localeChange() throws InterruptedException {
mService.handleUnlockUser(USER_10);
// Package 1 updated, which has one valid manifest shortcut and one invalid.
@@ -7814,7 +7815,7 @@
});
}
- public void testManifestShortcuts_updateAndDisabled_notPinned() {
+ public void disabled_testManifestShortcuts_updateAndDisabled_notPinned() {
mService.handleUnlockUser(USER_10);
// First, just publish a manifest shortcut.
@@ -7854,7 +7855,7 @@
});
}
- public void testManifestShortcuts_updateAndDisabled_pinned() {
+ public void disabled_testManifestShortcuts_updateAndDisabled_pinned() {
mService.handleUnlockUser(USER_10);
// First, just publish a manifest shortcut.
@@ -7910,7 +7911,7 @@
});
}
- public void testManifestShortcuts_duplicateInSingleActivity() {
+ public void disabled_testManifestShortcuts_duplicateInSingleActivity() {
mService.handleUnlockUser(USER_10);
// The XML has two shortcuts with the same ID.
@@ -7935,7 +7936,7 @@
});
}
- public void testManifestShortcuts_duplicateInTwoActivities() {
+ public void disabled_testManifestShortcuts_duplicateInTwoActivities() {
mService.handleUnlockUser(USER_10);
// ShortcutActivity has shortcut ms1
@@ -7987,7 +7988,7 @@
/**
* Manifest shortcuts cannot override shortcuts that were published via the APIs.
*/
- public void testManifestShortcuts_cannotOverrideNonManifest() {
+ public void disabled_testManifestShortcuts_cannotOverrideNonManifest() {
mService.handleUnlockUser(USER_10);
// Create a non-pinned dynamic shortcut and a non-dynamic pinned shortcut.
@@ -8060,7 +8061,7 @@
/**
* Make sure the APIs won't work on manifest shortcuts.
*/
- public void testManifestShortcuts_immutable() {
+ public void disabled_testManifestShortcuts_immutable() {
mService.handleUnlockUser(USER_10);
// Create a non-pinned manifest shortcut, a pinned shortcut that was originally
@@ -8153,7 +8154,7 @@
/**
* Make sure the APIs won't work on manifest shortcuts.
*/
- public void testManifestShortcuts_tooMany() {
+ public void disabled_testManifestShortcuts_tooMany() {
// Change the max number of shortcuts.
mService.updateConfigurationLocked(ConfigConstants.KEY_MAX_SHORTCUTS + "=3");
@@ -8172,7 +8173,7 @@
});
}
- public void testMaxShortcutCount_set() {
+ public void disabled_testMaxShortcutCount_set() {
// Change the max number of shortcuts.
mService.updateConfigurationLocked(ConfigConstants.KEY_MAX_SHORTCUTS + "=3");
@@ -8253,7 +8254,7 @@
});
}
- public void testMaxShortcutCount_add() {
+ public void disabled_testMaxShortcutCount_add() {
// Change the max number of shortcuts.
mService.updateConfigurationLocked(ConfigConstants.KEY_MAX_SHORTCUTS + "=3");
@@ -8380,7 +8381,7 @@
});
}
- public void testMaxShortcutCount_update() {
+ public void disabled_testMaxShortcutCount_update() {
// Change the max number of shortcuts.
mService.updateConfigurationLocked(ConfigConstants.KEY_MAX_SHORTCUTS + "=3");
@@ -8625,7 +8626,7 @@
});
}
- public void testIsForegroundDefaultLauncher_true() {
+ public void disabled_testIsForegroundDefaultLauncher_true() {
// random uid in the USER_10 range.
final int uid = 1000024;
@@ -8636,7 +8637,7 @@
}
- public void testIsForegroundDefaultLauncher_defaultButNotForeground() {
+ public void disabled_testIsForegroundDefaultLauncher_defaultButNotForeground() {
// random uid in the USER_10 range.
final int uid = 1000024;
@@ -8646,7 +8647,7 @@
assertFalse(mInternal.isForegroundDefaultLauncher("default", uid));
}
- public void testIsForegroundDefaultLauncher_foregroundButNotDefault() {
+ public void disabled_testIsForegroundDefaultLauncher_foregroundButNotDefault() {
// random uid in the USER_10 range.
final int uid = 1000024;
@@ -8656,7 +8657,7 @@
assertFalse(mInternal.isForegroundDefaultLauncher("another", uid));
}
- public void testParseShareTargetsFromManifest() {
+ public void disabled_testParseShareTargetsFromManifest() {
// These values must exactly match the content of shortcuts_share_targets.xml resource
List<ShareTargetInfo> expectedValues = new ArrayList<>();
expectedValues.add(new ShareTargetInfo(
@@ -8774,7 +8775,7 @@
}
}
- public void testIsSharingShortcut() throws IntentFilter.MalformedMimeTypeException {
+ public void disabled_testIsSharingShortcut() throws IntentFilter.MalformedMimeTypeException {
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
R.xml.shortcut_share_targets);
@@ -8824,7 +8825,7 @@
filter_any));
}
- public void testIsSharingShortcut_PinnedAndCachedOnlyShortcuts()
+ public void disabled_testIsSharingShortcut_PinnedAndCachedOnlyShortcuts()
throws IntentFilter.MalformedMimeTypeException {
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
@@ -8881,7 +8882,7 @@
filter_any));
}
- public void testAddingShortcuts_ExcludesHiddenFromLauncherShortcuts() {
+ public void disabled_testAddingShortcuts_ExcludesHiddenFromLauncherShortcuts() {
final ShortcutInfo s1 = makeShortcutExcludedFromLauncher("s1");
final ShortcutInfo s2 = makeShortcutExcludedFromLauncher("s2");
final ShortcutInfo s3 = makeShortcutExcludedFromLauncher("s3");
@@ -8915,7 +8916,7 @@
});
}
- public void testPinHiddenShortcuts_ThrowsException() {
+ public void disabled_testPinHiddenShortcuts_ThrowsException() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertThrown(IllegalArgumentException.class, () -> {
mManager.requestPinShortcut(makeShortcutExcludedFromLauncher("s1"), null);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
index b332331..6b989cb 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
@@ -38,6 +38,7 @@
import android.platform.test.flag.junit.SetFlagsRule;
import android.service.notification.Condition;
+import com.android.internal.R;
import com.android.server.UiServiceTestCase;
import org.junit.Before;
@@ -46,6 +47,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.List;
+
public class ConditionProvidersTest extends UiServiceTestCase {
private ConditionProviders mProviders;
@@ -169,4 +172,15 @@
assertTrue(mProviders.getApproved(userId, true).isEmpty());
}
+
+ @Test
+ public void getDefaultDndAccessPackages_returnsPackages() {
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.config_defaultDndAccessPackages,
+ "com.example.a:com.example.b::::com.example.c");
+
+ List<String> packages = ConditionProviders.getDefaultDndAccessPackages(mContext);
+
+ assertThat(packages).containsExactly("com.example.a", "com.example.b", "com.example.c");
+ }
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenConfigTrimmerTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenConfigTrimmerTest.java
new file mode 100644
index 0000000..154a905
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenConfigTrimmerTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2025 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.server.notification;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.service.notification.ZenModeConfig;
+import android.service.notification.ZenModeConfig.ZenRule;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.internal.R;
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ZenConfigTrimmerTest extends UiServiceTestCase {
+
+ private static final String TRUSTED_PACKAGE = "com.trust.me";
+ private static final int ONE_PERCENT = 1_500;
+
+ private ZenConfigTrimmer mTrimmer;
+
+ @Before
+ public void setUp() {
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.config_defaultDndAccessPackages, TRUSTED_PACKAGE);
+
+ mTrimmer = new ZenConfigTrimmer(mContext);
+ }
+
+ @Test
+ public void trimToMaximumSize_belowMax_untouched() {
+ ZenModeConfig config = new ZenModeConfig();
+ addZenRule(config, "1", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "2", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "3", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "4", "pkg2", 20 * ONE_PERCENT);
+ addZenRule(config, "5", "pkg2", 20 * ONE_PERCENT);
+
+ mTrimmer.trimToMaximumSize(config);
+
+ assertThat(config.automaticRules.keySet()).containsExactly("1", "2", "3", "4", "5");
+ }
+
+ @Test
+ public void trimToMaximumSize_exceedsMax_removesAllRulesOfLargestPackages() {
+ ZenModeConfig config = new ZenModeConfig();
+ addZenRule(config, "1", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "2", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "3", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "4", "pkg2", 20 * ONE_PERCENT);
+ addZenRule(config, "5", "pkg2", 20 * ONE_PERCENT);
+ addZenRule(config, "6", "pkg3", 35 * ONE_PERCENT);
+ addZenRule(config, "7", "pkg4", 38 * ONE_PERCENT);
+
+ mTrimmer.trimToMaximumSize(config);
+
+ assertThat(config.automaticRules.keySet()).containsExactly("1", "2", "3", "6");
+ assertThat(config.automaticRules.values().stream().map(r -> r.pkg).distinct())
+ .containsExactly("pkg1", "pkg3");
+ }
+
+ @Test
+ public void trimToMaximumSize_keepsRulesFromTrustedPackages() {
+ ZenModeConfig config = new ZenModeConfig();
+ addZenRule(config, "1", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "2", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "3", "pkg1", 10 * ONE_PERCENT);
+ addZenRule(config, "4", TRUSTED_PACKAGE, 60 * ONE_PERCENT);
+ addZenRule(config, "5", "pkg2", 20 * ONE_PERCENT);
+ addZenRule(config, "6", "pkg3", 35 * ONE_PERCENT);
+
+ mTrimmer.trimToMaximumSize(config);
+
+ assertThat(config.automaticRules.keySet()).containsExactly("4", "5");
+ assertThat(config.automaticRules.values().stream().map(r -> r.pkg).distinct())
+ .containsExactly(TRUSTED_PACKAGE, "pkg2");
+ }
+
+ /**
+ * Create a ZenRule that, when serialized to a Parcel, will take <em>approximately</em>
+ * {@code desiredSize} bytes (within 100 bytes). Try to make the tests not rely on a very tight
+ * fit.
+ */
+ private static void addZenRule(ZenModeConfig config, String id, String pkg, int desiredSize) {
+ ZenRule rule = new ZenRule();
+ rule.id = id;
+ rule.pkg = pkg;
+ config.automaticRules.put(id, rule);
+
+ // Make the ZenRule as large as desired. Not to the exact byte, because otherwise this
+ // test would have to be adjusted whenever we change the parceling of ZenRule in any way.
+ // (Still might need adjustment if we change the serialization _significantly_).
+ int nameLength = desiredSize - id.length() - pkg.length() - 232;
+ rule.name = "A".repeat(nameLength);
+
+ Parcel verification = Parcel.obtain();
+ try {
+ verification.writeParcelable(rule, 0);
+ assertThat(verification.dataSize()).isWithin(100).of(desiredSize);
+ } finally {
+ verification.recycle();
+ }
+ }
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index f8387a4..51891ef 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -90,6 +90,7 @@
import static com.android.os.dnd.DNDProtoEnums.ROOT_CONFIG;
import static com.android.os.dnd.DNDProtoEnums.STATE_ALLOW;
import static com.android.os.dnd.DNDProtoEnums.STATE_DISALLOW;
+import static com.android.server.notification.Flags.FLAG_LIMIT_ZEN_CONFIG_SIZE;
import static com.android.server.notification.Flags.FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING;
import static com.android.server.notification.ZenModeEventLogger.ACTIVE_RULE_TYPE_MANUAL;
import static com.android.server.notification.ZenModeHelper.RULE_LIMIT_PER_PACKAGE;
@@ -236,6 +237,7 @@
@SmallTest
@SuppressLint("GuardedBy") // It's ok for this test to access guarded methods from the service.
@RunWith(ParameterizedAndroidJunit4.class)
+@EnableFlags(FLAG_LIMIT_ZEN_CONFIG_SIZE) // Should be parameterization, but off path does nothing.
@TestableLooper.RunWithLooper
public class ZenModeHelperTest extends UiServiceTestCase {
@@ -7480,6 +7482,45 @@
assertThat(getZenRule(ruleId).lastActivation).isNull();
}
+ @Test
+ @EnableFlags(FLAG_LIMIT_ZEN_CONFIG_SIZE)
+ public void addAutomaticZenRule_trimsConfiguration() {
+ mZenModeHelper.mConfig.automaticRules.clear();
+ AutomaticZenRule smallRule = new AutomaticZenRule.Builder("Reasonable", CONDITION_ID)
+ .setConfigurationActivity(new ComponentName(mPkg, "cls"))
+ .build();
+ AutomaticZenRule systemRule = new AutomaticZenRule.Builder("System", CONDITION_ID)
+ .setOwner(new ComponentName("android", "ScheduleConditionProvider"))
+ .build();
+
+ AutomaticZenRule bigRule = new AutomaticZenRule.Builder("Yuge", CONDITION_ID)
+ .setConfigurationActivity(new ComponentName("evil.package", "cls"))
+ .setTriggerDescription("0123456789".repeat(6000)) // ~60k bytes utf16.
+ .build();
+
+ String systemRuleId = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, "android",
+ systemRule, ORIGIN_SYSTEM, "add", SYSTEM_UID);
+ String smallRuleId = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, mPkg, smallRule,
+ ORIGIN_APP, "add", CUSTOM_PKG_UID);
+ String bigRuleId1 = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, "evil.package",
+ bigRule, ORIGIN_APP, "add", CUSTOM_PKG_UID);
+ assertThat(mZenModeHelper.mConfig.automaticRules.keySet()).containsExactly(
+ systemRuleId, smallRuleId, bigRuleId1);
+
+ String bigRuleId2 = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, "evil.package",
+ bigRule, ORIGIN_APP, "add", CUSTOM_PKG_UID);
+ assertThat(mZenModeHelper.mConfig.automaticRules.keySet()).containsExactly(
+ systemRuleId, smallRuleId, bigRuleId1, bigRuleId2);
+
+ // This should go over the threshold
+ String bigRuleId3 = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, "evil.package",
+ bigRule, ORIGIN_APP, "add", CUSTOM_PKG_UID);
+
+ // Rules from evil.package are gone.
+ assertThat(mZenModeHelper.mConfig.automaticRules.keySet()).containsExactly(
+ systemRuleId, smallRuleId);
+ }
+
private static void addZenRule(ZenModeConfig config, String id, String ownerPkg, int zenMode,
@Nullable ZenPolicy zenPolicy) {
ZenRule rule = new ZenRule();
diff --git a/services/tests/wmtests/src/com/android/server/TransitionSubject.java b/services/tests/wmtests/src/com/android/server/TransitionSubject.java
new file mode 100644
index 0000000..07026b9
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/TransitionSubject.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2025 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.server.wm;
+
+import android.annotation.Nullable;
+
+import com.google.common.truth.FailureMetadata;
+import com.google.common.truth.IterableSubject;
+import com.google.common.truth.Subject;
+import com.google.common.truth.Truth;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TransitionSubject extends Subject {
+
+ @Nullable
+ private final Transition actual;
+
+ /**
+ * Internal constructor.
+ *
+ * @see TransitionSubject#assertThat(Transition)
+ */
+ private TransitionSubject(FailureMetadata metadata, @Nullable Transition actual) {
+ super(metadata, actual);
+ this.actual = actual;
+ }
+
+ /**
+ * In a fluent assertion chain, the argument to the "custom" overload of {@link
+ * StandardSubjectBuilder#about(CustomSubjectBuilder.Factory) about}, the method that specifies
+ * what kind of {@link Subject} to create.
+ */
+ public static Factory<TransitionSubject, Transition> transitions() {
+ return TransitionSubject::new;
+ }
+
+ /**
+ * Typical entry point for making assertions about Transitions.
+ *
+ * @see @Truth#assertThat(Object)
+ */
+ public static TransitionSubject assertThat(Transition transition) {
+ return Truth.assertAbout(transitions()).that(transition);
+ }
+
+ /**
+ * Converts to a {@link IterableSubject} containing {@link Transition#getFlags()} separated into
+ * a list of individual flags for assertions such as {@code flags().contains(TRANSIT_FLAG_XYZ)}.
+ *
+ * <p>If the subject is null, this will fail instead of returning a null subject.
+ */
+ public IterableSubject flags() {
+ isNotNull();
+
+ final List<Integer> sortedFlags = new ArrayList<>();
+ for (int i = 0; i < 32; i++) {
+ if ((actual.getFlags() & (1 << i)) != 0) {
+ sortedFlags.add((1 << i));
+ }
+ }
+ return com.google.common.truth.Truth.assertThat(sortedFlags);
+ }
+}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
index d4be7f8..51da511 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
@@ -18,6 +18,7 @@
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH;
+import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA;
@@ -231,6 +232,7 @@
@Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
public void testShouldApplyCameraCompatFreeformTreatment_notEnabledByOverride_returnsFalse() {
runTestScenario((robot) -> {
robot.activity().createActivityWithComponentInNewTask();
@@ -240,21 +242,19 @@
}
@Test
- @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
+ @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION})
@EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
- public void testShouldApplyCameraCompatFreeformTreatment_propertyFalse_returnsFalse() {
+ public void testShouldApplyCameraCompatFreeformTreatment_disablePropertyOn_returnsFalse() {
runTestScenario((robot) -> {
robot.activity().createActivityWithComponentInNewTask();
- robot.prop().disable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
-
robot.checkShouldApplyFreeformTreatmentForCameraCompat(false);
});
}
@Test
- @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
+ @EnableCompatChanges(OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT)
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
@DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
public void testShouldApplyCameraCompatFreeformTreatment_optOutFlagNotEnabled_optOutIgnored() {
@@ -262,18 +262,50 @@
robot.activity().createActivityWithComponentInNewTask();
robot.prop().disable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+ robot.activity().createActivityWithComponentInNewTask();
robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
});
}
@Test
- @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
- @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
- public void testShouldApplyCameraCompatFreeformTreatment_overrideAndFlagEnabled_returnsTrue() {
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testShouldApplyCameraCompatFreeformTreatment_optedOutViaProperty_returnsFalse() {
runTestScenario((robot) -> {
robot.activity().createActivityWithComponentInNewTask();
+ robot.prop().disable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+ robot.activity().createActivityWithComponentInNewTask();
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(false);
+ });
+ }
+
+ @Test
+ @EnableCompatChanges(OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT)
+ @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
+ public void testShouldApplyCameraCompatFreeformTreatment_optInAndFlagEnabled_returnsTrue() {
+ runTestScenario((robot) -> {
+ robot.activity().createActivityWithComponentInNewTask();
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
+ });
+ }
+
+
+ @Test
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testShouldApplyCameraCompatFreeformTreatment_notOptedOut_flagEnabled_returnsTrue() {
+ runTestScenario((robot) -> {
+ robot.conf().enableCameraCompatTreatment(true);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponentInNewTask();
+ robot.prop().enable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+ });
+
robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
});
}
@@ -294,6 +326,8 @@
@EnableCompatChanges({OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA,
OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA,
OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
+ @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
public void testShouldRecomputeConfigurationForFreeformTreatment() {
runTestScenario((robot) -> {
robot.conf().enableCameraCompatSplitScreenAspectRatio(true);
@@ -307,6 +341,24 @@
}
@Test
+ @EnableCompatChanges({OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA,
+ OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA})
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testShouldRecomputeConfigurationForFreeformTreatmentWithOptOutMechanism() {
+ runTestScenario((robot) -> {
+ robot.conf().enableCameraCompatSplitScreenAspectRatio(true);
+ robot.conf().enableCameraCompatTreatment(true);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponentInNewTask();
+ robot.prop().enable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+ });
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
+ });
+ }
+
+ @Test
@EnableCompatChanges({OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA})
public void shouldOverrideMinAspectRatioForCamera_overrideEnabled_returnsTrue() {
runTestScenario((robot) -> {
diff --git a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
index 5607252..50876c7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java
@@ -25,6 +25,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.servertransaction.ActivityLifecycleItem.ON_PAUSE;
import static android.app.servertransaction.ActivityLifecycleItem.ON_STOP;
+import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_FULL_USER;
@@ -42,6 +43,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.android.server.wm.AppCompatConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING;
+import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -134,8 +136,10 @@
}
@Test
- @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
- public void testIsCameraRunningAndWindowingModeEligible_overrideDisabled_returnsFalse() {
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION})
+ public void testIsCameraRunningAndWindowingModeEligible_disabledViaOverride_returnsFalse() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
@@ -165,6 +169,7 @@
@Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
@EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
public void testIsCameraRunningAndWindowingModeEligible_optInFreeformCameraRunning_true() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
@@ -175,6 +180,17 @@
}
@Test
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testIsCameraRunningAndWindowingModeEligible_freeformCameraRunning_true() {
+ configureActivity(SCREEN_ORIENTATION_PORTRAIT);
+
+ onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
+
+ assertTrue(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity));
+ }
+
+ @Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
public void testIsFreeformLetterboxingForCameraAllowed_overrideDisabled_returnsFalse() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
index d305c2f..3a06fff 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
@@ -49,6 +49,8 @@
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.app.ActivityOptions;
import android.compat.testing.PlatformCompatChangeRule;
@@ -98,7 +100,8 @@
mResult = new LaunchParamsController.LaunchParams();
mResult.reset();
- mTarget = new DesktopModeLaunchParamsModifier(mContext);
+ mTarget = spy(new DesktopModeLaunchParamsModifier(mContext));
+ doReturn(true).when(mTarget).isEnteringDesktopMode(any(), any(), any());
}
@Test
@@ -137,6 +140,81 @@
}
@Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX})
+ public void testReturnsSkipIfIsEnteringDesktopModeFalse() {
+ setupDesktopModeLaunchParamsModifier();
+ when(mTarget.isEnteringDesktopMode(any(), any(), any())).thenReturn(false);
+
+ final Task task = new TaskBuilder(mSupervisor).build();
+
+ assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(task).calculate());
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX})
+ public void testReturnsContinueIfVisibleFreeformTaskExists() {
+ setupDesktopModeLaunchParamsModifier();
+ when(mTarget.isEnteringDesktopMode(any(), any(), any())).thenCallRealMethod();
+
+ final DisplayContent dc = spy(createNewDisplay());
+ final Task existingFreeformTask = new TaskBuilder(mSupervisor).setCreateActivity(true)
+ .setWindowingMode(WINDOWING_MODE_FREEFORM).build();
+ doReturn(existingFreeformTask.getRootActivity()).when(dc)
+ .getTopMostVisibleFreeformActivity();
+ final Task launchingTask = new TaskBuilder(mSupervisor).build();
+ launchingTask.onDisplayChanged(dc);
+
+ assertEquals(RESULT_CONTINUE,
+ new CalculateRequestBuilder().setTask(launchingTask).calculate());
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX})
+ public void testReturnsContinueIfTaskInFreeform() {
+ setupDesktopModeLaunchParamsModifier();
+ when(mTarget.isEnteringDesktopMode(any(), any(), any())).thenCallRealMethod();
+
+ final Task task = new TaskBuilder(mSupervisor).setWindowingMode(WINDOWING_MODE_FREEFORM)
+ .build();
+
+ assertEquals(RESULT_CONTINUE,
+ new CalculateRequestBuilder().setTask(task).calculate());
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX})
+ public void testReturnsContinueIfFreeformRequestViaActivityOptions() {
+ setupDesktopModeLaunchParamsModifier();
+ when(mTarget.isEnteringDesktopMode(any(), any(), any())).thenCallRealMethod();
+
+ final Task task = new TaskBuilder(mSupervisor).build();
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
+
+ assertEquals(RESULT_CONTINUE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_DISABLE_DESKTOP_LAUNCH_PARAMS_OUTSIDE_DESKTOP_BUG_FIX})
+ public void testReturnsContinueIfFreeformRequestViaPreviousModifier() {
+ setupDesktopModeLaunchParamsModifier();
+ when(mTarget.isEnteringDesktopMode(any(), any(), any())).thenCallRealMethod();
+
+ final Task task = new TaskBuilder(mSupervisor).build();
+ final ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
+
+ assertEquals(RESULT_CONTINUE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
public void testReturnsSkipIfNotBoundsPhase() {
setupDesktopModeLaunchParamsModifier();
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index cfd501a..61ed0b5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -63,6 +63,9 @@
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_FLAG_AOD_APPEARING;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_APPEARING;
import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
@@ -80,6 +83,7 @@
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
+import static com.android.server.wm.TransitionSubject.assertThat;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING;
import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE;
import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT;
@@ -147,6 +151,7 @@
import com.android.server.LocalServices;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.wm.utils.WmDisplayCutout;
+import com.android.window.flags.Flags;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -2620,6 +2625,7 @@
final KeyguardController keyguard = mAtm.mKeyguardController;
final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
final int displayId = mDisplayContent.getDisplayId();
+ final TestTransitionPlayer transitions = registerTestTransitionPlayer();
final BooleanSupplier keyguardShowing = () -> keyguard.isKeyguardShowing(displayId);
final BooleanSupplier keyguardGoingAway = () -> keyguard.isKeyguardGoingAway(displayId);
@@ -2629,21 +2635,40 @@
keyguard.setKeyguardShown(displayId, true /* keyguard */, true /* aod */);
assertFalse(keyguardGoingAway.getAsBoolean());
assertFalse(appVisible.getAsBoolean());
+ transitions.flush();
// Start unlocking from AOD.
keyguard.keyguardGoingAway(displayId, 0x0 /* flags */);
assertTrue(keyguardGoingAway.getAsBoolean());
assertTrue(appVisible.getAsBoolean());
+ if (Flags.ensureKeyguardDoesTransitionStarting()) {
+ assertThat(transitions.mLastTransit).isNull();
+ } else {
+ assertThat(transitions.mLastTransit).flags()
+ .containsExactly(TRANSIT_FLAG_KEYGUARD_GOING_AWAY);
+ }
+ transitions.flush();
+
// Clear AOD. This does *not* clear the going-away status.
keyguard.setKeyguardShown(displayId, true /* keyguard */, false /* aod */);
assertTrue(keyguardGoingAway.getAsBoolean());
assertTrue(appVisible.getAsBoolean());
+ if (Flags.aodTransition()) {
+ assertThat(transitions.mLastTransit).flags()
+ .containsExactly(TRANSIT_FLAG_AOD_APPEARING);
+ } else {
+ assertThat(transitions.mLastTransit).isNull();
+ }
+ transitions.flush();
+
// Finish unlock
keyguard.setKeyguardShown(displayId, false /* keyguard */, false /* aod */);
assertFalse(keyguardGoingAway.getAsBoolean());
assertTrue(appVisible.getAsBoolean());
+
+ assertThat(transitions.mLastTransit).isNull();
}
@Test
@@ -2653,6 +2678,7 @@
final KeyguardController keyguard = mAtm.mKeyguardController;
final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
final int displayId = mDisplayContent.getDisplayId();
+ final TestTransitionPlayer transitions = registerTestTransitionPlayer();
final BooleanSupplier keyguardShowing = () -> keyguard.isKeyguardShowing(displayId);
final BooleanSupplier keyguardGoingAway = () -> keyguard.isKeyguardGoingAway(displayId);
@@ -2662,22 +2688,44 @@
keyguard.setKeyguardShown(displayId, true /* keyguard */, true /* aod */);
assertFalse(keyguardGoingAway.getAsBoolean());
assertFalse(appVisible.getAsBoolean());
+ transitions.flush();
// Start unlocking from AOD.
keyguard.keyguardGoingAway(displayId, 0x0 /* flags */);
assertTrue(keyguardGoingAway.getAsBoolean());
assertTrue(appVisible.getAsBoolean());
+ if (!Flags.ensureKeyguardDoesTransitionStarting()) {
+ assertThat(transitions.mLastTransit).flags()
+ .containsExactly(TRANSIT_FLAG_KEYGUARD_GOING_AWAY);
+ }
+ transitions.flush();
+
// Clear AOD. This does *not* clear the going-away status.
keyguard.setKeyguardShown(displayId, true /* keyguard */, false /* aod */);
assertTrue(keyguardGoingAway.getAsBoolean());
assertTrue(appVisible.getAsBoolean());
+ if (Flags.aodTransition()) {
+ assertThat(transitions.mLastTransit).flags()
+ .containsExactly(TRANSIT_FLAG_AOD_APPEARING);
+ } else {
+ assertThat(transitions.mLastTransit).isNull();
+ }
+ transitions.flush();
+
// Same API call a second time cancels the unlock, because AOD isn't changing.
keyguard.setKeyguardShown(displayId, true /* keyguard */, false /* aod */);
assertTrue(keyguardShowing.getAsBoolean());
assertFalse(keyguardGoingAway.getAsBoolean());
assertFalse(appVisible.getAsBoolean());
+
+ if (Flags.ensureKeyguardDoesTransitionStarting()) {
+ assertThat(transitions.mLastTransit).isNull();
+ } else {
+ assertThat(transitions.mLastTransit).flags()
+ .containsExactly(TRANSIT_FLAG_KEYGUARD_APPEARING);
+ }
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java
index 2d4101e..6e0f7fb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java
@@ -16,9 +16,12 @@
package com.android.server.wm;
+import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.FLAG_PRESENTATION;
+import static android.view.Display.FLAG_TRUSTED;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
+import static android.view.WindowManager.TRANSIT_WAKE;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.window.flags.Flags.FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS;
@@ -30,6 +33,7 @@
import android.annotation.NonNull;
import android.graphics.Rect;
+import android.os.Binder;
import android.os.UserHandle;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
@@ -118,6 +122,112 @@
assertFalse(window.isAttached());
}
+ @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
+ @Test
+ public void testPresentationCannotCoverHostTask() {
+ int uid = Binder.getCallingUid();
+ final DisplayContent presentationDisplay = createPresentationDisplay();
+ final Task task = createTask(presentationDisplay);
+ task.effectiveUid = uid;
+ final ActivityRecord activity = createActivityRecord(task);
+ assertTrue(activity.isVisible());
+
+ // Adding a presentation window over its host task must fail.
+ assertAddPresentationWindowFails(uid, presentationDisplay.mDisplayId);
+
+ // Adding a presentation window on the other display must succeed.
+ final WindowState window = addPresentationWindow(uid, DEFAULT_DISPLAY);
+ final Transition addTransition = window.mTransitionController.getCollectingTransition();
+ completeTransition(addTransition, /*abortSync=*/ true);
+ assertTrue(window.isVisible());
+
+ // Moving the host task to the presenting display will remove the presentation.
+ task.reparent(mDefaultDisplay.getDefaultTaskDisplayArea(), true);
+ waitHandlerIdle(window.mWmService.mAtmService.mH);
+ final Transition removeTransition = window.mTransitionController.getCollectingTransition();
+ assertEquals(TRANSIT_CLOSE, removeTransition.mType);
+ completeTransition(removeTransition, /*abortSync=*/ false);
+ assertFalse(window.isVisible());
+ }
+
+ @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
+ @Test
+ public void testPresentationCannotLaunchOnAllDisplays() {
+ final int uid = Binder.getCallingUid();
+ final DisplayContent presentationDisplay = createPresentationDisplay();
+ final Task task = createTask(presentationDisplay);
+ task.effectiveUid = uid;
+ final ActivityRecord activity = createActivityRecord(task);
+ assertTrue(activity.isVisible());
+
+ // Add a presentation window on the default display.
+ final WindowState window = addPresentationWindow(uid, DEFAULT_DISPLAY);
+ final Transition addTransition = window.mTransitionController.getCollectingTransition();
+ completeTransition(addTransition, /*abortSync=*/ true);
+ assertTrue(window.isVisible());
+
+ // Adding another presentation window over the task even if it's a different UID because
+ // it would end up showing presentations on all displays.
+ assertAddPresentationWindowFails(uid + 1, presentationDisplay.mDisplayId);
+ }
+
+ @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
+ @Test
+ public void testPresentationCannotLaunchOnNonPresentationDisplayWithoutHostHavingGlobalFocus() {
+ final int uid = Binder.getCallingUid();
+ // Adding a presentation window on an internal display requires a host task
+ // with global focus on another display.
+ assertAddPresentationWindowFails(uid, DEFAULT_DISPLAY);
+
+ final DisplayContent presentationDisplay = createPresentationDisplay();
+ final Task taskWiSameUid = createTask(presentationDisplay);
+ taskWiSameUid.effectiveUid = uid;
+ final ActivityRecord activity = createActivityRecord(taskWiSameUid);
+ assertTrue(activity.isVisible());
+ final Task taskWithDifferentUid = createTask(presentationDisplay);
+ taskWithDifferentUid.effectiveUid = uid + 1;
+ createActivityRecord(taskWithDifferentUid);
+ assertEquals(taskWithDifferentUid, presentationDisplay.getFocusedRootTask());
+
+ // The task with the same UID is covered by another task with a different UID, so this must
+ // also fail.
+ assertAddPresentationWindowFails(uid, DEFAULT_DISPLAY);
+
+ // Moving the task with the same UID to front and giving it global focus allows a
+ // presentation to show on the default display.
+ taskWiSameUid.moveToFront("test");
+ final WindowState window = addPresentationWindow(uid, DEFAULT_DISPLAY);
+ final Transition addTransition = window.mTransitionController.getCollectingTransition();
+ completeTransition(addTransition, /*abortSync=*/ true);
+ assertTrue(window.isVisible());
+ }
+
+ @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
+ @Test
+ public void testReparentingActivityToSameDisplayClosesPresentation() {
+ final int uid = Binder.getCallingUid();
+ final Task task = createTask(mDefaultDisplay);
+ task.effectiveUid = uid;
+ final ActivityRecord activity = createActivityRecord(task);
+ assertTrue(activity.isVisible());
+
+ // Add a presentation window on a presentation display.
+ final DisplayContent presentationDisplay = createPresentationDisplay();
+ final WindowState window = addPresentationWindow(uid, presentationDisplay.getDisplayId());
+ final Transition addTransition = window.mTransitionController.getCollectingTransition();
+ completeTransition(addTransition, /*abortSync=*/ true);
+ assertTrue(window.isVisible());
+
+ // Reparenting the host task below the presentation must close the presentation.
+ task.reparent(presentationDisplay.getDefaultTaskDisplayArea(), true);
+ waitHandlerIdle(window.mWmService.mAtmService.mH);
+ final Transition removeTransition = window.mTransitionController.getCollectingTransition();
+ // It's a WAKE transition instead of CLOSE because
+ assertEquals(TRANSIT_WAKE, removeTransition.mType);
+ completeTransition(removeTransition, /*abortSync=*/ false);
+ assertFalse(window.isVisible());
+ }
+
private WindowState addPresentationWindow(int uid, int displayId) {
final Session session = createTestSession(mAtm, 1234 /* pid */, uid);
final int userId = UserHandle.getUserId(uid);
@@ -134,10 +244,29 @@
return window;
}
+ private void assertAddPresentationWindowFails(int uid, int displayId) {
+ final Session session = createTestSession(mAtm, 1234 /* pid */, uid);
+ final IWindow clientWindow = new TestIWindow();
+ final int res = addPresentationWindowInner(uid, displayId, session, clientWindow);
+ assertEquals(WindowManagerGlobal.ADD_INVALID_DISPLAY, res);
+ }
+
+ private int addPresentationWindowInner(int uid, int displayId, Session session,
+ IWindow clientWindow) {
+ final int userId = UserHandle.getUserId(uid);
+ doReturn(true).when(mWm.mUmInternal).isUserVisible(eq(userId), eq(displayId));
+ final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
+ WindowManager.LayoutParams.TYPE_PRESENTATION);
+ return mWm.addWindow(session, clientWindow, params, View.VISIBLE, displayId, userId,
+ WindowInsets.Type.defaultVisible(), null, new InsetsState(),
+ new InsetsSourceControl.Array(), new Rect(), new float[1]);
+ }
+
private DisplayContent createPresentationDisplay() {
final DisplayInfo displayInfo = new DisplayInfo();
displayInfo.copyFrom(mDisplayInfo);
- displayInfo.flags = FLAG_PRESENTATION;
+ displayInfo.flags = FLAG_PRESENTATION | FLAG_TRUSTED;
+ displayInfo.displayId = DEFAULT_DISPLAY + 1;
final DisplayContent dc = createNewDisplay(displayInfo);
final int displayId = dc.getDisplayId();
doReturn(dc).when(mWm.mRoot).getDisplayContentOrCreate(displayId);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
index 45436e4..d3f3269 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java
@@ -33,6 +33,7 @@
import android.platform.test.annotations.Presubmit;
import android.view.Display.Mode;
import android.view.Surface;
+import android.view.WindowInsets;
import android.view.WindowManager.LayoutParams;
import androidx.test.filters.SmallTest;
@@ -283,7 +284,7 @@
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
- overrideWindow.notifyInsetsAnimationRunningStateChanged(true);
+ overrideWindow.setAnimatingTypes(WindowInsets.Type.statusBars());
assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
assertTrue(mPolicy.updateFrameRateVote(overrideWindow));
assertEquals(FRAME_RATE_VOTE_NONE, overrideWindow.mFrameRateVote);
@@ -303,7 +304,7 @@
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
- overrideWindow.notifyInsetsAnimationRunningStateChanged(true);
+ overrideWindow.setAnimatingTypes(WindowInsets.Type.statusBars());
assertEquals(0, mPolicy.getPreferredModeId(overrideWindow));
assertTrue(mPolicy.updateFrameRateVote(overrideWindow));
assertEquals(FRAME_RATE_VOTE_NONE, overrideWindow.mFrameRateVote);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index c0642f5..57ab13f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -2151,6 +2151,14 @@
mLastRequest = null;
}
+ void flush() {
+ if (mLastTransit != null) {
+ start();
+ finish();
+ clear();
+ }
+ }
+
@Override
public void onTransitionReady(IBinder transitToken, TransitionInfo transitionInfo,
SurfaceControl.Transaction transaction, SurfaceControl.Transaction finishT)
diff --git a/telecomm/java/android/telecom/OWNERS b/telecomm/java/android/telecom/OWNERS
index 6656a01..0854c5d 100644
--- a/telecomm/java/android/telecom/OWNERS
+++ b/telecomm/java/android/telecom/OWNERS
@@ -3,4 +3,3 @@
rgreenwalt@google.com
tgunn@google.com
breadley@google.com
-hallliu@google.com
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 6e0304b..fbba999 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -10579,9 +10579,19 @@
public boolean hasCarrierPrivileges(int subId) {
try {
ITelephony telephony = getITelephony();
- if (telephony != null) {
- return telephony.getCarrierPrivilegeStatus(subId)
- == CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
+ if (telephony == null) {
+ Rlog.e(TAG, "hasCarrierPrivileges: no Telephony service");
+ return false;
+ }
+ int status = telephony.getCarrierPrivilegeStatus(subId);
+ switch (status) {
+ case CARRIER_PRIVILEGE_STATUS_HAS_ACCESS:
+ return true;
+ case CARRIER_PRIVILEGE_STATUS_NO_ACCESS:
+ return false;
+ default:
+ Rlog.e(TAG, "hasCarrierPrivileges: " + status);
+ return false;
}
} catch (RemoteException ex) {
Rlog.e(TAG, "hasCarrierPrivileges RemoteException", ex);
diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java
index ca4a643..ae7346e 100644
--- a/telephony/java/android/telephony/euicc/EuiccManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccManager.java
@@ -1737,13 +1737,8 @@
private int getCardIdForDefaultEuicc() {
int cardId = TelephonyManager.UNINITIALIZED_CARD_ID;
- if (Flags.enforceTelephonyFeatureMappingForPublicApis()) {
- PackageManager pm = mContext.getPackageManager();
- if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_EUICC)) {
- TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
- cardId = tm.getCardIdForDefaultEuicc();
- }
- } else {
+ PackageManager pm = mContext.getPackageManager();
+ if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_EUICC)) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
cardId = tm.getCardIdForDefaultEuicc();
}
diff --git a/tests/EnforcePermission/OWNERS b/tests/EnforcePermission/OWNERS
index 39550a3..160849e 100644
--- a/tests/EnforcePermission/OWNERS
+++ b/tests/EnforcePermission/OWNERS
@@ -1,3 +1,2 @@
# Bug component: 315013
tweek@google.com
-brufino@google.com
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index f43cf52..43d5b71 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -113,6 +113,7 @@
"io/ZipArchive.cpp",
"link/AutoVersioner.cpp",
"link/FeatureFlagsFilter.cpp",
+ "link/FlaggedXmlVersioner.cpp",
"link/FlagDisabledResourceRemover.cpp",
"link/ManifestFixer.cpp",
"link/NoDefaultResourceRemover.cpp",
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index fb576df..9e2a4c1 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -547,7 +547,8 @@
});
std::string_view resource_type = parser->element_name();
- if (auto flag = ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, "featureFlag"))) {
+ if (auto flag =
+ ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, xml::kAttrFeatureFlag))) {
if (options_.flag) {
diag_->Error(android::DiagMessage(source_.WithLine(parser->line_number()))
<< "Resource flag are not allowed both in the path and in the file");
@@ -1529,7 +1530,7 @@
ResolvePackage(parser, &maybe_key.value());
maybe_key.value().SetSource(source);
- auto flag = ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, "featureFlag"));
+ auto flag = ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, xml::kAttrFeatureFlag));
std::unique_ptr<Item> value = ParseXml(parser, 0, kAllowRawString);
if (!value) {
@@ -1674,7 +1675,7 @@
const std::string& element_namespace = parser->element_namespace();
const std::string& element_name = parser->element_name();
if (element_namespace.empty() && element_name == "item") {
- auto flag = ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, "featureFlag"));
+ auto flag = ParseFlag(xml::FindAttribute(parser, xml::kSchemaAndroid, xml::kAttrFeatureFlag));
std::unique_ptr<Item> item = ParseXml(parser, typeMask, kNoRawString);
if (!item) {
diag_->Error(android::DiagMessage(item_source) << "could not parse array item");
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index 0a5cb1f..2a79216 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -58,6 +58,7 @@
#include "java/ProguardRules.h"
#include "link/FeatureFlagsFilter.h"
#include "link/FlagDisabledResourceRemover.h"
+#include "link/FlaggedXmlVersioner.h"
#include "link/Linkers.h"
#include "link/ManifestFixer.h"
#include "link/NoDefaultResourceRemover.h"
@@ -503,10 +504,19 @@
const ConfigDescription& config = file_op->config;
ResourceEntry* entry = file_op->entry;
+ FlaggedXmlVersioner flagged_xml_versioner;
+ auto flag_split_resources = flagged_xml_versioner.Process(context_, doc);
+
+ std::vector<std::unique_ptr<xml::XmlResource>> final_resources;
XmlCompatVersioner xml_compat_versioner(&rules_);
const util::Range<ApiVersion> api_range{config.sdkVersion,
FindNextApiVersionForConfig(entry, config)};
- return xml_compat_versioner.Process(context_, doc, api_range);
+ for (auto& split_res : flag_split_resources) {
+ auto inner_resources = xml_compat_versioner.Process(context_, split_res.get(), api_range);
+ final_resources.insert(final_resources.end(), std::make_move_iterator(inner_resources.begin()),
+ std::make_move_iterator(inner_resources.end()));
+ }
+ return final_resources;
}
ResourceFile::Type XmlFileTypeForOutputFormat(OutputFormat format) {
diff --git a/tools/aapt2/link/FeatureFlagsFilter.cpp b/tools/aapt2/link/FeatureFlagsFilter.cpp
index 23f7838..74066a3 100644
--- a/tools/aapt2/link/FeatureFlagsFilter.cpp
+++ b/tools/aapt2/link/FeatureFlagsFilter.cpp
@@ -51,7 +51,7 @@
private:
bool ShouldRemove(std::unique_ptr<xml::Node>& node) {
if (auto* el = NodeCast<Element>(node.get())) {
- auto* attr = el->FindAttribute(xml::kSchemaAndroid, "featureFlag");
+ auto* attr = el->FindAttribute(xml::kSchemaAndroid, xml::kAttrFeatureFlag);
if (attr == nullptr) {
return false;
}
@@ -76,7 +76,7 @@
// Remove if flag==true && attr=="!flag" (negated) OR flag==false && attr=="flag"
bool remove = *it->second.enabled == negated;
if (!remove) {
- el->RemoveAttribute(xml::kSchemaAndroid, "featureFlag");
+ el->RemoveAttribute(xml::kSchemaAndroid, xml::kAttrFeatureFlag);
}
return remove;
}
diff --git a/tools/aapt2/link/FlaggedResources_test.cpp b/tools/aapt2/link/FlaggedResources_test.cpp
index 7bea96c..dbef776 100644
--- a/tools/aapt2/link/FlaggedResources_test.cpp
+++ b/tools/aapt2/link/FlaggedResources_test.cpp
@@ -163,7 +163,7 @@
auto loaded_apk = LoadedApk::LoadApkFromPath(apk_path, &noop_diag);
std::string output;
- DumpXmlTreeToString(loaded_apk.get(), "res/layout-v22/layout1.xml", &output);
+ DumpXmlTreeToString(loaded_apk.get(), "res/layout-v36/layout1.xml", &output);
ASSERT_FALSE(output.contains("test.package.trueFlag"));
ASSERT_TRUE(output.contains("FIND_ME"));
ASSERT_TRUE(output.contains("test.package.readWriteFlag"));
diff --git a/tools/aapt2/link/FlaggedXmlVersioner.cpp b/tools/aapt2/link/FlaggedXmlVersioner.cpp
new file mode 100644
index 0000000..75c6f17
--- /dev/null
+++ b/tools/aapt2/link/FlaggedXmlVersioner.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+
+#include "link/FlaggedXmlVersioner.h"
+
+#include "SdkConstants.h"
+#include "androidfw/Util.h"
+
+using ::aapt::xml::Element;
+using ::aapt::xml::NodeCast;
+
+namespace aapt {
+
+// An xml visitor that goes through the a doc and removes any elements that are behind non-negated
+// flags. It also removes the featureFlag attribute from elements behind negated flags.
+class AllDisabledFlagsVisitor : public xml::Visitor {
+ public:
+ void Visit(xml::Element* node) override {
+ std::erase_if(node->children, [this](const std::unique_ptr<xml::Node>& node) {
+ return FixupOrShouldRemove(node);
+ });
+ VisitChildren(node);
+ }
+
+ bool HadFlags() const {
+ return had_flags_;
+ }
+
+ private:
+ bool FixupOrShouldRemove(const std::unique_ptr<xml::Node>& node) {
+ if (auto* el = NodeCast<Element>(node.get())) {
+ auto* attr = el->FindAttribute(xml::kSchemaAndroid, xml::kAttrFeatureFlag);
+ if (attr == nullptr) {
+ return false;
+ }
+
+ had_flags_ = true;
+ // This class assumes all flags are disabled so we want to remove any elements behind flags
+ // unless the flag specification is negated. In the negated case we remove the featureFlag
+ // attribute because we have already determined whether we are keeping the element or not.
+ std::string_view flag_name = util::TrimWhitespace(attr->value);
+ if (flag_name.starts_with('!')) {
+ el->RemoveAttribute(xml::kSchemaAndroid, xml::kAttrFeatureFlag);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool had_flags_ = false;
+};
+
+std::vector<std::unique_ptr<xml::XmlResource>> FlaggedXmlVersioner::Process(IAaptContext* context,
+ xml::XmlResource* doc) {
+ std::vector<std::unique_ptr<xml::XmlResource>> docs;
+ if ((static_cast<ApiVersion>(doc->file.config.sdkVersion) >= SDK_BAKLAVA) ||
+ (static_cast<ApiVersion>(context->GetMinSdkVersion()) >= SDK_BAKLAVA)) {
+ // Support for read/write flags was added in baklava so if the doc will only get used on
+ // baklava or later we can just return the original doc.
+ docs.push_back(doc->Clone());
+ } else {
+ auto preBaklavaVersion = doc->Clone();
+ AllDisabledFlagsVisitor visitor;
+ preBaklavaVersion->root->Accept(&visitor);
+ docs.push_back(std::move(preBaklavaVersion));
+
+ if (visitor.HadFlags()) {
+ auto baklavaVersion = doc->Clone();
+ baklavaVersion->file.config.sdkVersion = SDK_BAKLAVA;
+ docs.push_back(std::move(baklavaVersion));
+ }
+ }
+ return docs;
+}
+
+} // namespace aapt
\ No newline at end of file
diff --git a/tools/aapt2/link/FlaggedXmlVersioner.h b/tools/aapt2/link/FlaggedXmlVersioner.h
new file mode 100644
index 0000000..44ed266
--- /dev/null
+++ b/tools/aapt2/link/FlaggedXmlVersioner.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2025 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.
+ */
+
+#pragma once
+
+#include <memory>
+#include <vector>
+
+#include "process/IResourceTableConsumer.h"
+#include "xml/XmlDom.h"
+
+namespace aapt {
+
+// FlaggedXmlVersioner takes an XmlResource and checks if any elements have read write android
+// flags on them. If the doc doesn't refer to any such flags the returned vector only contains
+// the original doc.
+//
+// Read/write flags within xml resources files is only supported in android baklava and later. If
+// the config resource specifies a version that is baklava or later it returns a vector containing
+// the original XmlResource. Otherwise FlaggedXmlVersioner creates a version of the doc where all
+// flags are assumed disabled and the config version is the same as the original doc, if specified.
+// It also creates an XmlResource where the contents are the same as the original doc and the config
+// version is baklava. The returned vector is composed of these two new docs.
+class FlaggedXmlVersioner {
+ public:
+ std::vector<std::unique_ptr<xml::XmlResource>> Process(IAaptContext* context,
+ xml::XmlResource* doc);
+};
+} // namespace aapt
\ No newline at end of file
diff --git a/tools/aapt2/link/FlaggedXmlVersioner_test.cpp b/tools/aapt2/link/FlaggedXmlVersioner_test.cpp
new file mode 100644
index 0000000..0c1314f
--- /dev/null
+++ b/tools/aapt2/link/FlaggedXmlVersioner_test.cpp
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+
+#include "link/FlaggedXmlVersioner.h"
+
+#include "Debug.h"
+#include "SdkConstants.h"
+#include "io/StringStream.h"
+#include "test/Test.h"
+
+using ::aapt::test::ValueEq;
+using ::testing::Eq;
+using ::testing::IsNull;
+using ::testing::NotNull;
+using ::testing::Pointee;
+using ::testing::SizeIs;
+
+namespace aapt {
+
+class FlaggedXmlVersionerTest : public ::testing::Test {
+ public:
+ void SetUp() override {
+ context_ = test::ContextBuilder()
+ .SetCompilationPackage("com.app")
+ .SetPackageId(0x7f)
+ .SetPackageType(PackageType::kApp)
+ .Build();
+ }
+
+ protected:
+ std::unique_ptr<IAaptContext> context_;
+};
+
+static void PrintDocToString(xml::XmlResource* doc, std::string* out) {
+ io::StringOutputStream stream(out, 1024u);
+ text::Printer printer(&stream);
+ Debug::DumpXml(*doc, &printer);
+ stream.Flush();
+}
+
+TEST_F(FlaggedXmlVersionerTest, NoFlagReturnsOriginal) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView />
+ <TextView />
+ <TextView />
+ </LinearLayout>)");
+ doc->file.config.sdkVersion = SDK_GINGERBREAD;
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(1));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(SDK_GINGERBREAD));
+
+ std::string expected;
+ PrintDocToString(doc.get(), &expected);
+ std::string actual;
+ PrintDocToString(results[0].get(), &actual);
+
+ EXPECT_THAT(actual, Eq(expected));
+}
+
+TEST_F(FlaggedXmlVersionerTest, AlreadyBaklavaReturnsOriginal) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView android:featureFlag="package.flag" />
+ <TextView />
+ <TextView />
+ </LinearLayout>)");
+ doc->file.config.sdkVersion = SDK_BAKLAVA;
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(1));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(SDK_BAKLAVA));
+
+ std::string expected;
+ PrintDocToString(doc.get(), &expected);
+ std::string actual;
+ PrintDocToString(results[0].get(), &actual);
+
+ EXPECT_THAT(actual, Eq(expected));
+}
+
+TEST_F(FlaggedXmlVersionerTest, PreBaklavaGetsSplit) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView android:featureFlag="package.flag" /><TextView /><TextView />
+ </LinearLayout>)");
+ doc->file.config.sdkVersion = SDK_GINGERBREAD;
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(2));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(SDK_GINGERBREAD));
+ EXPECT_THAT(results[1]->file.config.sdkVersion, Eq(SDK_BAKLAVA));
+
+ auto gingerbread_doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView /><TextView />
+ </LinearLayout>)");
+
+ std::string expected0;
+ PrintDocToString(gingerbread_doc.get(), &expected0);
+ std::string actual0;
+ PrintDocToString(results[0].get(), &actual0);
+ EXPECT_THAT(actual0, Eq(expected0));
+
+ std::string expected1;
+ PrintDocToString(doc.get(), &expected1);
+ std::string actual1;
+ PrintDocToString(results[1].get(), &actual1);
+ EXPECT_THAT(actual1, Eq(expected1));
+}
+
+TEST_F(FlaggedXmlVersionerTest, NoVersionGetsSplit) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView android:featureFlag="package.flag" /><TextView /><TextView />
+ </LinearLayout>)");
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(2));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(0));
+ EXPECT_THAT(results[1]->file.config.sdkVersion, Eq(SDK_BAKLAVA));
+
+ auto gingerbread_doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView /><TextView />
+ </LinearLayout>)");
+
+ std::string expected0;
+ PrintDocToString(gingerbread_doc.get(), &expected0);
+ std::string actual0;
+ PrintDocToString(results[0].get(), &actual0);
+ EXPECT_THAT(actual0, Eq(expected0));
+
+ std::string expected1;
+ PrintDocToString(doc.get(), &expected1);
+ std::string actual1;
+ PrintDocToString(results[1].get(), &actual1);
+ EXPECT_THAT(actual1, Eq(expected1));
+}
+
+TEST_F(FlaggedXmlVersionerTest, NegatedFlagAttributeRemoved) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView android:featureFlag="!package.flag" /><TextView /><TextView />
+ </LinearLayout>)");
+ doc->file.config.sdkVersion = SDK_GINGERBREAD;
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(2));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(SDK_GINGERBREAD));
+ EXPECT_THAT(results[1]->file.config.sdkVersion, Eq(SDK_BAKLAVA));
+
+ auto gingerbread_doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView /><TextView /><TextView />
+ </LinearLayout>)");
+
+ std::string expected0;
+ PrintDocToString(gingerbread_doc.get(), &expected0);
+ std::string actual0;
+ PrintDocToString(results[0].get(), &actual0);
+ EXPECT_THAT(actual0, Eq(expected0));
+
+ std::string expected1;
+ PrintDocToString(doc.get(), &expected1);
+ std::string actual1;
+ PrintDocToString(results[1].get(), &actual1);
+ EXPECT_THAT(actual1, Eq(expected1));
+}
+
+TEST_F(FlaggedXmlVersionerTest, NegatedFlagAttributeRemovedNoSpecifiedVersion) {
+ auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView android:featureFlag="!package.flag" /><TextView /><TextView />
+ </LinearLayout>)");
+
+ FlaggedXmlVersioner versioner;
+ auto results = versioner.Process(context_.get(), doc.get());
+ EXPECT_THAT(results.size(), Eq(2));
+ EXPECT_THAT(results[0]->file.config.sdkVersion, Eq(0));
+ EXPECT_THAT(results[1]->file.config.sdkVersion, Eq(SDK_BAKLAVA));
+
+ auto gingerbread_doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView /><TextView /><TextView />
+ </LinearLayout>)");
+
+ std::string expected0;
+ PrintDocToString(gingerbread_doc.get(), &expected0);
+ std::string actual0;
+ PrintDocToString(results[0].get(), &actual0);
+ EXPECT_THAT(actual0, Eq(expected0));
+
+ std::string expected1;
+ PrintDocToString(doc.get(), &expected1);
+ std::string actual1;
+ PrintDocToString(results[1].get(), &actual1);
+ EXPECT_THAT(actual1, Eq(expected1));
+}
+
+} // namespace aapt
\ No newline at end of file
diff --git a/tools/aapt2/xml/XmlUtil.h b/tools/aapt2/xml/XmlUtil.h
index ad676ca..789f6a0 100644
--- a/tools/aapt2/xml/XmlUtil.h
+++ b/tools/aapt2/xml/XmlUtil.h
@@ -30,6 +30,7 @@
constexpr const char* kSchemaAndroid = "http://schemas.android.com/apk/res/android";
constexpr const char* kSchemaTools = "http://schemas.android.com/tools";
constexpr const char* kSchemaAapt = "http://schemas.android.com/aapt";
+constexpr const char* kAttrFeatureFlag = "featureFlag";
// Result of extracting a package name from a namespace URI declaration.
struct ExtractedPackage {
diff --git a/tools/hiddenapi/OWNERS b/tools/hiddenapi/OWNERS
index dc82aac..d1e36b9 100644
--- a/tools/hiddenapi/OWNERS
+++ b/tools/hiddenapi/OWNERS
@@ -1,6 +1,5 @@
# compat-team@ for changes to hiddenapi files
mathewi@google.com
-satayev@google.com
# soong-team@ as the files these tools protect are tightly coupled with Soong
file:platform/build/soong:/OWNERS
diff --git a/tools/lint/OWNERS b/tools/lint/OWNERS
index 8e4569e..4035e19 100644
--- a/tools/lint/OWNERS
+++ b/tools/lint/OWNERS
@@ -1,6 +1,5 @@
mattgilbride@google.com
azharaa@google.com
-jsharkey@google.com
per-file *CallingSettingsNonUserGetterMethods* = file:/packages/SettingsProvider/OWNERS
per-file *RegisterReceiverFlagDetector* = jacobhobbie@google.com
diff --git a/tools/processors/view_inspector/OWNERS b/tools/processors/view_inspector/OWNERS
index 0473f54..38d21e1 100644
--- a/tools/processors/view_inspector/OWNERS
+++ b/tools/processors/view_inspector/OWNERS
@@ -1,3 +1,2 @@
alanv@google.com
-ashleyrose@google.com
-aurimas@google.com
\ No newline at end of file
+aurimas@google.com
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/OWNERS b/wifi/java/src/android/net/wifi/sharedconnectivity/OWNERS
index 2a4acc1..abb9aa4 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/OWNERS
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 1216021
asapperstein@google.com
-etancohen@google.com