Merge "If android version is different & app has SAW, auto-grant bubbles" 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/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..3da5a5c 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -16993,7 +16993,7 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(String);
- method @FlaggedApi("com.android.text.flags.typeface_redesign_readonly") public boolean setFontVariationOverride(@Nullable String);
+ method @FlaggedApi("com.android.text.flags.typeface_redesign_readonly") public void setFontVariationOverride(@Nullable String);
method public boolean setFontVariationSettings(String);
method public void setHinting(int);
method public void setLetterSpacing(float);
@@ -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
@@ -23332,12 +23332,12 @@
public static final class MediaCodecInfo.CodecCapabilities {
ctor public MediaCodecInfo.CodecCapabilities();
method public static android.media.MediaCodecInfo.CodecCapabilities createFromProfileLevel(String, int, int);
- method public android.media.MediaCodecInfo.AudioCapabilities getAudioCapabilities();
+ method @Nullable public android.media.MediaCodecInfo.AudioCapabilities getAudioCapabilities();
method public android.media.MediaFormat getDefaultFormat();
- method public android.media.MediaCodecInfo.EncoderCapabilities getEncoderCapabilities();
+ method @Nullable public android.media.MediaCodecInfo.EncoderCapabilities getEncoderCapabilities();
method public int getMaxSupportedInstances();
method public String getMimeType();
- method public android.media.MediaCodecInfo.VideoCapabilities getVideoCapabilities();
+ method @Nullable public android.media.MediaCodecInfo.VideoCapabilities getVideoCapabilities();
method public boolean isFeatureRequired(String);
method public boolean isFeatureSupported(String);
method public boolean isFormatSupported(android.media.MediaFormat);
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 514a582..00ec48b 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -2128,6 +2128,12 @@
method public android.media.PlaybackParams setAudioStretchMode(int);
}
+ public class Utils {
+ ctor public Utils();
+ field public static final String SYNCHRONIZED_VIBRATION = "synchronized";
+ field public static final String VIBRATION_URI_PARAM = "vibration_uri";
+ }
+
public final class VolumePolicy implements android.os.Parcelable {
ctor public VolumePolicy(boolean, boolean, boolean, int);
method public int describeContents();
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 69d3e8d..f9ec214 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -550,35 +550,35 @@
public static final int START_ASSISTANT_NOT_ACTIVE_SESSION = FIRST_START_FATAL_ERROR_CODE + 11;
/**
- * Result for IActivityManaqer.startActivity: the activity was started
+ * Result for IActivityManager.startActivity: the activity was started
* successfully as normal.
* @hide
*/
public static final int START_SUCCESS = FIRST_START_SUCCESS_CODE;
/**
- * Result for IActivityManaqer.startActivity: the caller asked that the Intent not
+ * Result for IActivityManager.startActivity: the caller asked that the Intent not
* be executed if it is the recipient, and that is indeed the case.
* @hide
*/
public static final int START_RETURN_INTENT_TO_CALLER = FIRST_START_SUCCESS_CODE + 1;
/**
- * Result for IActivityManaqer.startActivity: activity was started or brought forward in an
+ * Result for IActivityManager.startActivity: activity was started or brought forward in an
* existing task which was brought to the foreground.
* @hide
*/
public static final int START_TASK_TO_FRONT = FIRST_START_SUCCESS_CODE + 2;
/**
- * Result for IActivityManaqer.startActivity: activity wasn't really started, but
+ * Result for IActivityManager.startActivity: activity wasn't really started, but
* the given Intent was given to the existing top activity.
* @hide
*/
public static final int START_DELIVERED_TO_TOP = FIRST_START_SUCCESS_CODE + 3;
/**
- * Result for IActivityManaqer.startActivity: request was canceled because
+ * Result for IActivityManager.startActivity: request was canceled because
* app switches are temporarily canceled to ensure the user's last request
* (such as pressing home) is performed.
* @hide
@@ -586,7 +586,7 @@
public static final int START_SWITCHES_CANCELED = FIRST_START_NON_FATAL_ERROR_CODE;
/**
- * Result for IActivityManaqer.startActivity: a new activity was attempted to be started
+ * Result for IActivityManager.startActivity: a new activity was attempted to be started
* while in Lock Task Mode.
* @hide
*/
@@ -594,55 +594,55 @@
FIRST_START_NON_FATAL_ERROR_CODE + 1;
/**
- * Result for IActivityManaqer.startActivity: a new activity start was aborted. Never returned
+ * Result for IActivityManager.startActivity: a new activity start was aborted. Never returned
* externally.
* @hide
*/
public static final int START_ABORTED = FIRST_START_NON_FATAL_ERROR_CODE + 2;
/**
- * Flag for IActivityManaqer.startActivity: do special start mode where
+ * Flag for IActivityManager.startActivity: do special start mode where
* a new activity is launched only if it is needed.
* @hide
*/
public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0;
/**
- * Flag for IActivityManaqer.startActivity: launch the app for
+ * Flag for IActivityManager.startActivity: launch the app for
* debugging.
* @hide
*/
public static final int START_FLAG_DEBUG = 1<<1;
/**
- * Flag for IActivityManaqer.startActivity: launch the app for
+ * Flag for IActivityManager.startActivity: launch the app for
* allocation tracking.
* @hide
*/
public static final int START_FLAG_TRACK_ALLOCATION = 1<<2;
/**
- * Flag for IActivityManaqer.startActivity: launch the app with
+ * Flag for IActivityManager.startActivity: launch the app with
* native debugging support.
* @hide
*/
public static final int START_FLAG_NATIVE_DEBUGGING = 1<<3;
/**
- * Flag for IActivityManaqer.startActivity: launch the app for
+ * Flag for IActivityManager.startActivity: launch the app for
* debugging and suspend threads.
* @hide
*/
public static final int START_FLAG_DEBUG_SUSPEND = 1 << 4;
/**
- * Result for IActivityManaqer.broadcastIntent: success!
+ * Result for IActivityManager.broadcastIntent: success!
* @hide
*/
public static final int BROADCAST_SUCCESS = 0;
/**
- * Result for IActivityManaqer.broadcastIntent: attempt to broadcast
+ * Result for IActivityManager.broadcastIntent: attempt to broadcast
* a sticky intent without appropriate permission.
* @hide
*/
@@ -656,20 +656,20 @@
public static final int BROADCAST_FAILED_USER_STOPPED = -2;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent type is unknown.
+ * Type for IActivityManager.getIntentSender: this PendingIntent type is unknown.
* @hide
*/
public static final int INTENT_SENDER_UNKNOWN = 0;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * Type for IActivityManager.getIntentSender: this PendingIntent is
* for a sendBroadcast operation.
* @hide
*/
public static final int INTENT_SENDER_BROADCAST = 1;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * Type for IActivityManager.getIntentSender: this PendingIntent is
* for a startActivity operation.
* @hide
*/
@@ -677,21 +677,21 @@
public static final int INTENT_SENDER_ACTIVITY = 2;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * Type for IActivityManager.getIntentSender: this PendingIntent is
* for an activity result operation.
* @hide
*/
public static final int INTENT_SENDER_ACTIVITY_RESULT = 3;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * Type for IActivityManager.getIntentSender: this PendingIntent is
* for a startService operation.
* @hide
*/
public static final int INTENT_SENDER_SERVICE = 4;
/**
- * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * Type for IActivityManager.getIntentSender: this PendingIntent is
* for a startForegroundService operation.
* @hide
*/
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index b8c20bd..cc37456 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -488,6 +488,8 @@
private static final String KEY_ALLOW_PASS_THROUGH_ON_TOUCH_OUTSIDE =
"android.activity.allowPassThroughOnTouchOutside";
+ private static final String KEY_FLEXIBLE_LAUNCH_SIZE = "android.activity.flexibleLaunchSize";
+
/**
* @see #setLaunchCookie
* @hide
@@ -588,6 +590,7 @@
@BackgroundActivityStartMode
private int mPendingIntentCreatorBackgroundActivityStartMode =
MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
+ private boolean mFlexibleLaunchSize = false;
private boolean mDisableStartingWindow;
private boolean mAllowPassThroughOnTouchOutside;
@@ -1451,6 +1454,7 @@
mPendingIntentCreatorBackgroundActivityStartMode = opts.getInt(
KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE,
MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED);
+ mFlexibleLaunchSize = opts.getBoolean(KEY_FLEXIBLE_LAUNCH_SIZE, /* defaultValue = */ false);
mDisableStartingWindow = opts.getBoolean(KEY_DISABLE_STARTING_WINDOW);
mAllowPassThroughOnTouchOutside = opts.getBoolean(KEY_ALLOW_PASS_THROUGH_ON_TOUCH_OUTSIDE);
mAnimationAbortListener = IRemoteCallback.Stub.asInterface(
@@ -2346,6 +2350,24 @@
}
/**
+ * Sets whether the size of the launch bounds is flexible, meaning it can be overridden to a
+ * different size during the launch params calculation.
+ * @hide
+ */
+ public ActivityOptions setFlexibleLaunchSize(boolean isFlexible) {
+ mFlexibleLaunchSize = isFlexible;
+ return this;
+ }
+
+ /**
+ * Gets whether the size of the launch bounds is flexible.
+ * @hide
+ */
+ public boolean getFlexibleLaunchSize() {
+ return mFlexibleLaunchSize;
+ }
+
+ /**
* Update the current values in this ActivityOptions from those supplied
* in <var>otherOptions</var>. Any values
* defined in <var>otherOptions</var> replace those in the base options.
@@ -2601,6 +2623,9 @@
b.putInt(KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE,
mPendingIntentCreatorBackgroundActivityStartMode);
}
+ if (mFlexibleLaunchSize) {
+ b.putBoolean(KEY_FLEXIBLE_LAUNCH_SIZE, mFlexibleLaunchSize);
+ }
if (mDisableStartingWindow) {
b.putBoolean(KEY_DISABLE_STARTING_WINDOW, mDisableStartingWindow);
}
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 1a6e9b0..dc5974f 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -22,14 +22,12 @@
import static android.permission.flags.Flags.shouldRegisterAttributionSource;
import static android.view.WindowManager.LayoutParams.WindowType;
-import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.UiContext;
-import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.AttributionSource;
@@ -2367,47 +2365,11 @@
Log.v(TAG, "Treating renounced permission " + permission + " as denied");
return PERMISSION_DENIED;
}
- int deviceId = resolveDeviceIdForPermissionCheck(permission);
+ int deviceId = PermissionManager.resolveDeviceIdForPermissionCheck(this, getDeviceId(),
+ permission);
return PermissionManager.checkPermission(permission, pid, uid, deviceId);
}
- private int resolveDeviceIdForPermissionCheck(String permission) {
- // When checking a device-aware permission on a remote device, if the permission is CAMERA
- // or RECORD_AUDIO we need to check remote device's corresponding capability. If the remote
- // device doesn't have capability fall back to checking permission on the default device.
- // Note: we only perform permission check redirection when the device id is not explicitly
- // set in the context.
- int deviceId = getDeviceId();
- if (deviceId != Context.DEVICE_ID_DEFAULT
- && !mIsExplicitDeviceId
- && PermissionManager.DEVICE_AWARE_PERMISSIONS.contains(permission)) {
- VirtualDeviceManager virtualDeviceManager =
- getSystemService(VirtualDeviceManager.class);
- if (virtualDeviceManager == null) {
- Slog.e(
- TAG,
- "VDM is not enabled when device id is not default. deviceId = "
- + deviceId);
- } else {
- VirtualDevice virtualDevice = virtualDeviceManager.getVirtualDevice(deviceId);
- if (virtualDevice != null) {
- if ((Objects.equals(permission, Manifest.permission.RECORD_AUDIO)
- && !virtualDevice.hasCustomAudioInputSupport())
- || (Objects.equals(permission, Manifest.permission.CAMERA)
- && !virtualDevice.hasCustomCameraSupport())) {
- deviceId = Context.DEVICE_ID_DEFAULT;
- }
- } else {
- Slog.e(
- TAG,
- "virtualDevice is not found when device id is not default. deviceId = "
- + deviceId);
- }
- }
- }
- return deviceId;
- }
-
/** @hide */
@Override
public int checkPermission(String permission, int pid, int uid, IBinder callerToken) {
@@ -2511,7 +2473,8 @@
@Override
public int getPermissionRequestState(String permission) {
Objects.requireNonNull(permission, "Permission name can't be null");
- int deviceId = resolveDeviceIdForPermissionCheck(permission);
+ int deviceId = PermissionManager.resolveDeviceIdForPermissionCheck(this, getDeviceId(),
+ permission);
PermissionManager permissionManager = getSystemService(PermissionManager.class);
return permissionManager.getPermissionRequestState(getOpPackageName(), permission,
deviceId);
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/Notification.java b/core/java/android/app/Notification.java
index 1b71e73..cc72d8f 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -9526,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(
diff --git a/core/java/android/app/PropertyInvalidatedCache.java b/core/java/android/app/PropertyInvalidatedCache.java
index c573161..38141cf 100644
--- a/core/java/android/app/PropertyInvalidatedCache.java
+++ b/core/java/android/app/PropertyInvalidatedCache.java
@@ -293,6 +293,7 @@
// The test mode. This is only used to ensure that the test functions setTestMode() and
// testPropertyName() are used correctly.
+ @GuardedBy("sGlobalLock")
private static boolean sTestMode = false;
/**
@@ -668,7 +669,7 @@
// True if this handler is in test mode. If it is in test mode, then nonces are stored
// and retrieved from mTestNonce.
@GuardedBy("mLock")
- private boolean mTestMode = false;
+ private boolean mTestMode;
// This is the local value of the nonce, as last set by the NonceHandler. It is always
// updated by the setNonce() operation. The getNonce() operation returns this value in
@@ -692,6 +693,9 @@
NonceHandler(@NonNull String name) {
mName = name;
+ synchronized (sGlobalLock) {
+ mTestMode = sTestMode;
+ }
}
/**
@@ -1414,9 +1418,13 @@
/**
* Enable or disable testing. The protocol requires that the mode toggle: for instance, it is
- * illegal to clear the test mode if the test mode is already off. The purpose is solely to
- * ensure that test clients do not forget to use the test mode properly, even though the
- * current logic does not care.
+ * illegal to clear the test mode if the test mode is already off. Enabling test mode puts
+ * all caches in the process into test mode; all nonces are initialized to UNSET and
+ * subsequent reads and writes are to process memory. This has the effect of disabling all
+ * caches that are not local to the process. Disabling test mode restores caches to normal
+ * operation.
+ * @param mode The desired test mode.
+ * @throws IllegalStateException if the supplied mode is already set.
* @hide
*/
@VisibleForTesting
@@ -1431,10 +1439,8 @@
}
}
sTestMode = mode;
- if (mode) {
- // No action when testing begins.
- } else {
- resetAfterTestLocked();
+ if (Flags.picTestMode() || !mode) {
+ setTestModeLocked(mode);
}
}
}
@@ -1445,11 +1451,11 @@
* that were not originally in test mode.
*/
@GuardedBy("sGlobalLock")
- private static void resetAfterTestLocked() {
+ private static void setTestModeLocked(boolean mode) {
for (Iterator<String> e = sHandlers.keys().asIterator(); e.hasNext(); ) {
String s = e.next();
final NonceHandler h = sHandlers.get(s);
- h.setTestMode(false);
+ h.setTestMode(mode);
}
}
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/admin/PolicyUpdateReceiver.java b/core/java/android/app/admin/PolicyUpdateReceiver.java
index be13988..630ab0e 100644
--- a/core/java/android/app/admin/PolicyUpdateReceiver.java
+++ b/core/java/android/app/admin/PolicyUpdateReceiver.java
@@ -20,10 +20,12 @@
import android.annotation.NonNull;
import android.annotation.SdkConstant;
import android.annotation.TestApi;
+import android.app.admin.flags.Flags;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.Log;
import java.util.Objects;
@@ -46,6 +48,10 @@
public abstract class PolicyUpdateReceiver extends BroadcastReceiver {
private static String TAG = "PolicyUpdateReceiver";
+ //TODO(b/378931989): Switch to android.app.admin.DevicePolicyIdentifiers.MEMORY_TAGGING_POLICY
+ //when the appropriate flag is launched.
+ private static final String MEMORY_TAGGING_POLICY = "memoryTagging";
+
/**
* Action for a broadcast sent to admins to communicate back the result of setting a policy in
* {@link DevicePolicyManager}.
@@ -156,15 +162,28 @@
@Override
public final void onReceive(Context context, Intent intent) {
Objects.requireNonNull(intent.getAction());
+ String policyKey;
switch (intent.getAction()) {
case ACTION_DEVICE_POLICY_SET_RESULT:
Log.i(TAG, "Received ACTION_DEVICE_POLICY_SET_RESULT");
- onPolicySetResult(context, getPolicyKey(intent), getPolicyExtraBundle(intent),
+ policyKey = getPolicyKey(intent);
+ if (!shouldPropagatePolicy(policyKey)) {
+ Log.d(TAG, TextUtils.formatSimple(
+ "Skipping propagation of policy %s", policyKey));
+ break;
+ }
+ onPolicySetResult(context, policyKey, getPolicyExtraBundle(intent),
getTargetUser(intent), getPolicyChangedReason(intent));
break;
case ACTION_DEVICE_POLICY_CHANGED:
Log.i(TAG, "Received ACTION_DEVICE_POLICY_CHANGED");
- onPolicyChanged(context, getPolicyKey(intent), getPolicyExtraBundle(intent),
+ policyKey = getPolicyKey(intent);
+ if (!shouldPropagatePolicy(policyKey)) {
+ Log.d(TAG, TextUtils.formatSimple(
+ "Skipping propagation of policy %s", policyKey));
+ break;
+ }
+ onPolicyChanged(context, policyKey, getPolicyExtraBundle(intent),
getTargetUser(intent), getPolicyChangedReason(intent));
break;
default:
@@ -217,6 +236,14 @@
return new TargetUser(targetUserId);
}
+ /**
+ * @hide
+ */
+ private boolean shouldPropagatePolicy(String policyKey) {
+ return !MEMORY_TAGGING_POLICY.equals(policyKey) || Flags.setMtePolicyCoexistence();
+ }
+
+
// TODO(b/260847505): Add javadocs to explain which DPM APIs are supported
/**
* Callback triggered after an admin has set a policy using one of the APIs in
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/performance.aconfig b/core/java/android/app/performance.aconfig
index 2569f7b..82875eb 100644
--- a/core/java/android/app/performance.aconfig
+++ b/core/java/android/app/performance.aconfig
@@ -50,3 +50,10 @@
description: "Cache null returns from binder calls"
bug: "372923336"
}
+
+flag {
+ namespace: "system_performance"
+ name: "pic_test_mode"
+ description: "Updated test mode for PIC"
+ bug: "396173886"
+}
diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java
index 6e3e86c..e726bc9 100644
--- a/core/java/android/app/servertransaction/ClientTransaction.java
+++ b/core/java/android/app/servertransaction/ClientTransaction.java
@@ -236,9 +236,17 @@
* 2. The transaction message is scheduled.
* 3. The client calls {@link TransactionExecutor#execute(ClientTransaction)}, which executes
* all callbacks and necessary lifecycle transitions.
+ *
+ * @return {@link RemoteException} if the transaction failed.
*/
- public void schedule() throws RemoteException {
- mClient.scheduleTransaction(this);
+ @Nullable
+ public RemoteException schedule() {
+ try {
+ mClient.scheduleTransaction(this);
+ return null;
+ } catch (RemoteException e) {
+ return e;
+ }
}
// Parcelable implementation
diff --git a/core/java/android/app/supervision/SupervisionManager.java b/core/java/android/app/supervision/SupervisionManager.java
index 0270edf..8217ca1 100644
--- a/core/java/android/app/supervision/SupervisionManager.java
+++ b/core/java/android/app/supervision/SupervisionManager.java
@@ -97,7 +97,7 @@
*
* @hide
*/
- @RequiresPermission(value = android.Manifest.permission.QUERY_USERS)
+ @RequiresPermission(anyOf = {MANAGE_USERS, QUERY_USERS})
@Nullable
public Intent createConfirmSupervisionCredentialsIntent() {
if (mService != null) {
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/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/flags.aconfig b/core/java/android/content/pm/flags.aconfig
index 255a08c..42bef0e 100644
--- a/core/java/android/content/pm/flags.aconfig
+++ b/core/java/android/content/pm/flags.aconfig
@@ -400,3 +400,11 @@
bug: "378539511"
is_fixed_read_only: true
}
+
+flag {
+ name: "cloud_compilation_verification"
+ namespace: "art_mainline"
+ description: "Feature flag to enable the Cloud Compilation install-time verification in the package manager."
+ bug: "377474232"
+ is_fixed_read_only: true
+}
diff --git a/core/java/android/content/pm/parsing/OWNERS b/core/java/android/content/pm/parsing/OWNERS
index 8049d5c..b8fa1a9 100644
--- a/core/java/android/content/pm/parsing/OWNERS
+++ b/core/java/android/content/pm/parsing/OWNERS
@@ -1,5 +1,3 @@
# Bug component: 36137
-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/gesture/OWNERS b/core/java/android/gesture/OWNERS
index 168630a..ffa753a 100644
--- a/core/java/android/gesture/OWNERS
+++ b/core/java/android/gesture/OWNERS
@@ -3,5 +3,4 @@
romainguy@google.com
adamp@google.com
aurimas@google.com
-nduca@google.com
sumir@google.com
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/metrics/OWNERS b/core/java/android/metrics/OWNERS
index ba867e0..98aaf3f 100644
--- a/core/java/android/metrics/OWNERS
+++ b/core/java/android/metrics/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 26805
cwren@android.com
-cwren@google.com
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/IpcDataCache.java b/core/java/android/os/IpcDataCache.java
index 240bc4f..2e7c3be 100644
--- a/core/java/android/os/IpcDataCache.java
+++ b/core/java/android/os/IpcDataCache.java
@@ -719,9 +719,13 @@
/**
* Enable or disable testing. The protocol requires that the mode toggle: for instance, it is
- * illegal to clear the test mode if the test mode is already off. The purpose is solely to
- * ensure that test clients do not forget to use the test mode properly, even though the
- * current logic does not care.
+ * illegal to clear the test mode if the test mode is already off. Enabling test mode puts
+ * all caches in the process into test mode; all nonces are initialized to UNSET and
+ * subsequent reads and writes are to process memory. This has the effect of disabling all
+ * caches that are not local to the process. Disabling test mode restores caches to normal
+ * operation.
+ * @param mode The desired test mode.
+ * @throws IllegalStateException if the supplied mode is already set.
* @hide
*/
@TestApi
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..8a3a5be 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();
@@ -216,9 +214,6 @@
* Initialize the builder for a new trace event.
*/
public Builder init(int traceType, PerfettoTrace.Category category) {
- if (!category.isEnabled()) {
- return this;
- }
mTraceType = traceType;
mCategory = category;
mEventName = "";
@@ -227,11 +222,10 @@
mFieldStringCache.reset();
mFieldNestedCache.reset();
mBuilderCache.reset();
- mFlowCache.reset();
mExtra.reset();
// Reset after on init in case the thread created builders without calling emit
- return initInternal(this, null, true);
+ return initInternal(this, null, category.isEnabled());
}
/**
@@ -325,39 +319,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 +334,7 @@
/**
* Adds a terminating flow with {@code id}.
*/
- public Builder setTerminatingFlow(int id) {
+ public Builder setTerminatingFlow(long id) {
if (!mIsCategoryEnabled) {
return this;
}
@@ -670,7 +632,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/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index 5188204..561a2c9 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -16,6 +16,7 @@
package android.permission;
+import static android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE;
import static android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED;
@@ -2039,12 +2040,49 @@
new PackageNamePermissionQuery(permName, pkgName, persistentDeviceId, userId));
}
+ /**
+ * When checking a device-aware permission on a remote device, if the permission is CAMERA
+ * or RECORD_AUDIO we need to check remote device's corresponding capability. If the remote
+ * device doesn't have capability fall back to checking permission on the default device.
+ *
+ * @hide
+ */
+ public static int resolveDeviceIdForPermissionCheck(@NonNull Context context, int deviceId,
+ @Nullable String permission) {
+ if (deviceId == Context.DEVICE_ID_DEFAULT || !DEVICE_AWARE_PERMISSIONS.contains(
+ permission)) {
+ return Context.DEVICE_ID_DEFAULT;
+ }
+
+ VirtualDeviceManager virtualDeviceManager =
+ context.getSystemService(VirtualDeviceManager.class);
+ if (virtualDeviceManager == null) {
+ Slog.e(LOG_TAG, "VDM is not enabled when device id is not default. deviceId = "
+ + deviceId);
+ } else {
+ VirtualDevice virtualDevice = virtualDeviceManager.getVirtualDevice(deviceId);
+ if (virtualDevice != null) {
+ if ((Objects.equals(permission, Manifest.permission.RECORD_AUDIO)
+ && !virtualDevice.hasCustomAudioInputSupport())
+ || (Objects.equals(permission, Manifest.permission.CAMERA)
+ && !virtualDevice.hasCustomCameraSupport())) {
+ deviceId = Context.DEVICE_ID_DEFAULT;
+ }
+ } else {
+ Slog.e(LOG_TAG,
+ "virtualDevice is not found when device id is not default. deviceId = "
+ + deviceId);
+ }
+ }
+ return deviceId;
+ }
+
@Nullable
private String getPersistentDeviceId(int deviceId) {
String persistentDeviceId = null;
if (deviceId == Context.DEVICE_ID_DEFAULT) {
- persistentDeviceId = VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
+ persistentDeviceId = PERSISTENT_DEVICE_ID_DEFAULT;
} else {
VirtualDeviceManager virtualDeviceManager = mContext.getSystemService(
VirtualDeviceManager.class);
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/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 25e8a4d..3fd9418 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -749,6 +749,10 @@
getListView().clearChoices();
} else if (!WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(this)) {
super.onBackPressed();
+ } else if (!mIsBackCallbackRegistered) {
+ // If predictive back is enabled and no callback is registered, finish the activity.
+ // This ensures correct back navigation behaviour when onBackPressed is called manually.
+ finish();
}
updateBackCallbackRegistrationState();
}
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/provider/Settings.java b/core/java/android/provider/Settings.java
index 89f66c0..1210790 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9357,6 +9357,16 @@
"accessibility_autoclick_panel_position";
/**
+ * Setting that specifies whether autoclick type reverts to left click after performing
+ * an action when {@link #ACCESSIBILITY_AUTOCLICK_ENABLED} is set.
+ *
+ * @see #ACCESSIBILITY_AUTOCLICK_ENABLED
+ * @hide
+ */
+ public static final String ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK =
+ "accessibility_autoclick_revert_to_left_click";
+
+ /**
* Whether or not larger size icons are used for the pointer of mouse/trackpad for
* accessibility.
* (0 = false, 1 = true)
diff --git a/core/java/android/security/advancedprotection/AdvancedProtectionManager.java b/core/java/android/security/advancedprotection/AdvancedProtectionManager.java
index ea01fc9..770e234 100644
--- a/core/java/android/security/advancedprotection/AdvancedProtectionManager.java
+++ b/core/java/android/security/advancedprotection/AdvancedProtectionManager.java
@@ -16,7 +16,6 @@
package android.security.advancedprotection;
-import static android.app.admin.DevicePolicyIdentifiers.MEMORY_TAGGING_POLICY;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.os.UserManager.DISALLOW_CELLULAR_2G;
import static android.os.UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY;
@@ -59,6 +58,10 @@
public final class AdvancedProtectionManager {
private static final String TAG = "AdvancedProtectionMgr";
+ //TODO(b/378931989): Switch to android.app.admin.DevicePolicyIdentifiers.MEMORY_TAGGING_POLICY
+ //when the appropriate flag is launched.
+ private static final String MEMORY_TAGGING_POLICY = "memoryTagging";
+
/**
* Advanced Protection's identifier for setting policies or restrictions in
* {@link DevicePolicyManager}.
@@ -359,8 +362,7 @@
featureId = FEATURE_ID_DISALLOW_INSTALL_UNKNOWN_SOURCES;
} else if (DISALLOW_CELLULAR_2G.equals(identifier)) {
featureId = FEATURE_ID_DISALLOW_CELLULAR_2G;
- } else if (android.app.admin.flags.Flags.setMtePolicyCoexistence() && MEMORY_TAGGING_POLICY
- .equals(identifier)) {
+ } else if (MEMORY_TAGGING_POLICY.equals(identifier)) {
featureId = FEATURE_ID_ENABLE_MTE;
} else {
throw new UnsupportedOperationException("Unsupported identifier: " + identifier);
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/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 41a64e2..744cdf6 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -1323,14 +1323,13 @@
redrawNeeded ? 1 : 0));
return;
}
-
- final int transformHint = SurfaceControl.rotationToBufferTransform(
- (mDisplay.getInstallOrientation() + mDisplay.getRotation()) % 4);
- mSurfaceControl.setTransformHint(transformHint);
WindowLayout.computeSurfaceSize(mLayout, maxBounds, mWidth, mHeight,
mWinFrames.frame, false /* dragResizing */, mSurfaceSize);
if (mSurfaceControl.isValid()) {
+ final int transformHint = SurfaceControl.rotationToBufferTransform(
+ (mDisplay.getInstallOrientation() + mDisplay.getRotation()) % 4);
+ mSurfaceControl.setTransformHint(transformHint);
if (mBbqSurfaceControl == null) {
mBbqSurfaceControl = new SurfaceControl.Builder()
.setName("Wallpaper BBQ wrapper")
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/OWNERS b/core/java/android/view/OWNERS
index 80484a6..3353923 100644
--- a/core/java/android/view/OWNERS
+++ b/core/java/android/view/OWNERS
@@ -3,7 +3,6 @@
romainguy@google.com
adamp@google.com
aurimas@google.com
-nduca@google.com
sumir@google.com
ogunwale@google.com
jjaggi@google.com
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/View.java b/core/java/android/view/View.java
index c048d79..f50d77e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -34463,7 +34463,10 @@
*/
@FlaggedApi(android.app.jank.Flags.FLAG_DETAILED_APP_JANK_METRICS_API)
public void reportAppJankStats(@NonNull AppJankStats appJankStats) {
- getRootView().reportAppJankStats(appJankStats);
+ View rootView = getRootView();
+ if (rootView == this) return;
+
+ rootView.reportAppJankStats(appJankStats);
}
/**
@@ -34471,6 +34474,10 @@
* @hide
*/
public @Nullable JankTracker getJankTracker() {
- return getRootView().getJankTracker();
+ View rootView = getRootView();
+ if (rootView == this) {
+ return null;
+ }
+ return rootView.getJankTracker();
}
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7fd7be8..9d0773f 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -153,6 +153,7 @@
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ResourcesManager;
+import android.app.UiModeManager;
import android.app.WindowConfiguration;
import android.app.compat.CompatChanges;
import android.app.servertransaction.WindowStateTransactionItem;
@@ -196,6 +197,7 @@
import android.hardware.input.InputManagerGlobal;
import android.hardware.input.InputSettings;
import android.media.AudioManager;
+import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -472,8 +474,6 @@
@Nullable
private ContentObserver mForceInvertObserver;
- private static final int INVALID_VALUE = Integer.MIN_VALUE;
- private int mForceInvertEnabled = INVALID_VALUE;
/**
* Callback for notifying about global configuration changes.
*/
@@ -555,6 +555,8 @@
@UiContext
public final Context mContext;
+ private UiModeManager mUiModeManager;
+
@UnsupportedAppUsage
final IWindowSession mWindowSession;
@NonNull Display mDisplay;
@@ -1804,23 +1806,6 @@
}
}
- private boolean isForceInvertEnabled() {
- if (mForceInvertEnabled == INVALID_VALUE) {
- reloadForceInvertEnabled();
- }
- return mForceInvertEnabled == 1;
- }
-
- private void reloadForceInvertEnabled() {
- if (forceInvertColor()) {
- mForceInvertEnabled = Settings.Secure.getIntForUser(
- mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED,
- /* def= */ 0,
- UserHandle.myUserId());
- }
- }
-
/**
* Register any kind of listeners if setView was success.
*/
@@ -1856,17 +1841,22 @@
mForceInvertObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
- reloadForceInvertEnabled();
updateForceDarkMode();
}
};
- mContext.getContentResolver().registerContentObserver(
- Settings.Secure.getUriFor(
- Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED
- ),
- false,
- mForceInvertObserver,
- UserHandle.myUserId());
+
+ final Uri[] urisToObserve = {
+ Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED),
+ Settings.Secure.getUriFor(Settings.Secure.UI_NIGHT_MODE)
+ };
+ for (Uri uri : urisToObserve) {
+ mContext.getContentResolver().registerContentObserver(
+ uri,
+ false,
+ mForceInvertObserver,
+ UserHandle.myUserId());
+ }
}
}
}
@@ -2073,30 +2063,48 @@
return getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
}
- /** Returns true if force dark should be enabled according to various settings */
+ /**
+ * Determines the type of force dark to apply, considering force inversion, system night mode,
+ * and app-specific settings (including developer opt-outs).
+ *
+ * @return A {@link ForceDarkType.ForceDarkTypeDef} constant indicating the force dark type.
+ */
@VisibleForTesting
public @ForceDarkType.ForceDarkTypeDef int determineForceDarkType() {
- if (forceInvertColor()) {
- // Force invert ignores all developer opt-outs.
- // We also ignore dark theme, since the app developer can override the user's preference
- // for dark mode in configuration.uiMode. Instead, we assume that the force invert
- // setting will be enabled at the same time dark theme is in the Settings app.
- if (isForceInvertEnabled()) {
- return ForceDarkType.FORCE_INVERT_COLOR_DARK;
+ TypedArray a = mContext.obtainStyledAttributes(R.styleable.Theme);
+ try {
+ if (forceInvertColor()) {
+ // Force invert ignores all developer opt-outs.
+ // We also ignore dark theme, since the app developer can override the user's
+ // preference for dark mode in configuration.uiMode. Instead, we assume that both
+ // force invert and the system's dark theme are enabled.
+ if (getUiModeManager().getForceInvertState() ==
+ UiModeManager.FORCE_INVERT_TYPE_DARK) {
+ final boolean isLightTheme =
+ a.getBoolean(R.styleable.Theme_isLightTheme, false);
+ // TODO: b/372558459 - Also check the background ColorDrawable color lightness
+ // TODO: b/368725782 - Use hwui color area detection instead of / in
+ // addition to these heuristics.
+ if (isLightTheme) {
+ return ForceDarkType.FORCE_INVERT_COLOR_DARK;
+ } else {
+ return ForceDarkType.NONE;
+ }
+ }
}
- }
- boolean useAutoDark = getNightMode() == Configuration.UI_MODE_NIGHT_YES;
-
- if (useAutoDark) {
- boolean forceDarkAllowedDefault =
- SystemProperties.getBoolean(ThreadedRenderer.DEBUG_FORCE_DARK, false);
- TypedArray a = mContext.obtainStyledAttributes(R.styleable.Theme);
- useAutoDark = a.getBoolean(R.styleable.Theme_isLightTheme, true)
- && a.getBoolean(R.styleable.Theme_forceDarkAllowed, forceDarkAllowedDefault);
+ boolean useAutoDark = getNightMode() == Configuration.UI_MODE_NIGHT_YES;
+ if (useAutoDark) {
+ boolean forceDarkAllowedDefault =
+ SystemProperties.getBoolean(ThreadedRenderer.DEBUG_FORCE_DARK, false);
+ useAutoDark = a.getBoolean(R.styleable.Theme_isLightTheme, true)
+ && a.getBoolean(R.styleable.Theme_forceDarkAllowed,
+ forceDarkAllowedDefault);
+ }
+ return useAutoDark ? ForceDarkType.FORCE_DARK : ForceDarkType.NONE;
+ } finally {
a.recycle();
}
- return useAutoDark ? ForceDarkType.FORCE_DARK : ForceDarkType.NONE;
}
private void updateForceDarkMode() {
@@ -9401,6 +9409,13 @@
return mAudioManager;
}
+ private UiModeManager getUiModeManager() {
+ if (mUiModeManager == null) {
+ mUiModeManager = mContext.getSystemService(UiModeManager.class);
+ }
+ return mUiModeManager;
+ }
+
private Vibrator getSystemVibrator() {
if (mVibrator == null) {
mVibrator = mContext.getSystemService(Vibrator.class);
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 196ae5e..83dc79b 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -631,6 +631,12 @@
int TRANSIT_FLAG_AOD_APPEARING = (1 << 15); // 0x8000
/**
+ * Transition flag: Indicates that the task shouldn't move to front when launching the activity.
+ * @hide
+ */
+ int TRANSIT_FLAG_AVOID_MOVE_TO_FRONT = (1 << 16); // 0x10000
+
+ /**
* @hide
*/
@IntDef(flag = true, prefix = { "TRANSIT_FLAG_" }, value = {
@@ -650,6 +656,7 @@
TRANSIT_FLAG_KEYGUARD_UNOCCLUDING,
TRANSIT_FLAG_PHYSICAL_DISPLAY_SWITCH,
TRANSIT_FLAG_AOD_APPEARING,
+ TRANSIT_FLAG_AVOID_MOVE_TO_FRONT,
})
@Retention(RetentionPolicy.SOURCE)
@interface TransitionFlags {}
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index d267c94..e43fb48 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -163,6 +163,9 @@
/** @hide */
public static final boolean AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT_DEFAULT = false;
+ /** @hide */
+ public static final boolean AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT = true;
+
/**
* Activity action: Launch UI to manage which accessibility service or feature is assigned
* to the navigation bar Accessibility button.
diff --git a/core/java/android/view/inputmethod/flags.aconfig b/core/java/android/view/inputmethod/flags.aconfig
index c81c2bb..a4ea64e 100644
--- a/core/java/android/view/inputmethod/flags.aconfig
+++ b/core/java/android/view/inputmethod/flags.aconfig
@@ -203,3 +203,14 @@
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/inspector/OWNERS b/core/java/android/view/inspector/OWNERS
index 705f4b3..f345034 100644
--- a/core/java/android/view/inspector/OWNERS
+++ b/core/java/android/view/inspector/OWNERS
@@ -2,5 +2,4 @@
alanv@google.com
adamp@google.com
aurimas@google.com
-nduca@google.com
sumir@google.com
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/webkit/TEST_MAPPING b/core/java/android/webkit/TEST_MAPPING
index 3858059..c9b5476 100644
--- a/core/java/android/webkit/TEST_MAPPING
+++ b/core/java/android/webkit/TEST_MAPPING
@@ -17,15 +17,6 @@
"exclude-annotation": "android.test.FlakyTest"
}
]
- },
- {
- "name": "GtsWebViewHostTestCases",
- "keywords": ["internal"],
- "options": [
- {
- "exclude-annotation": "android.test.FlakyTest"
- }
- ]
}
]
}
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index 1baf3b8..c5e558f 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -531,8 +531,9 @@
* the chosen file(s). WebView can access all files that your app can access.
* In case the file(s) are chosen through an untrusted source such as a third-party
* app, it is your own app's responsibility to check what the returned Uris
- * refer to before calling the <code>filePathCallback</code>. See
- * {@link #createIntent} and {@link #parseResult} for more details.</p>
+ * refer to before calling the {@code filePathCallback}. See
+ * {@link FileChooserParams#createIntent} and {@link FileChooserParams#parseResult} for more
+ * details.
*
* @param webView The WebView instance that is initiating the request.
* @param filePathCallback Invoke this callback to supply the list of paths to files to upload,
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 14b208a..ab7a4f2 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1458,13 +1458,14 @@
public abstract void setNeedInitialFocus(boolean flag);
/**
- * Sets the priority of the Render thread. Unlike the other settings, this
+ * Sets the CPU scheduling priority of the Render thread. Unlike the other settings, this
* one only needs to be called once per process. The default value is
* {@link RenderPriority#NORMAL}.
*
* @param priority the priority
- * @deprecated It is not recommended to adjust thread priorities, and this will
- * not be supported in future versions.
+ * @deprecated This is no longer supported. See {@link WebView#setRendererPriorityPolicy} if you
+ * instead want to control how freely the system should kill the renderer process
+ * under low memory conditions.
*/
@Deprecated
public abstract void setRenderPriority(RenderPriority priority);
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index b666399..5e22c28 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2287,26 +2287,53 @@
public @interface RendererPriority {}
/**
- * The renderer associated with this WebView is bound with
- * {@link Context#BIND_WAIVE_PRIORITY}. At this priority level
- * {@link WebView} renderers will be strong targets for out of memory
- * killing.
+ * This is the lowest binding priority for the WebView renderer process. This is equivalent to
+ * {@link Context#BIND_WAIVE_PRIORITY}. At this priority level {@link WebView} renderers will be
+ * frequent targets for being killed when the system is running low on memory.
*
- * Use with {@link #setRendererPriorityPolicy}.
+ * <p>If using this priority, we recommend handling the {@link
+ * WebViewClient#onRenderProcessGone} callback to recover from low memory kills as well as other
+ * types of renderer crashes.
+ *
+ * @see #setRendererPriorityPolicy
+ * @see #getRendererPriorityPolicy
+ * @see RenderProcessGoneDetail#rendererPriorityAtExit
*/
public static final int RENDERER_PRIORITY_WAIVED = 0;
+
/**
- * The renderer associated with this WebView is bound with
- * the default priority for services.
+ * This is the medium binding priority for the WebView renderer process. This is equivalent to
+ * the standard priority used by the system for calls to {@link
+ * Context#bindService(Intent,android.content.ServiceConnection,int)} when no flags are
+ * provided. At this priority level {@link WebView} renderers will be slightly more likely
+ * targets for being killed when the system is running low on memory.
*
- * Use with {@link #setRendererPriorityPolicy}.
+ * <p>If using this priority, we recommend handling the {@link
+ * WebViewClient#onRenderProcessGone} callback to recover from low memory kills as well as other
+ * types of renderer crashes.
+ *
+ * @see #setRendererPriorityPolicy
+ * @see #getRendererPriorityPolicy
+ * @see RenderProcessGoneDetail#rendererPriorityAtExit
*/
public static final int RENDERER_PRIORITY_BOUND = 1;
+
/**
- * The renderer associated with this WebView is bound with
- * {@link Context#BIND_IMPORTANT}.
+ * This is the highest binding priority for the WebView renderer process, and the default value
+ * WebView uses to bind to the renderer process. This is equivalent to {@link
+ * Context#BIND_IMPORTANT}. At this priority level {@link WebView} renderers are less likely to
+ * be killed when the system is running low on memory and will have the same priority as your
+ * app's main process.
*
- * Use with {@link #setRendererPriorityPolicy}.
+ * <p>It's still possible for the renderer process to be killed when the system is running low
+ * on memory, however specifying this priority makes this situation less likely. It's also still
+ * possible for the renderer process to crash for other reasons. You may optionally still choose
+ * to handle {@link WebViewClient#onRenderProcessGone} in order to recover from a killed or
+ * crashed renderer process.
+ *
+ * @see #setRendererPriorityPolicy
+ * @see #getRendererPriorityPolicy
+ * @see RenderProcessGoneDetail#rendererPriorityAtExit
*/
public static final int RENDERER_PRIORITY_IMPORTANT = 2;
@@ -2316,7 +2343,7 @@
* process renderer should be considered to be a target for OOM
* killing.
*
- * Because a renderer can be associated with more than one
+ * <p>Because a renderer can be associated with more than one
* WebView, the final priority it is computed as the maximum of
* any attached WebViews. When a WebView is destroyed it will
* cease to be considerered when calculating the renderer
@@ -2324,7 +2351,7 @@
* the priority of the renderer will be reduced to
* {@link #RENDERER_PRIORITY_WAIVED}.
*
- * The default policy is to set the priority to
+ * <p>The default policy is to set the priority to
* {@link #RENDERER_PRIORITY_IMPORTANT} regardless of visibility,
* and this should not be changed unless the caller also handles
* renderer crashes with
@@ -2338,6 +2365,8 @@
* when this WebView is not visible, it will be treated as
* if it had requested a priority of
* {@link #RENDERER_PRIORITY_WAIVED}.
+ * @see #getRendererPriorityPolicy
+ * @see RenderProcessGoneDetail#rendererPriorityAtExit
*/
public void setRendererPriorityPolicy(
@RendererPriority int rendererRequestedPriority,
@@ -2349,6 +2378,8 @@
* Get the requested renderer priority for this WebView.
*
* @return the requested renderer priority policy.
+ * @see #setRendererPriorityPolicy
+ * @see RenderProcessGoneDetail#rendererPriorityAtExit
*/
@InspectableProperty(hasAttributeId = false, enumMapping = {
@InspectableProperty.EnumEntry(name = "waived", value = RENDERER_PRIORITY_WAIVED),
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 42bf6d1..1b8f73a 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),
@@ -59,6 +61,8 @@
ENABLE_DESKTOP_COMPAT_UI_VISIBILITY_STATUS(Flags::enableCompatUiVisibilityStatus, true),
ENABLE_DESKTOP_INDICATOR_IN_SEPARATE_THREAD_BUGFIX(
Flags::enableDesktopIndicatorInSeparateThreadBugfix, false),
+ ENABLE_DESKTOP_OPENING_DEEPLINK_MINIMIZE_ANIMATION_BUGFIX(
+ Flags::enableDesktopOpeningDeeplinkMinimizeAnimationBugfix, false),
ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX(
Flags::enableDesktopRecentsTransitionsCornersBugfix, false),
ENABLE_DESKTOP_SKIP_COMPAT_UI_EDUCATION_IN_DESKTOP_MODE_BUGFIX(
@@ -110,15 +114,20 @@
ENABLE_RESIZING_METRICS(Flags::enableResizingMetrics, true),
ENABLE_RESTORE_TO_PREVIOUS_SIZE_FROM_DESKTOP_IMMERSIVE(
Flags::enableRestoreToPreviousSizeFromDesktopImmersive, true),
+ ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX(
+ Flags::enableShellInitialBoundsRegressionBugFix, false),
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),
ENABLE_TILE_RESIZING(Flags::enableTileResizing, true),
ENABLE_TOP_VISIBLE_ROOT_TASK_PER_USER_TRACKING(Flags::enableTopVisibleRootTaskPerUserTracking,
true),
+ ENABLE_VISUAL_INDICATOR_IN_TRANSITION_BUGFIX(
+ Flags::enableVisualIndicatorInTransitionBugfix, false),
ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS(Flags::enableWindowingDynamicInitialBounds, true),
ENABLE_WINDOWING_EDGE_DRAG_RESIZE(Flags::enableWindowingEdgeDragResize, true),
ENABLE_WINDOWING_SCALED_RESIZING(Flags::enableWindowingScaledResizing, true),
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 63c55ad..be4edc3 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -29,6 +29,7 @@
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
+import static android.view.WindowManager.TRANSIT_FLAG_AOD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_NONE;
@@ -375,7 +376,8 @@
*/
public boolean hasChangesOrSideEffects() {
return !mChanges.isEmpty() || isKeyguardGoingAway()
- || (mFlags & TRANSIT_FLAG_KEYGUARD_APPEARING) != 0;
+ || (mFlags & TRANSIT_FLAG_KEYGUARD_APPEARING) != 0
+ || (mFlags & TRANSIT_FLAG_AOD_APPEARING) != 0;
}
/**
diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig
index 684f320..2f2a09a 100644
--- a/core/java/android/window/flags/lse_desktop_experience.aconfig
+++ b/core/java/android/window/flags/lse_desktop_experience.aconfig
@@ -38,6 +38,18 @@
}
flag {
+ name: "enable_shell_initial_bounds_regression_bug_fix"
+ namespace: "lse_desktop_experience"
+ description: "Enables fix for Shell initial bounds regression, forcing core to calculate /n"
+ "initial bounds in desktop launch params while respecting cascading position /n"
+ "passed by Shell."
+ bug: "396075922"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "enable_windowing_dynamic_initial_bounds"
namespace: "lse_desktop_experience"
description: "Enables new initial bounds for desktop windowing which adjust depending on app constraints"
@@ -100,6 +112,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"
@@ -812,6 +835,7 @@
purpose: PURPOSE_BUGFIX
}
}
+
flag {
name: "enable_drag_to_desktop_incoming_transitions_bugfix"
namespace: "lse_desktop_experience"
@@ -821,3 +845,33 @@
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
+ }
+}
+
+flag {
+ name: "enable_visual_indicator_in_transition_bugfix"
+ namespace: "lse_desktop_experience"
+ description: "Enables bugfix to move visual drop-zone indicator to transition root, so it can't be shown after the transition."
+ bug: "392826275"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
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/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig
index 9f768f0..f2efa20 100644
--- a/core/java/android/window/flags/windowing_sdk.aconfig
+++ b/core/java/android/window/flags/windowing_sdk.aconfig
@@ -152,4 +152,15 @@
metadata {
purpose: PURPOSE_BUGFIX
}
-}
\ No newline at end of file
+}
+
+flag {
+ namespace: "windowing_sdk"
+ name: "cleanup_dispatch_pending_transactions_remote_exception"
+ description: "Refactor to cleanup for RemoteException from dispatchPendingTransactions"
+ bug: "323801078"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
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/config/appcloning/OWNERS b/core/java/com/android/internal/config/appcloning/OWNERS
index 0645a8c5..9369438 100644
--- a/core/java/com/android/internal/config/appcloning/OWNERS
+++ b/core/java/com/android/internal/config/appcloning/OWNERS
@@ -1,3 +1,2 @@
# Bug component: 1207885
jigarthakkar@google.com
-saumyap@google.com
\ No newline at end of file
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/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/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/java/com/android/internal/widget/remotecompose/OWNERS b/core/java/com/android/internal/widget/remotecompose/OWNERS
index e163474..c606744 100644
--- a/core/java/com/android/internal/widget/remotecompose/OWNERS
+++ b/core/java/com/android/internal/widget/remotecompose/OWNERS
@@ -1,6 +1,5 @@
nicolasroard@google.com
hoford@google.com
-jnichol@google.com
sihua@google.com
sunnygoyal@google.com
oscarad@google.com
diff --git a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
index b8503da..796ea8d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
@@ -65,7 +65,7 @@
// We also keep a more fine-grained BUILD number, exposed as
// ID_API_LEVEL = DOCUMENT_API_LEVEL + BUILD
- static final float BUILD = 0.2f;
+ static final float BUILD = 0.3f;
@NonNull ArrayList<Operation> mOperations = new ArrayList<>();
@@ -411,7 +411,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", "CoreDocument")
+ .addType("CoreDocument")
.add("width", mWidth)
.add("height", mHeight)
.add("operations", mOperations);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/Operations.java b/core/java/com/android/internal/widget/remotecompose/core/Operations.java
index 09ec402..9cbafab 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/Operations.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/Operations.java
@@ -100,6 +100,7 @@
import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleColumnLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout;
+import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout;
@@ -231,6 +232,7 @@
public static final int LAYOUT_ROOT = 200;
public static final int LAYOUT_CONTENT = 201;
public static final int LAYOUT_BOX = 202;
+ public static final int LAYOUT_FIT_BOX = 176;
public static final int LAYOUT_ROW = 203;
public static final int LAYOUT_COLLAPSIBLE_ROW = 230;
public static final int LAYOUT_COLUMN = 204;
@@ -391,6 +393,7 @@
map.put(LAYOUT_ROOT, RootLayoutComponent::read);
map.put(LAYOUT_CONTENT, LayoutComponentContent::read);
map.put(LAYOUT_BOX, BoxLayout::read);
+ map.put(LAYOUT_FIT_BOX, FitBoxLayout::read);
map.put(LAYOUT_COLUMN, ColumnLayout::read);
map.put(LAYOUT_COLLAPSIBLE_COLUMN, CollapsibleColumnLayout::read);
map.put(LAYOUT_ROW, RowLayout::read);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/PaintOperation.java b/core/java/com/android/internal/widget/remotecompose/core/PaintOperation.java
index f355676..c27ee32 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/PaintOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/PaintOperation.java
@@ -17,11 +17,13 @@
import android.annotation.NonNull;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
+
/**
* PaintOperation interface, used for operations aimed at painting (while any operation _can_ paint,
* this make it a little more explicit)
*/
-public abstract class PaintOperation extends Operation {
+public abstract class PaintOperation extends Operation implements Serializable {
@Override
public void apply(@NonNull RemoteContext context) {
diff --git a/core/java/com/android/internal/widget/remotecompose/core/Platform.java b/core/java/com/android/internal/widget/remotecompose/core/Platform.java
index 6073de6..3fff86c 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/Platform.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/Platform.java
@@ -47,6 +47,14 @@
int getImageHeight(@NonNull Object image);
/**
+ * Returns true if the platform-specific image object has format ALPHA_8
+ *
+ * @param image platform-specific image object
+ * @return whether or not the platform-specific image object has format ALPHA_8
+ */
+ boolean isAlpha8Image(@NonNull Object image);
+
+ /**
* Converts a platform-specific path object into a platform-independent float buffer
*
* @param path
@@ -110,6 +118,11 @@
}
@Override
+ public boolean isAlpha8Image(@NonNull Object image) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public float[] pathToFloatArray(@NonNull Object path) {
throw new UnsupportedOperationException();
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
index e75bd30..c249adf 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
@@ -98,6 +98,7 @@
import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleColumnLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.CollapsibleRowLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.ColumnLayout;
+import com.android.internal.widget.remotecompose.core.operations.layout.managers.FitBoxLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.RowLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.StateLayout;
import com.android.internal.widget.remotecompose.core.operations.layout.managers.TextLayout;
@@ -281,13 +282,7 @@
int dstRight,
int dstBottom,
@Nullable String contentDescription) {
- int imageId = mRemoteComposeState.dataGetId(image);
- if (imageId == -1) {
- imageId = mRemoteComposeState.cacheData(image);
- byte[] data = mPlatform.imageToByteArray(image); // todo: potential npe
- BitmapData.apply(
- mBuffer, imageId, imageWidth, imageHeight, data); // todo: potential npe
- }
+ int imageId = storeBitmap(image);
int contentDescriptionId = 0;
if (contentDescription != null) {
contentDescriptionId = addText(contentDescription);
@@ -443,16 +438,7 @@
float right,
float bottom,
@Nullable String contentDescription) {
- int imageId = mRemoteComposeState.dataGetId(image);
- if (imageId == -1) {
- imageId = mRemoteComposeState.cacheData(image);
- byte[] data = mPlatform.imageToByteArray(image); // todo: potential npe
- int imageWidth = mPlatform.getImageWidth(image);
- int imageHeight = mPlatform.getImageHeight(image);
-
- BitmapData.apply(
- mBuffer, imageId, imageWidth, imageHeight, data); // todo: potential npe
- }
+ int imageId = storeBitmap(image);
addDrawBitmap(imageId, left, top, right, bottom, contentDescription);
}
@@ -523,15 +509,7 @@
int scaleType,
float scaleFactor,
@Nullable String contentDescription) {
- int imageId = mRemoteComposeState.dataGetId(image);
- if (imageId == -1) {
- imageId = mRemoteComposeState.cacheData(image);
- byte[] data = mPlatform.imageToByteArray(image); // todo: potential npe
- int imageWidth = mPlatform.getImageWidth(image);
- int imageHeight = mPlatform.getImageHeight(image);
-
- BitmapData.apply(mBuffer, imageId, imageWidth, imageHeight, data); // todo: potential pe
- }
+ int imageId = storeBitmap(image);
int contentDescriptionId = 0;
if (contentDescription != null) {
contentDescriptionId = addText(contentDescription);
@@ -559,16 +537,7 @@
* @return id of the image useful with
*/
public int addBitmap(@NonNull Object image) {
- int imageId = mRemoteComposeState.dataGetId(image);
- if (imageId == -1) {
- imageId = mRemoteComposeState.cacheData(image);
- byte[] data = mPlatform.imageToByteArray(image); // tODO: potential npe
- int imageWidth = mPlatform.getImageWidth(image);
- int imageHeight = mPlatform.getImageHeight(image);
-
- BitmapData.apply(mBuffer, imageId, imageWidth, imageHeight, data);
- }
- return imageId;
+ return storeBitmap(image);
}
/**
@@ -578,18 +547,7 @@
* @return id of the image useful with
*/
public int addBitmap(@NonNull Object image, @NonNull String name) {
- int imageId = mRemoteComposeState.dataGetId(image);
- if (imageId == -1) {
- imageId = mRemoteComposeState.cacheData(image);
- byte[] data = mPlatform.imageToByteArray(image); // todo: potential npe
- int imageWidth = mPlatform.getImageWidth(image);
- int imageHeight = mPlatform.getImageHeight(image);
-
- BitmapData.apply(mBuffer, imageId, imageWidth, imageHeight, data);
- setBitmapName(imageId, name);
- }
-
- return imageId;
+ return storeBitmap(image);
}
/**
@@ -1393,7 +1351,7 @@
* @return the id of the command representing long
*/
public int addLong(long value) {
- int id = mRemoteComposeState.cacheData(value);
+ int id = mRemoteComposeState.nextId();
LongConstant.apply(mBuffer, id, value);
return id;
}
@@ -1405,7 +1363,7 @@
* @return the id
*/
public int addBoolean(boolean value) {
- int id = mRemoteComposeState.cacheData(value);
+ int id = mRemoteComposeState.nextId();
BooleanConstant.apply(mBuffer, id, value);
return id;
}
@@ -1821,33 +1779,14 @@
}
/**
- * This defines the name of the color given the id.
- *
- * @param id of the color
- * @param name Name of the color
- */
- public void setColorName(int id, @NonNull String name) {
- NamedVariable.apply(mBuffer, id, NamedVariable.COLOR_TYPE, name);
- }
-
- /**
- * This defines the name of the string given the id
- *
- * @param id of the string
- * @param name name of the string
- */
- public void setStringName(int id, @NonNull String name) {
- NamedVariable.apply(mBuffer, id, NamedVariable.STRING_TYPE, name);
- }
-
- /**
- * This defines the name of the float given the id
+ * This defines the name of a type of given object
*
* @param id of the float
* @param name name of the float
+ * @param type the type of variable NamedVariable.COLOR_TYPE, STRING_TYPE, etc
*/
- public void setFloatName(int id, String name) {
- NamedVariable.apply(mBuffer, id, NamedVariable.FLOAT_TYPE, name);
+ public void setNamedVariable(int id, @NonNull String name, int type) {
+ NamedVariable.apply(mBuffer, id, type, name);
}
/**
@@ -2139,6 +2078,19 @@
}
/**
+ * Add a fitbox start tag
+ *
+ * @param componentId component id
+ * @param animationId animation id
+ * @param horizontal horizontal alignment
+ * @param vertical vertical alignment
+ */
+ public void addFitBoxStart(int componentId, int animationId, int horizontal, int vertical) {
+ mLastComponentId = getComponentId(componentId);
+ FitBoxLayout.apply(mBuffer, mLastComponentId, animationId, horizontal, vertical);
+ }
+
+ /**
* Add a row start tag
*
* @param componentId component id
@@ -2439,4 +2391,35 @@
public void drawComponentContent() {
DrawContent.apply(mBuffer);
}
+
+ /**
+ * Ensures the bitmap is stored.
+ *
+ * @param image the bitbap to store
+ * @return the id of the bitmap
+ */
+ private int storeBitmap(Object image) {
+ int imageId = mRemoteComposeState.dataGetId(image);
+ if (imageId == -1) {
+ imageId = mRemoteComposeState.cacheData(image);
+ byte[] data = mPlatform.imageToByteArray(image); // todo: potential npe
+ short imageWidth = (short) mPlatform.getImageWidth(image);
+ short imageHeight = (short) mPlatform.getImageHeight(image);
+ if (mPlatform.isAlpha8Image(image)) {
+ BitmapData.apply(
+ mBuffer,
+ imageId,
+ BitmapData.TYPE_PNG_ALPHA_8,
+ imageWidth,
+ BitmapData.ENCODING_INLINE,
+ imageHeight,
+ data); // todo: potential npe
+ } else {
+ BitmapData.apply(
+ mBuffer, imageId, imageWidth, imageHeight, data); // todo: potential npe
+ }
+ }
+
+ return imageId;
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java
index 363b82b..83c0619 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeState.java
@@ -27,6 +27,7 @@
import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
/**
@@ -36,7 +37,7 @@
public class RemoteComposeState implements CollectionsAccess {
public static final int START_ID = 42;
// private static final int MAX_FLOATS = 500;
- private static final int MAX_COLORS = 200;
+ private static int sMaxColors = 200;
private static final int MAX_DATA = 1000;
private final IntMap<Object> mIntDataMap = new IntMap<>();
@@ -52,7 +53,7 @@
private final IntMap<Object> mPathMap = new IntMap<>();
private final IntMap<float[]> mPathData = new IntMap<>();
- private final boolean[] mColorOverride = new boolean[MAX_COLORS];
+ private boolean[] mColorOverride = new boolean[sMaxColors];
@NonNull private final IntMap<ArrayAccess> mCollectionMap = new IntMap<>();
private final boolean[] mDataOverride = new boolean[MAX_DATA];
@@ -318,7 +319,7 @@
* @param color
*/
public void updateColor(int id, int color) {
- if (mColorOverride[id]) {
+ if (id < sMaxColors && mColorOverride[id]) {
return;
}
mColorMap.put(id, color);
@@ -342,6 +343,10 @@
* @param color
*/
public void overrideColor(int id, int color) {
+ if (id >= sMaxColors) {
+ sMaxColors *= 2;
+ mColorOverride = Arrays.copyOf(mColorOverride, sMaxColors);
+ }
mColorOverride[id] = true;
mColorMap.put(id, color);
updateListeners(id);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
index 622f0c8..c6b17e4 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
@@ -211,6 +211,14 @@
public abstract void clearNamedFloatOverride(String floatName);
/**
+ * Set the value of a named long. This modifies the content of a LongConstant
+ *
+ * @param name the name of the float to override
+ * @param value Override the default float
+ */
+ public abstract void setNamedLong(String name, long value);
+
+ /**
* Set the value of a named Object. This overrides the Object in the document
*
* @param dataName the name of the Object to override
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java
index 13e6f38..255d7a4 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapData.java
@@ -72,6 +72,9 @@
/** The data is encoded as RAW 8888 bit */
public static final short TYPE_RAW8888 = 3;
+ /** The data is encoded as PNG_8888 but decoded as ALPHA_8 */
+ public static final short TYPE_PNG_ALPHA_8 = 4;
+
/**
* create a bitmap structure
*
@@ -136,6 +139,15 @@
}
/**
+ * The type of the image
+ *
+ * @return the type of the image
+ */
+ public int getType() {
+ return mType;
+ }
+
+ /**
* Add the image to the document
*
* @param buffer document to write to
@@ -195,6 +207,21 @@
int imageId = buffer.readInt();
int width = buffer.readInt();
int height = buffer.readInt();
+ int type;
+ if (width > 0xffff) {
+ type = width >> 16;
+ width = width & 0xffff;
+ } else {
+ type = TYPE_PNG_8888;
+ }
+
+ int encoding;
+ if (height > 0xffff) {
+ encoding = height >> 16;
+ height = height & 0xffff;
+ } else {
+ encoding = ENCODING_INLINE;
+ }
if (width < 1
|| height < 1
|| height > MAX_IMAGE_DIMENSION
@@ -202,7 +229,10 @@
throw new RuntimeException("Dimension of image is invalid " + width + "x" + height);
}
byte[] bitmap = buffer.readBuffer();
- operations.add(new BitmapData(imageId, width, height, bitmap));
+ BitmapData bitmapData = new BitmapData(imageId, width, height, bitmap);
+ bitmapData.mType = (short) type;
+ bitmapData.mEncoding = (short) encoding;
+ operations.add(bitmapData);
}
/**
@@ -244,7 +274,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("imageId", mImageId)
.add("imageWidth", mImageWidth)
.add("imageHeight", mImageHeight)
@@ -275,6 +305,8 @@
return "TYPE_RAW8";
case TYPE_RAW8888:
return "TYPE_RAW8888";
+ case TYPE_PNG_ALPHA_8:
+ return "TYPE_PNG_ALPHA_8";
default:
return "TYPE_INVALID";
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapFontData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapFontData.java
index 078ce98..70bda6d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapFontData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/BitmapFontData.java
@@ -221,6 +221,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId);
+ serializer.addType(CLASS_NAME).add("id", mId);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ClickArea.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ClickArea.java
index 00ac9c2..7a8373b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ClickArea.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ClickArea.java
@@ -237,7 +237,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mId)
.add("contentDescriptionId", mContentDescription)
.add("left", mLeft, mOutLeft)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ClipPath.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ClipPath.java
index e7dc405..03bdb70 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ClipPath.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ClipPath.java
@@ -133,7 +133,7 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("regionOp", regionOpToString());
+ serializer.addType(CLASS_NAME).add("id", mId).add("regionOp", regionOpToString());
}
String regionOpToString() {
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ClipRect.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ClipRect.java
index 1646146..8b1e96a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ClipRect.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ClipRect.java
@@ -118,6 +118,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "left", "top", "right", "bottom").add("type", CLASS_NAME);
+ serialize(serializer, "left", "top", "right", "bottom").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorConstant.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorConstant.java
index 333ffaa..7b12f4a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorConstant.java
@@ -133,7 +133,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("color", Utils.colorInt(mColor))
.add("colorId", mColorId);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
index d5af791..25323a8 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
@@ -507,7 +507,7 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId);
+ serializer.addType(CLASS_NAME).add("id", mId);
switch (mMode) {
case COLOR_COLOR_INTERPOLATE:
case ID_COLOR_INTERPOLATE:
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ComponentValue.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ComponentValue.java
index cd13d25..5335e4f 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ComponentValue.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ComponentValue.java
@@ -171,7 +171,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("valueId", mValueId)
.add("componentValueType", typeToString(mType))
.add("componentId", mComponentID);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
index fb3abdb..20bebaa 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
@@ -148,8 +148,9 @@
return mValues.length;
}
+ @SuppressWarnings("JdkImmutableCollections")
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("values", List.of(mValues));
+ serializer.addType(CLASS_NAME).add("id", mId).add("values", List.of(mValues));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
index 58fd74f..af660f3 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
@@ -150,8 +150,9 @@
return 0;
}
+ @SuppressWarnings("JdkImmutableCollections")
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("ids", List.of(mIds));
+ serializer.addType(CLASS_NAME).add("id", mId).add("ids", List.of(mIds));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawArc.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawArc.java
index a427836..5024164 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawArc.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawArc.java
@@ -141,6 +141,6 @@
@Override
public void serialize(MapSerializer serializer) {
serialize(serializer, "left", "top", "right", "bottom", "startAngle", "sweepAngle")
- .add("type", CLASS_NAME);
+ .addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmap.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmap.java
index 40d3bed..e3b53a1 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmap.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmap.java
@@ -28,6 +28,7 @@
import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -185,4 +186,16 @@
public void paint(@NonNull PaintContext context) {
context.drawBitmap(mId, mOutputLeft, mOutputTop, mOutputRight, mOutputBottom);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("imageId", mId)
+ .add("contentDescriptionId", mDescriptionId)
+ .add("left", mLeft, mOutputLeft)
+ .add("top", mTop, mOutputTop)
+ .add("right", mRight, mOutputRight)
+ .add("bottom", mBottom, mOutputBottom);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapFontText.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapFontText.java
index 258988e..bff87fd 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapFontText.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapFontText.java
@@ -28,6 +28,7 @@
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -229,4 +230,16 @@
xPos = xPos2 + glyph.mMarginRight;
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("textId", mTextID)
+ .add("bitmapFontId", mBitmapFontID)
+ .add("start", mStart)
+ .add("end", mEnd)
+ .add("x", mX, mOutX)
+ .add("y", mY, mOutY);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapInt.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapInt.java
index 013dd1a..39d85af 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapInt.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapInt.java
@@ -25,6 +25,7 @@
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.semantics.AccessibleComponent;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -230,4 +231,20 @@
mDstBottom,
mContentDescId);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("imageId", mImageId)
+ .add("contentDescriptionId", mContentDescId)
+ .add("srcLeft", mSrcLeft)
+ .add("srcTop", mSrcTop)
+ .add("srcRight", mSrcRight)
+ .add("srcBottom", mSrcBottom)
+ .add("dstLeft", mDstLeft)
+ .add("dstTop", mDstTop)
+ .add("dstRight", mDstRight)
+ .add("dstBottom", mDstBottom);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapScaled.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapScaled.java
index e1070f9..827e569 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapScaled.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBitmapScaled.java
@@ -28,6 +28,7 @@
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.ImageScaling;
import com.android.internal.widget.remotecompose.core.semantics.AccessibleComponent;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -374,4 +375,46 @@
mContentDescId);
context.restore();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("imageId", mImageId)
+ .add("contentDescriptionId", mContentDescId)
+ .add("scaleType", getScaleTypeString())
+ .add("mode", mMode)
+ .add("scaleFactor", mScaleFactor, mOutScaleFactor)
+ .add("srcLeft", mSrcLeft, mOutSrcLeft)
+ .add("srcTop", mSrcTop, mOutSrcTop)
+ .add("srcRight", mSrcRight, mOutSrcRight)
+ .add("srcBottom", mSrcBottom, mOutSrcBottom)
+ .add("dstLeft", mDstLeft, mOutDstLeft)
+ .add("dstTop", mDstTop, mOutDstTop)
+ .add("dstRight", mDstRight, mOutDstRight)
+ .add("dstBottom", mDstBottom, mOutDstBottom);
+ }
+
+ private String getScaleTypeString() {
+ switch (mScaleType) {
+ case SCALE_NONE:
+ return "SCALE_NONE";
+ case SCALE_INSIDE:
+ return "SCALE_INSIDE";
+ case SCALE_FILL_WIDTH:
+ return "SCALE_FILL_WIDTH";
+ case SCALE_FILL_HEIGHT:
+ return "SCALE_FILL_HEIGHT";
+ case SCALE_FIT:
+ return "SCALE_FIT";
+ case SCALE_CROP:
+ return "SCALE_CROP";
+ case SCALE_FILL_BOUNDS:
+ return "SCALE_FILL_BOUNDS";
+ case SCALE_FIXED_SCALE:
+ return "SCALE_FIXED_SCALE";
+ default:
+ return "INVALID_SCALE_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawCircle.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawCircle.java
index dfc89b1..538cbaf 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawCircle.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawCircle.java
@@ -112,6 +112,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "cx", "cy", "radius").add("type", CLASS_NAME);
+ serialize(serializer, "cx", "cy", "radius").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawContent.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawContent.java
index e2e22ac..4d2a939 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawContent.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawContent.java
@@ -114,6 +114,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME);
+ serializer.addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawLine.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawLine.java
index 461dece..97e5057 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawLine.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawLine.java
@@ -140,6 +140,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "startX", "startY", "endX", "endY").add("type", CLASS_NAME);
+ serialize(serializer, "startX", "startY", "endX", "endY").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawOval.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawOval.java
index d0a5adc..5d619ba 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawOval.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawOval.java
@@ -110,6 +110,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "left", "top", "right", "bottom").add("type", CLASS_NAME);
+ serialize(serializer, "left", "top", "right", "bottom").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawPath.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawPath.java
index 3fd8bb4..6e29927 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawPath.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawPath.java
@@ -112,6 +112,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("start", mStart).add("end", mEnd);
+ serializer.addType(CLASS_NAME).add("id", mId).add("start", mStart).add("end", mEnd);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRect.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRect.java
index f6aa30f..15f3ced 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRect.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRect.java
@@ -106,6 +106,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "left", "top", "right", "bottom").add("type", CLASS_NAME);
+ serialize(serializer, "left", "top", "right", "bottom").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRoundRect.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRoundRect.java
index 67338c1..31d9b6a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRoundRect.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawRoundRect.java
@@ -127,6 +127,6 @@
@Override
public void serialize(MapSerializer serializer) {
serialize(serializer, "left", "top", "right", "bottom", "rx", "sweepAngle")
- .add("type", CLASS_NAME);
+ .addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawSector.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawSector.java
index 78f64a5..19f1623 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawSector.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawSector.java
@@ -128,6 +128,6 @@
@Override
public void serialize(MapSerializer serializer) {
serialize(serializer, "left", "top", "right", "bottom", "startAngle", "sweepAngle")
- .add("type", CLASS_NAME);
+ .addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawText.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawText.java
index 8adba1d..ee1689c 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawText.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawText.java
@@ -28,6 +28,7 @@
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -205,4 +206,17 @@
public void paint(@NonNull PaintContext context) {
context.drawTextRun(mTextID, mStart, mEnd, mContextStart, mContextEnd, mOutX, mOutY, mRtl);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("start", mStart)
+ .add("end", mEnd)
+ .add("contextStart", mContextStart)
+ .add("contextEnd", mContextEnd)
+ .add("x", mX, mOutX)
+ .add("y", mY, mOutY)
+ .add("rtl", mRtl);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
index 92469d1..1d917d5 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
@@ -244,7 +244,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("textId", mTextID)
.add("x", mX, mOutX)
.add("y", mY, mOutY)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
index 1f7910e..f382440 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
@@ -159,7 +159,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("pathId", mPathId)
.add("textId", mTextId)
.add("vOffset", mVOffset, mOutVOffset)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTweenPath.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTweenPath.java
index e288394..4ca995b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTweenPath.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTweenPath.java
@@ -28,6 +28,7 @@
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -171,4 +172,15 @@
public void paint(@NonNull PaintContext context) {
context.drawTweenPath(mPath1Id, mPath2Id, mOutTween, mOutStart, mOutStop);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("path1Id", mPath1Id)
+ .add("path2Id", mPath2Id)
+ .add("tween", mTween, mOutTween)
+ .add("start", mStart, mOutStart)
+ .add("stop", mStop, mOutStop);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
index 7f3c3ed..233e246 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
@@ -123,6 +123,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ serializer.addType(CLASS_NAME).add("id", mId).add("value", mValue);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
index c1fa898..eba201b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
@@ -160,6 +160,9 @@
mLastAnimatedValue = lastComputedValue;
context.loadFloat(mId, lastComputedValue);
context.needsRepaint();
+ if (mFloatAnimation.isPropagate()) {
+ markDirty();
+ }
}
} else if (mSpring != null) {
float lastComputedValue = mSpring.get(t - mLastChange);
@@ -169,8 +172,12 @@
context.needsRepaint();
}
} else {
- float v =
- mExp.eval(context.getCollectionsAccess(), mPreCalcValue, mPreCalcValue.length);
+ float v = 0;
+ try {
+ v = mExp.eval(context.getCollectionsAccess(), mPreCalcValue, mPreCalcValue.length);
+ } catch (Exception e) {
+ throw new RuntimeException(this.toString() + " len = " + mPreCalcValue.length, e);
+ }
if (mFloatAnimation != null) {
mFloatAnimation.setTargetValue(v);
}
@@ -344,7 +351,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.EXPRESSION)
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mId)
.addFloatExpressionSrc("srcValues", mSrcValue)
.add("animation", mFloatAnimation);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatFunctionCall.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatFunctionCall.java
index eccc00a..8559294 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatFunctionCall.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatFunctionCall.java
@@ -32,8 +32,10 @@
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.AnimatedFloatExpression;
import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/** This provides the command to call a floatfunction defined in floatfunction */
@@ -182,4 +184,13 @@
}
mFunction.execute(remoteContext);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("id", mId)
+ .add("args", Collections.singletonList(mArgs))
+ .add("outArgs", Collections.singletonList(mOutArgs));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ImageAttribute.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ImageAttribute.java
index fb4a5e4..9ef1b3b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ImageAttribute.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ImageAttribute.java
@@ -26,7 +26,9 @@
import com.android.internal.widget.remotecompose.core.PaintOperation;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import java.util.Collections;
import java.util.List;
/** Operation to extract meta Attributes from image data objects */
@@ -162,4 +164,25 @@
break;
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("id", mId)
+ .add("imageId", mImageId)
+ .add("args", Collections.singletonList(mArgs))
+ .addType(typeToString());
+ }
+
+ private String typeToString() {
+ switch (mType) {
+ case IMAGE_WIDTH:
+ return "IMAGE_WIDTH";
+ case IMAGE_HEIGHT:
+ return "IMAGE_HEIGHT";
+ default:
+ return "INVALID_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
index 2a5260c..53b3c89 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
@@ -233,7 +233,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.EXPRESSION)
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mId)
.add("mask", mId)
.addIntExpressionSrc("srcValues", mSrcValue, mMask);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRestore.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRestore.java
index 64df19d..d2b38f42 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRestore.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRestore.java
@@ -102,6 +102,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME);
+ serializer.addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRotate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRotate.java
index 9c4df0b..5990b4b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRotate.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixRotate.java
@@ -114,6 +114,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "rotate", "pivotX", "pivotY").add("type", CLASS_NAME);
+ serialize(serializer, "rotate", "pivotX", "pivotY").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSave.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSave.java
index 0e6de0d..06da156 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSave.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSave.java
@@ -100,6 +100,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME);
+ serializer.addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixScale.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixScale.java
index b6e5cbc..20d4065 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixScale.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixScale.java
@@ -106,6 +106,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "scaleX", "scaleY", "pivotX", "pivotY").add("type", CLASS_NAME);
+ serialize(serializer, "scaleX", "scaleY", "pivotX", "pivotY").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSkew.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSkew.java
index f9a589c..6d1c503 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSkew.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixSkew.java
@@ -103,6 +103,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "skewX", "skewY").add("type", CLASS_NAME);
+ serialize(serializer, "skewX", "skewY").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixTranslate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixTranslate.java
index de783bf..e21f133 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixTranslate.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/MatrixTranslate.java
@@ -102,6 +102,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serialize(serializer, "dx", "dy").add("type", CLASS_NAME);
+ serialize(serializer, "dx", "dy").addType(CLASS_NAME);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java b/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
index 96628fd..9a88085 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
@@ -25,7 +25,6 @@
import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
-import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import com.android.internal.widget.remotecompose.core.serialize.Serializable;
@@ -43,6 +42,8 @@
public static final int FLOAT_TYPE = 1;
public static final int STRING_TYPE = 0;
public static final int IMAGE_TYPE = 3;
+ public static final int INT_TYPE = 4;
+ public static final int LONG_TYPE = 5;
public NamedVariable(int varId, int varType, @NonNull String name) {
this.mVarId = varId;
@@ -122,7 +123,7 @@
public static void documentation(@NonNull DocumentationBuilder doc) {
doc.operation("Data Operations", OP_CODE, CLASS_NAME)
.description("Add a string name for an ID")
- .field(DocumentedOperation.INT, "varId", "id to label")
+ .field(INT, "varId", "id to label")
.field(INT, "varType", "The type of variable")
.field(UTF8, "name", "String");
}
@@ -141,7 +142,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("varId", mVarId)
.add("varName", mVarName)
.add("varType", typeToString());
@@ -157,6 +158,8 @@
return "STRING_TYPE";
case IMAGE_TYPE:
return "IMAGE_TYPE";
+ case INT_TYPE:
+ return "INT_TYPE";
default:
return "INVALID_TYPE";
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
index 8389aa7..70197c6 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
@@ -131,6 +131,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("paintBundle", mPaintData);
+ serializer.addType(CLASS_NAME).add("paintBundle", mPaintData);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesLoop.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesLoop.java
index 8d19c94..f9fdfdf 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesLoop.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ParticlesLoop.java
@@ -33,6 +33,7 @@
import com.android.internal.widget.remotecompose.core.operations.layout.Container;
import com.android.internal.widget.remotecompose.core.operations.utilities.AnimatedFloatExpression;
import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.ArrayList;
import java.util.List;
@@ -292,4 +293,9 @@
}
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.addType(CLASS_NAME).add("id", mId);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
index 8f353ce..8a747e1 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
@@ -258,9 +258,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer
- .add("type", CLASS_NAME)
- .add("id", mInstanceId)
- .add("path", pathString(mFloatPath));
+ serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
index 7aa3390..78e3b9e 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
@@ -242,9 +242,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer
- .add("type", CLASS_NAME)
- .add("id", mInstanceId)
- .add("path", pathString(mFloatPath));
+ serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java
index 9564f15..cedc4f3b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathData.java
@@ -243,9 +243,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer
- .add("type", CLASS_NAME)
- .add("id", mInstanceId)
- .add("path", pathString(mFloatPath));
+ serializer.addType(CLASS_NAME).add("id", mInstanceId).add("path", pathString(mFloatPath));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
index c5add57..09b29e8 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
@@ -161,7 +161,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("outId", mOutId)
.add("pathId1", mPathId1)
.add("pathId2", mPathId2)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java b/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
index a6a8a81..214d240 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
@@ -133,6 +133,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("contentDescriptionId", mContentDescription);
+ serializer.addType(CLASS_NAME).add("contentDescriptionId", mContentDescription);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
index 5f6162b..013b6f6 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
@@ -390,7 +390,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("shaderTextId", mShaderTextId)
.add("shaderID", mShaderID)
.add("uniformRawFloatMap", mUniformRawFloatMap)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
index 3e72995d..36f25c6 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
@@ -173,7 +173,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mId)
.add("textId", mTextId)
.add("measureType", typeToString());
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
index 419e6d0..67773d1 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
@@ -136,6 +136,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("textId", mTextId).add("text", mText);
+ serializer.addType(CLASS_NAME).add("textId", mTextId).add("text", mText);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
index 6b2f49b..f22369f 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
@@ -215,7 +215,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("textId", mTextId)
.add("value", mValue, mOutValue)
.add("digitsBefore", mDigitsBefore)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
index e8865c2..fa44bf1 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
@@ -156,7 +156,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("textId", mTextId)
.add("dataSetId", mDataSetId)
.add("indexId", mIndex, mOutIndex);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
index de20255..5ec3290 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
@@ -149,7 +149,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("textId", mTextId)
.add("dataSetId", mDataSetId)
.add("indexId", mIndex, mOutIndex);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMeasure.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMeasure.java
index 58cd68e..3559d1db 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMeasure.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMeasure.java
@@ -27,6 +27,7 @@
import com.android.internal.widget.remotecompose.core.PaintOperation;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.List;
@@ -161,4 +162,33 @@
break;
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("id", mId)
+ .add("textId", mTextId)
+ .add("measureType", typeToString());
+ }
+
+ private String typeToString() {
+ int val = mType & 255;
+ switch (val) {
+ case MEASURE_WIDTH:
+ return "MEASURE_WIDTH";
+ case MEASURE_HEIGHT:
+ return "MEASURE_HEIGHT";
+ case MEASURE_LEFT:
+ return "MEASURE_LEFT";
+ case MEASURE_TOP:
+ return "MEASURE_TOP";
+ case MEASURE_RIGHT:
+ return "MEASURE_RIGHT";
+ case MEASURE_BOTTOM:
+ return "MEASURE_BOTTOM";
+ default:
+ return "INVALID_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
index 262916d..1239b56 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
@@ -132,7 +132,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mTextId)
.add("leftId", mSrcId1)
.add("rightId", mSrcId2);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java
index afb84b5..fd9a2bf 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TimeAttribute.java
@@ -27,12 +27,14 @@
import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import com.android.internal.widget.remotecompose.core.types.LongConstant;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/** Operation to perform time related calculation */
@@ -292,4 +294,48 @@
break;
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("id", mId)
+ .add("timeId", mTimeId)
+ .addType(getTypeString())
+ .add("args", Collections.singletonList(mArgs));
+ }
+
+ private String getTypeString() {
+ int val = mType & 255;
+ switch (val) {
+ case TIME_FROM_NOW_SEC:
+ return "TIME_FROM_NOW_SEC";
+ case TIME_FROM_NOW_MIN:
+ return "TIME_FROM_NOW_MIN";
+ case TIME_FROM_NOW_HR:
+ return "TIME_FROM_NOW_HR";
+ case TIME_FROM_ARG_SEC:
+ return "TIME_FROM_ARG_SEC";
+ case TIME_FROM_ARG_MIN:
+ return "TIME_FROM_ARG_MIN";
+ case TIME_FROM_ARG_HR:
+ return "TIME_FROM_ARG_HR";
+ case TIME_IN_SEC:
+ return "TIME_IN_SEC";
+ case TIME_IN_MIN:
+ return "TIME_IN_MIN";
+ case TIME_IN_HR:
+ return "TIME_IN_HR";
+ case TIME_DAY_OF_MONTH:
+ return "TIME_DAY_OF_MONTH";
+ case TIME_MONTH_VALUE:
+ return "TIME_MONTH_VALUE";
+ case TIME_DAY_OF_WEEK:
+ return "TIME_DAY_OF_WEEK";
+ case TIME_YEAR:
+ return "TIME_YEAR";
+ default:
+ return "INVALID_TIME_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
index 2591a4c..f246729 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
@@ -716,9 +716,9 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("id", mId)
- .add("mDefValue", mDefValue, mOutDefValue)
+ .add("defValue", mDefValue, mOutDefValue)
.add("min", mMin, mOutMin)
.add("max", mMax, mOutMax)
.add("mode", mMode)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/AnimatableValue.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/AnimatableValue.java
index 9dc2a49..b98a017 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/AnimatableValue.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/AnimatableValue.java
@@ -129,6 +129,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", "AnimatableValue").add("id", mId);
+ serializer.addType("AnimatableValue").add("id", mId);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/CanvasOperations.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/CanvasOperations.java
index 3e7f1d3..25a10ab 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/CanvasOperations.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/CanvasOperations.java
@@ -156,7 +156,7 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("list", mList);
+ serializer.addType(CLASS_NAME).add("list", mList);
}
/**
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ClickModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ClickModifierOperation.java
index 8b13c13..7ee1490 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ClickModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ClickModifierOperation.java
@@ -253,6 +253,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.addTags(SerializeTags.MODIFIER).add("type", "ClickModifierOperation");
+ serializer.addTags(SerializeTags.MODIFIER).addType("ClickModifierOperation");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java
index c736436..b30dade 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/Component.java
@@ -57,8 +57,8 @@
protected float mHeight;
@Nullable protected Component mParent;
protected int mAnimationId = -1;
- @NonNull public Visibility mVisibility = Visibility.VISIBLE;
- @NonNull public Visibility mScheduledVisibility = Visibility.VISIBLE;
+ public int mVisibility = Visibility.VISIBLE;
+ public int mScheduledVisibility = Visibility.VISIBLE;
@NonNull public ArrayList<Operation> mList = new ArrayList<>();
public PaintOperation mPreTranslate; // todo, can we initialize this here and make it NonNull?
public boolean mNeedsMeasure = true;
@@ -288,22 +288,42 @@
}
/**
- * Returns the intrinsic width of the layout
+ * Returns the min intrinsic width of the layout
*
* @param context
* @return the width in pixels
*/
- public float intrinsicWidth(@Nullable RemoteContext context) {
+ public float minIntrinsicWidth(@Nullable RemoteContext context) {
return getWidth();
}
/**
- * Returns the intrinsic height of the layout
+ * Returns the max intrinsic width of the layout
+ *
+ * @param context
+ * @return the width in pixels
+ */
+ public float maxIntrinsicWidth(@Nullable RemoteContext context) {
+ return getWidth();
+ }
+
+ /**
+ * Returns the min intrinsic height of the layout
*
* @param context
* @return the height in pixels
*/
- public float intrinsicHeight(@Nullable RemoteContext context) {
+ public float minIntrinsicHeight(@Nullable RemoteContext context) {
+ return getHeight();
+ }
+
+ /**
+ * Returns the max intrinsic height of the layout
+ *
+ * @param context
+ * @return the height in pixels
+ */
+ public float maxIntrinsicHeight(@Nullable RemoteContext context) {
return getHeight();
}
@@ -338,10 +358,119 @@
// Nothing here
}
- public enum Visibility {
- GONE,
- VISIBLE,
- INVISIBLE
+ public static class Visibility {
+
+ public static final int GONE = 0;
+ public static final int VISIBLE = 1;
+ public static final int INVISIBLE = 2;
+ public static final int OVERRIDE_GONE = 16;
+ public static final int OVERRIDE_VISIBLE = 32;
+ public static final int OVERRIDE_INVISIBLE = 64;
+ public static final int CLEAR_OVERRIDE = 128;
+
+ /**
+ * Returns a string representation of the field
+ *
+ * @param value
+ * @return
+ */
+ public static String toString(int value) {
+ switch (value) {
+ case GONE:
+ return "GONE";
+ case VISIBLE:
+ return "VISIBLE";
+ case INVISIBLE:
+ return "INVISIBLE";
+ }
+ if ((value >> 4) > 0) {
+ if ((value & OVERRIDE_GONE) == OVERRIDE_GONE) {
+ return "OVERRIDE_GONE";
+ }
+ if ((value & OVERRIDE_VISIBLE) == OVERRIDE_VISIBLE) {
+ return "OVERRIDE_VISIBLE";
+ }
+ if ((value & OVERRIDE_INVISIBLE) == OVERRIDE_INVISIBLE) {
+ return "OVERRIDE_INVISIBLE";
+ }
+ }
+ return "" + value;
+ }
+
+ /**
+ * Returns true if gone
+ *
+ * @param value
+ * @return
+ */
+ public static boolean isGone(int value) {
+ if ((value >> 4) > 0) {
+ return (value & OVERRIDE_GONE) == OVERRIDE_GONE;
+ }
+ return value == GONE;
+ }
+
+ /**
+ * Returns true if visible
+ *
+ * @param value
+ * @return
+ */
+ public static boolean isVisible(int value) {
+ if ((value >> 4) > 0) {
+ return (value & OVERRIDE_VISIBLE) == OVERRIDE_VISIBLE;
+ }
+ return value == VISIBLE;
+ }
+
+ /**
+ * Returns true if invisible
+ *
+ * @param value
+ * @return
+ */
+ public static boolean isInvisible(int value) {
+ if ((value >> 4) > 0) {
+ return (value & OVERRIDE_INVISIBLE) == OVERRIDE_INVISIBLE;
+ }
+ return value == INVISIBLE;
+ }
+
+ /**
+ * Returns true if the field has an override
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasOverride(int value) {
+ return (value >> 4) > 0;
+ }
+
+ /**
+ * Clear the override values
+ *
+ * @param value
+ * @return
+ */
+ public static int clearOverride(int value) {
+ return value & 15;
+ }
+
+ /**
+ * Add an override value
+ *
+ * @param value
+ * @param visibility
+ * @return
+ */
+ public static int add(int value, int visibility) {
+ int v = value & 15;
+ v += visibility;
+ if ((v & CLEAR_OVERRIDE) == CLEAR_OVERRIDE) {
+ v = v & 15;
+ }
+ return v;
+ }
}
/**
@@ -350,13 +479,28 @@
* @return
*/
public boolean isVisible() {
- if (mVisibility != Visibility.VISIBLE || mParent == null) {
- return mVisibility == Visibility.VISIBLE;
+ if (mParent == null || !Visibility.isVisible(mVisibility)) {
+ return Visibility.isVisible(mVisibility);
}
- if (mParent != null) { // TODO: this is always true -- bbade@
- return mParent.isVisible();
- }
- return true;
+ return mParent.isVisible();
+ }
+
+ /**
+ * Returns true if the component is gone
+ *
+ * @return
+ */
+ public boolean isGone() {
+ return Visibility.isGone(mVisibility);
+ }
+
+ /**
+ * Returns true if the component is invisible
+ *
+ * @return
+ */
+ public boolean isInvisible() {
+ return Visibility.isInvisible(mVisibility);
}
/**
@@ -364,7 +508,7 @@
*
* @param visibility can be VISIBLE, INVISIBLE or GONE
*/
- public void setVisibility(@NonNull Visibility visibility) {
+ public void setVisibility(int visibility) {
if (visibility != mVisibility || visibility != mScheduledVisibility) {
mScheduledVisibility = visibility;
invalidateMeasure();
@@ -705,7 +849,7 @@
+ "] "
+ textContent()
+ " Visibility ("
- + mVisibility
+ + Visibility.toString(mVisibility)
+ ") ";
}
@@ -732,7 +876,7 @@
+ ", "
+ mHeight
+ "] "
- + mVisibility;
+ + Visibility.toString(mVisibility);
// + " [" + mNeedsMeasure + ", " + mNeedsRepaint + "]"
serializer.append(indent, content);
}
@@ -966,7 +1110,7 @@
if (applyAnimationAsNeeded(context)) {
return;
}
- if (mVisibility == Visibility.GONE || mVisibility == Visibility.INVISIBLE) {
+ if (isGone() || isInvisible()) {
return;
}
paintingComponent(context);
@@ -1071,13 +1215,13 @@
@Override
public void serialize(MapSerializer serializer) {
serializer.addTags(SerializeTags.COMPONENT);
- serializer.add("type", getSerializedName());
+ serializer.addType(getSerializedName());
serializer.add("id", mComponentId);
serializer.add("x", mX);
serializer.add("y", mY);
serializer.add("width", mWidth);
serializer.add("height", mHeight);
- serializer.add("visibility", mVisibility);
+ serializer.add("visibility", Visibility.toString(mVisibility));
serializer.add("list", mList);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseOperation.java
index e277d49..0e629c5 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseOperation.java
@@ -27,6 +27,7 @@
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.Utils;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import java.util.ArrayList;
import java.util.List;
@@ -228,4 +229,12 @@
public void setProcess(ImpulseProcess impulseProcess) {
mProcess = impulseProcess;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addType(CLASS_NAME)
+ .add("duration", mDuration, mOutDuration)
+ .add("startAt", mStartAt, mOutStartAt);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
index 8c9dd76..83d4d38 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
@@ -157,6 +157,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("list", mList);
+ serializer.addType(CLASS_NAME).add("list", mList);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
index 2b63cf2..dda328f 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
@@ -206,12 +206,12 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("indexVariableId", mIndexVariableId)
.add("until", mUntil, mUntilOut)
.add("from", mFrom, mFromOut)
.add("step", mStep, mStepOut)
- .add("mUntilOut", mUntilOut)
+ .add("untilOut", mUntilOut)
.add("list", mList);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/RootLayoutComponent.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/RootLayoutComponent.java
index f2503b2..77d3dae 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/RootLayoutComponent.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/RootLayoutComponent.java
@@ -77,7 +77,7 @@
+ " x "
+ mHeight
+ ") "
- + mVisibility;
+ + Visibility.toString(mVisibility);
}
@Override
@@ -97,7 +97,7 @@
+ ", "
+ mHeight
+ "] "
- + mVisibility);
+ + Visibility.toString(mVisibility));
}
/**
@@ -282,6 +282,6 @@
public void serialize(MapSerializer serializer) {
super.serialize(serializer);
serializer.addTags(SerializeTags.COMPONENT);
- serializer.add("type", "RootLayoutComponent");
+ serializer.addType("RootLayoutComponent");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchCancelModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchCancelModifierOperation.java
index 62b1b6c..283bc7a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchCancelModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchCancelModifierOperation.java
@@ -129,6 +129,6 @@
@Override
public void serialize(MapSerializer serializer) {
super.serialize(serializer);
- serializer.add("type", "TouchCancelModifierOperation");
+ serializer.addType("TouchCancelModifierOperation");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchDownModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchDownModifierOperation.java
index 5289fda..b010c14 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchDownModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchDownModifierOperation.java
@@ -131,6 +131,6 @@
@Override
public void serialize(MapSerializer serializer) {
super.serialize(serializer);
- serializer.add("type", "TouchDownModifierOperation");
+ serializer.addType("TouchDownModifierOperation");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchUpModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchUpModifierOperation.java
index 576c5e9..bc5c10b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchUpModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/TouchUpModifierOperation.java
@@ -129,6 +129,6 @@
@Override
public void serialize(MapSerializer serializer) {
super.serialize(serializer);
- serializer.add("type", "TouchUpModifierOperation");
+ serializer.addType("TouchUpModifierOperation");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimateMeasure.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimateMeasure.java
index e5cd485..1a60451d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimateMeasure.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimateMeasure.java
@@ -143,7 +143,7 @@
*/
public void paint(@NonNull PaintContext context) {
if (mOriginal.getVisibility() != mTarget.getVisibility()) {
- if (mTarget.getVisibility() == Component.Visibility.GONE) {
+ if (mTarget.isGone()) {
switch (mExitAnimation) {
case PARTICLE:
// particleAnimation(context, component, original, target, vp)
@@ -229,8 +229,7 @@
mParticleAnimation.animate(context, mComponent, mOriginal, mTarget, mVp);
break;
}
- } else if (mOriginal.getVisibility() == Component.Visibility.GONE
- && mTarget.getVisibility() == Component.Visibility.VISIBLE) {
+ } else if (mOriginal.isGone() && mTarget.isVisible()) {
switch (mEnterAnimation) {
case ROTATE:
float px = mTarget.getX() + mTarget.getW() / 2f;
@@ -323,7 +322,7 @@
} else {
mComponent.paintingComponent(context);
}
- } else if (mTarget.getVisibility() == Component.Visibility.VISIBLE) {
+ } else if (mTarget.isVisible()) {
mComponent.paintingComponent(context);
}
@@ -360,7 +359,7 @@
public float getVisibility() {
if (mOriginal.getVisibility() == mTarget.getVisibility()) {
return 1f;
- } else if (mTarget.getVisibility() == Component.Visibility.VISIBLE) {
+ } else if (mTarget.isVisible()) {
return mVp;
} else {
return 1 - mVp;
@@ -382,7 +381,7 @@
float targetY = mTarget.getY();
float targetW = mTarget.getW();
float targetH = mTarget.getH();
- Component.Visibility targetVisibility = mTarget.getVisibility();
+ int targetVisibility = mTarget.getVisibility();
if (targetX != measure.getX()
|| targetY != measure.getY()
|| targetW != measure.getW()
@@ -393,7 +392,13 @@
mTarget.setW(measure.getW());
mTarget.setH(measure.getH());
mTarget.setVisibility(measure.getVisibility());
- mStartTime = currentTime;
+ // We shouldn't reset the leftover animation time here
+ // 1/ if we are eg fading out a component, and an updateTarget comes on, we don't want
+ // to restart the full animation time
+ // 2/ if no visibility change but quick updates come in (eg live resize) it seems
+ // better as well to not restart the animation time and only allows the original
+ // time to wrap up
+ // mStartTime = currentTime;
}
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimationSpec.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimationSpec.java
index 91348f5..c87bbdc 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimationSpec.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/animation/AnimationSpec.java
@@ -129,7 +129,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", "AnimationSpec")
+ .addType("AnimationSpec")
.add("motionDuration", getMotionDuration())
.add("motionEasingType", Easing.getString(getMotionEasingType()))
.add("visibilityDuration", getVisibilityDuration())
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/BoxLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/BoxLayout.java
index 35d639e..6ee18bb 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/BoxLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/BoxLayout.java
@@ -115,8 +115,10 @@
for (Component c : mChildrenComponents) {
c.measure(context, 0f, maxWidth, 0f, maxHeight, measure);
ComponentMeasure m = measure.get(c);
- size.setWidth(Math.max(size.getWidth(), m.getW()));
- size.setHeight(Math.max(size.getHeight(), m.getH()));
+ if (!m.isGone()) {
+ size.setWidth(Math.max(size.getWidth(), m.getW()));
+ size.setHeight(Math.max(size.getHeight(), m.getH()));
+ }
}
// add padding
size.setWidth(Math.max(size.getWidth(), computeModifierDefinedWidth(context.getContext())));
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CanvasLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CanvasLayout.java
index 508b685..f9111df 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CanvasLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CanvasLayout.java
@@ -154,7 +154,7 @@
@Override
public void serialize(MapSerializer serializer) {
super.serialize(serializer);
- serializer.add("type", getSerializedName());
+ serializer.addType(getSerializedName());
serializer.add("horizontalPositioning", mHorizontalPositioning);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleColumnLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleColumnLayout.java
index afc41b1..b008952 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleColumnLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleColumnLayout.java
@@ -21,6 +21,7 @@
import com.android.internal.widget.remotecompose.core.Operation;
import com.android.internal.widget.remotecompose.core.Operations;
import com.android.internal.widget.remotecompose.core.PaintContext;
+import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.operations.layout.Component;
import com.android.internal.widget.remotecompose.core.operations.layout.measure.ComponentMeasure;
@@ -134,6 +135,24 @@
}
@Override
+ public float minIntrinsicHeight(@NonNull RemoteContext context) {
+ float height = computeModifierDefinedHeight(context);
+ if (!mChildrenComponents.isEmpty()) {
+ height += mChildrenComponents.get(0).minIntrinsicHeight(context);
+ }
+ return height;
+ }
+
+ @Override
+ public float minIntrinsicWidth(@NonNull RemoteContext context) {
+ float width = computeModifierDefinedWidth(context);
+ if (!mChildrenComponents.isEmpty()) {
+ width += mChildrenComponents.get(0).minIntrinsicWidth(context);
+ }
+ return width;
+ }
+
+ @Override
protected boolean hasVerticalIntrinsicDimension() {
return true;
}
@@ -147,29 +166,54 @@
boolean verticalWrap,
@NonNull MeasurePass measure,
@NonNull Size size) {
- super.computeWrapSize(
- context, maxWidth, Float.MAX_VALUE, horizontalWrap, verticalWrap, measure, size);
- }
-
- @Override
- public boolean applyVisibility(
- float selfWidth, float selfHeight, @NonNull MeasurePass measure) {
- float childrenWidth = 0f;
- float childrenHeight = 0f;
- boolean changedVisibility = false;
- for (Component child : mChildrenComponents) {
- ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
- continue;
- }
- if (childrenHeight + childMeasure.getH() > selfHeight) {
- childMeasure.setVisibility(Visibility.GONE);
- changedVisibility = true;
+ int visibleChildren = 0;
+ ComponentMeasure self = measure.get(this);
+ self.addVisibilityOverride(Visibility.OVERRIDE_VISIBLE);
+ float currentMaxHeight = maxHeight;
+ for (Component c : mChildrenComponents) {
+ if (c instanceof CollapsibleColumnLayout) {
+ c.measure(context, 0f, maxWidth, 0f, currentMaxHeight, measure);
} else {
- childrenHeight += childMeasure.getH();
- childrenWidth = Math.max(childrenWidth, childMeasure.getW());
+ c.measure(context, 0f, maxWidth, 0f, Float.MAX_VALUE, measure);
+ }
+ ComponentMeasure m = measure.get(c);
+ if (!m.isGone()) {
+ size.setWidth(Math.max(size.getWidth(), m.getW()));
+ size.setHeight(size.getHeight() + m.getH());
+ visibleChildren++;
+ currentMaxHeight -= m.getH();
}
}
- return changedVisibility;
+ if (!mChildrenComponents.isEmpty()) {
+ size.setHeight(size.getHeight() + (mSpacedBy * (visibleChildren - 1)));
+ }
+
+ float childrenWidth = 0f;
+ float childrenHeight = 0f;
+
+ boolean overflow = false;
+ for (Component child : mChildrenComponents) {
+ ComponentMeasure childMeasure = measure.get(child);
+ if (overflow || childMeasure.isGone()) {
+ childMeasure.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ continue;
+ }
+ float childHeight = childMeasure.getH();
+ boolean childDoesNotFits = childrenHeight + childHeight > maxHeight;
+ if (childDoesNotFits) {
+ childMeasure.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ overflow = true;
+ } else {
+ childrenHeight += childHeight;
+ childrenWidth = Math.max(childrenWidth, childMeasure.getW());
+ visibleChildren++;
+ }
+ }
+ if (verticalWrap) {
+ size.setHeight(Math.min(maxHeight, childrenHeight));
+ }
+ if (visibleChildren == 0 || size.getHeight() <= 0f) {
+ self.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ }
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleRowLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleRowLayout.java
index 0e7eb86..05f3329 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleRowLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/CollapsibleRowLayout.java
@@ -21,6 +21,7 @@
import com.android.internal.widget.remotecompose.core.Operation;
import com.android.internal.widget.remotecompose.core.Operations;
import com.android.internal.widget.remotecompose.core.PaintContext;
+import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.operations.layout.Component;
import com.android.internal.widget.remotecompose.core.operations.layout.measure.ComponentMeasure;
@@ -139,6 +140,24 @@
}
@Override
+ public float minIntrinsicWidth(@NonNull RemoteContext context) {
+ float width = computeModifierDefinedWidth(context);
+ if (!mChildrenComponents.isEmpty()) {
+ width += mChildrenComponents.get(0).minIntrinsicWidth(context);
+ }
+ return width;
+ }
+
+ @Override
+ public float minIntrinsicHeight(@NonNull RemoteContext context) {
+ float height = computeModifierDefinedHeight(context);
+ if (!mChildrenComponents.isEmpty()) {
+ height += mChildrenComponents.get(0).minIntrinsicHeight(context);
+ }
+ return height;
+ }
+
+ @Override
public void computeWrapSize(
@NonNull PaintContext context,
float maxWidth,
@@ -157,19 +176,35 @@
float childrenWidth = 0f;
float childrenHeight = 0f;
boolean changedVisibility = false;
+ int visibleChildren = 0;
+ ComponentMeasure self = measure.get(this);
+ self.clearVisibilityOverride();
+ if (selfWidth <= 0 || selfHeight <= 0) {
+ self.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ return true;
+ }
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ int visibility = childMeasure.getVisibility();
+ childMeasure.clearVisibilityOverride();
+ if (!childMeasure.isVisible()) {
continue;
}
- if (childrenWidth + childMeasure.getW() > selfWidth) {
- childMeasure.setVisibility(Visibility.GONE);
- changedVisibility = true;
+ if (childrenWidth + childMeasure.getW() > selfWidth
+ && childrenHeight + childMeasure.getH() > selfHeight) {
+ childMeasure.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ if (visibility != childMeasure.getVisibility()) {
+ changedVisibility = true;
+ }
} else {
childrenWidth += childMeasure.getW();
childrenHeight = Math.max(childrenHeight, childMeasure.getH());
+ visibleChildren++;
}
}
+ if (visibleChildren == 0) {
+ self.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ }
return changedVisibility;
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/ColumnLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/ColumnLayout.java
index 47a55b6..cda90c2 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/ColumnLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/ColumnLayout.java
@@ -138,7 +138,7 @@
for (Component c : mChildrenComponents) {
c.measure(context, 0f, maxWidth, 0f, currentMaxHeight, measure);
ComponentMeasure m = measure.get(c);
- if (m.getVisibility() != Visibility.GONE) {
+ if (!m.isGone()) {
size.setWidth(Math.max(size.getWidth(), m.getW()));
size.setHeight(size.getHeight() + m.getH());
visibleChildrens++;
@@ -164,7 +164,7 @@
for (Component child : mChildrenComponents) {
child.measure(context, minWidth, maxWidth, minHeight, mh, measure);
ComponentMeasure m = measure.get(child);
- if (m.getVisibility() != Visibility.GONE) {
+ if (!m.isGone()) {
mh -= m.getH();
}
}
@@ -172,11 +172,11 @@
}
@Override
- public float intrinsicHeight(@NonNull RemoteContext context) {
+ public float minIntrinsicHeight(@NonNull RemoteContext context) {
float height = computeModifierDefinedHeight(context);
float componentHeights = 0f;
for (Component c : mChildrenComponents) {
- componentHeights += c.intrinsicHeight(context);
+ componentHeights += c.minIntrinsicHeight(context);
}
return Math.max(height, componentHeights);
}
@@ -225,7 +225,7 @@
float totalWeights = 0f;
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
if (child instanceof LayoutComponent
@@ -242,7 +242,7 @@
if (child instanceof LayoutComponent
&& ((LayoutComponent) child).getHeightModifier().hasWeight()) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
float weight = ((LayoutComponent) child).getHeightModifier().getValue();
@@ -280,7 +280,7 @@
int visibleChildrens = 0;
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
childrenWidth = Math.max(childrenWidth, childMeasure.getW());
@@ -307,17 +307,22 @@
case SPACE_BETWEEN:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getH();
}
- verticalGap = (selfHeight - total) / (visibleChildrens - 1);
+ if (visibleChildrens > 1) {
+ verticalGap = (selfHeight - total) / (visibleChildrens - 1);
+ } else {
+ // we center the element
+ ty = (selfHeight - childrenHeight) / 2f;
+ }
break;
case SPACE_EVENLY:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getH();
@@ -328,7 +333,7 @@
case SPACE_AROUND:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getH();
@@ -353,7 +358,7 @@
}
childMeasure.setX(tx);
childMeasure.setY(ty);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
ty += childMeasure.getH();
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/FitBoxLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/FitBoxLayout.java
new file mode 100644
index 0000000..ff7a3af
--- /dev/null
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/FitBoxLayout.java
@@ -0,0 +1,371 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.internal.widget.remotecompose.core.operations.layout.managers;
+
+import static com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation.INT;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import com.android.internal.widget.remotecompose.core.Operation;
+import com.android.internal.widget.remotecompose.core.Operations;
+import com.android.internal.widget.remotecompose.core.PaintContext;
+import com.android.internal.widget.remotecompose.core.WireBuffer;
+import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.operations.layout.Component;
+import com.android.internal.widget.remotecompose.core.operations.layout.LayoutComponent;
+import com.android.internal.widget.remotecompose.core.operations.layout.measure.ComponentMeasure;
+import com.android.internal.widget.remotecompose.core.operations.layout.measure.MeasurePass;
+import com.android.internal.widget.remotecompose.core.operations.layout.measure.Size;
+import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightInModifierOperation;
+import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.HeightModifierOperation;
+import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.WidthInModifierOperation;
+import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.WidthModifierOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+
+import java.util.List;
+
+/** FitBox layout implementation -- only display the child that fits in the available space */
+public class FitBoxLayout extends LayoutManager {
+
+ public static final int START = 1;
+ public static final int CENTER = 2;
+ public static final int END = 3;
+ public static final int TOP = 4;
+ public static final int BOTTOM = 5;
+
+ int mHorizontalPositioning;
+ int mVerticalPositioning;
+
+ public FitBoxLayout(
+ @Nullable Component parent,
+ int componentId,
+ int animationId,
+ float x,
+ float y,
+ float width,
+ float height,
+ int horizontalPositioning,
+ int verticalPositioning) {
+ super(parent, componentId, animationId, x, y, width, height);
+ mHorizontalPositioning = horizontalPositioning;
+ mVerticalPositioning = verticalPositioning;
+ }
+
+ public FitBoxLayout(
+ @Nullable Component parent,
+ int componentId,
+ int animationId,
+ int horizontalPositioning,
+ int verticalPositioning) {
+ this(
+ parent,
+ componentId,
+ animationId,
+ 0,
+ 0,
+ 0,
+ 0,
+ horizontalPositioning,
+ verticalPositioning);
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return "BOX ["
+ + mComponentId
+ + ":"
+ + mAnimationId
+ + "] ("
+ + mX
+ + ", "
+ + mY
+ + " - "
+ + mWidth
+ + " x "
+ + mHeight
+ + ") "
+ + mVisibility;
+ }
+
+ @NonNull
+ @Override
+ protected String getSerializedName() {
+ return "FITBOX";
+ }
+
+ @Override
+ public void computeWrapSize(
+ @NonNull PaintContext context,
+ float maxWidth,
+ float maxHeight,
+ boolean horizontalWrap,
+ boolean verticalWrap,
+ @NonNull MeasurePass measure,
+ @NonNull Size size) {
+
+ boolean found = false;
+ ComponentMeasure self = measure.get(this);
+ for (Component c : mChildrenComponents) {
+ float cw = 0f; // c.intrinsicWidth(context.getContext());
+ float ch = 0f; // c.intrinsicHeight(context.getContext());
+ if (c instanceof LayoutComponent) {
+ LayoutComponent lc = (LayoutComponent) c;
+ WidthModifierOperation widthModifier = lc.getWidthModifier();
+ if (widthModifier != null) {
+ WidthInModifierOperation widthIn = lc.getWidthModifier().getWidthIn();
+ if (widthIn != null) {
+ cw = widthIn.getMin();
+ }
+ }
+ HeightModifierOperation heightModifier = lc.getHeightModifier();
+ if (heightModifier != null) {
+ HeightInModifierOperation heightIn = lc.getHeightModifier().getHeightIn();
+ if (heightIn != null) {
+ ch = heightIn.getMin();
+ }
+ }
+ }
+ c.measure(context, 0f, maxWidth, 0f, maxHeight, measure);
+ ComponentMeasure m = measure.get(c);
+ if (!found && cw <= maxWidth && ch <= maxHeight) {
+ found = true;
+ m.addVisibilityOverride(Visibility.OVERRIDE_VISIBLE);
+ size.setWidth(m.getW());
+ size.setHeight(m.getH());
+ } else {
+ m.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ }
+ }
+ if (!found) {
+ self.setVisibility(Visibility.GONE);
+ } else {
+ self.setVisibility(Visibility.VISIBLE);
+ }
+
+ // add padding
+ size.setWidth(Math.max(size.getWidth(), computeModifierDefinedWidth(context.getContext())));
+ size.setHeight(
+ Math.max(size.getHeight(), computeModifierDefinedHeight(context.getContext())));
+ }
+
+ @Override
+ public void computeSize(
+ @NonNull PaintContext context,
+ float minWidth,
+ float maxWidth,
+ float minHeight,
+ float maxHeight,
+ @NonNull MeasurePass measure) {
+
+ ComponentMeasure self = measure.get(this);
+ boolean found = false;
+ for (Component c : mChildrenComponents) {
+ float cw = 0f;
+ float ch = 0f;
+ if (c instanceof LayoutComponent) {
+ LayoutComponent lc = (LayoutComponent) c;
+ WidthModifierOperation widthModifier = lc.getWidthModifier();
+ if (widthModifier != null) {
+ WidthInModifierOperation widthIn = lc.getWidthModifier().getWidthIn();
+ if (widthIn != null) {
+ cw = widthIn.getMin();
+ }
+ }
+ HeightModifierOperation heightModifier = lc.getHeightModifier();
+ if (heightModifier != null) {
+ HeightInModifierOperation heightIn = lc.getHeightModifier().getHeightIn();
+ if (heightIn != null) {
+ ch = heightIn.getMin();
+ }
+ }
+ }
+ c.measure(context, minWidth, maxWidth, minHeight, maxHeight, measure);
+ // child.measure(context, minWidth, Float.MAX_VALUE, minHeight,
+ // Float.MAX_VALUE, measure);
+ // m.getVisibility().clearOverride();
+ ComponentMeasure m = measure.get(c);
+ // m.setVisibility(Visibility.GONE);
+ // m.getVisibility().add(Visibility.OVERRIDE_GONE);
+ // m.getVisibility().add(Visibility.OVERRIDE_GONE);
+ m.clearVisibilityOverride();
+ if (!found && cw <= maxWidth && ch <= maxHeight) {
+ found = true;
+ m.addVisibilityOverride(Visibility.OVERRIDE_VISIBLE);
+ } else {
+ m.addVisibilityOverride(Visibility.OVERRIDE_GONE);
+ }
+ }
+ }
+
+ @Override
+ public void internalLayoutMeasure(@NonNull PaintContext context, @NonNull MeasurePass measure) {
+ ComponentMeasure selfMeasure = measure.get(this);
+ float selfWidth = selfMeasure.getW() - mPaddingLeft - mPaddingRight;
+ float selfHeight = selfMeasure.getH() - mPaddingTop - mPaddingBottom;
+ applyVisibility(selfWidth, selfHeight, measure);
+ for (Component child : mChildrenComponents) {
+ ComponentMeasure m = measure.get(child);
+ float tx = 0f;
+ float ty = 0f;
+ switch (mVerticalPositioning) {
+ case TOP:
+ ty = 0f;
+ break;
+ case CENTER:
+ ty = (selfHeight - m.getH()) / 2f;
+ break;
+ case BOTTOM:
+ ty = selfHeight - m.getH();
+ break;
+ }
+ switch (mHorizontalPositioning) {
+ case START:
+ tx = 0f;
+ break;
+ case CENTER:
+ tx = (selfWidth - m.getW()) / 2f;
+ break;
+ case END:
+ tx = selfWidth - m.getW();
+ break;
+ }
+ m.setX(tx);
+ m.setY(ty);
+ }
+ }
+
+ /**
+ * The name of the class
+ *
+ * @return the name
+ */
+ @NonNull
+ public static String name() {
+ return "BoxLayout";
+ }
+
+ /**
+ * The OP_CODE for this command
+ *
+ * @return the opcode
+ */
+ public static int id() {
+ return Operations.LAYOUT_FIT_BOX;
+ }
+
+ /**
+ * Write the operation to the buffer
+ *
+ * @param buffer a WireBuffer
+ * @param componentId the component id
+ * @param animationId the component animation id
+ * @param horizontalPositioning the horizontal positioning rules
+ * @param verticalPositioning the vertical positioning rules
+ */
+ public static void apply(
+ @NonNull WireBuffer buffer,
+ int componentId,
+ int animationId,
+ int horizontalPositioning,
+ int verticalPositioning) {
+ buffer.start(id());
+ buffer.writeInt(componentId);
+ buffer.writeInt(animationId);
+ buffer.writeInt(horizontalPositioning);
+ buffer.writeInt(verticalPositioning);
+ }
+
+ /**
+ * Read this operation and add it to the list of operations
+ *
+ * @param buffer the buffer to read
+ * @param operations the list of operations that will be added to
+ */
+ public static void read(@NonNull WireBuffer buffer, @NonNull List<Operation> operations) {
+ int componentId = buffer.readInt();
+ int animationId = buffer.readInt();
+ int horizontalPositioning = buffer.readInt();
+ int verticalPositioning = buffer.readInt();
+ operations.add(
+ new FitBoxLayout(
+ null,
+ componentId,
+ animationId,
+ horizontalPositioning,
+ verticalPositioning));
+ }
+
+ /**
+ * Populate the documentation with a description of this operation
+ *
+ * @param doc to append the description to.
+ */
+ public static void documentation(@NonNull DocumentationBuilder doc) {
+ doc.operation("Layout Operations", id(), name())
+ .description(
+ "FitBox layout implementation.\n\n"
+ + "Only display the first child component that fits in the available"
+ + " space")
+ .examplesDimension(150, 100)
+ .exampleImage("Top", "layout-BoxLayout-start-top.png")
+ .exampleImage("Center", "layout-BoxLayout-center-center.png")
+ .exampleImage("Bottom", "layout-BoxLayout-end-bottom.png")
+ .field(INT, "COMPONENT_ID", "unique id for this component")
+ .field(
+ INT,
+ "ANIMATION_ID",
+ "id used to match components," + " for animation purposes")
+ .field(INT, "HORIZONTAL_POSITIONING", "horizontal positioning value")
+ .possibleValues("START", FitBoxLayout.START)
+ .possibleValues("CENTER", FitBoxLayout.CENTER)
+ .possibleValues("END", FitBoxLayout.END)
+ .field(INT, "VERTICAL_POSITIONING", "vertical positioning value")
+ .possibleValues("TOP", FitBoxLayout.TOP)
+ .possibleValues("CENTER", FitBoxLayout.CENTER)
+ .possibleValues("BOTTOM", FitBoxLayout.BOTTOM);
+ }
+
+ @Override
+ public void write(@NonNull WireBuffer buffer) {
+ apply(buffer, mComponentId, mAnimationId, mHorizontalPositioning, mVerticalPositioning);
+ }
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ super.serialize(serializer);
+ serializer.add("verticalPositioning", getPositioningString(mVerticalPositioning));
+ serializer.add("horizontalPositioning", getPositioningString(mHorizontalPositioning));
+ }
+
+ private String getPositioningString(int pos) {
+ switch (pos) {
+ case START:
+ return "START";
+ case CENTER:
+ return "CENTER";
+ case END:
+ return "END";
+ case TOP:
+ return "TOP";
+ case BOTTOM:
+ return "BOTTOM";
+ default:
+ return "NONE";
+ }
+ }
+}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/LayoutManager.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/LayoutManager.java
index 8b52bbe..5b66b95 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/LayoutManager.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/LayoutManager.java
@@ -73,19 +73,19 @@
}
@Override
- public float intrinsicHeight(@Nullable RemoteContext context) {
+ public float minIntrinsicHeight(@Nullable RemoteContext context) {
float height = computeModifierDefinedHeight(context);
for (Component c : mChildrenComponents) {
- height = Math.max(c.intrinsicHeight(context), height);
+ height = Math.max(c.minIntrinsicHeight(context), height);
}
return height;
}
@Override
- public float intrinsicWidth(@Nullable RemoteContext context) {
+ public float minIntrinsicWidth(@Nullable RemoteContext context) {
float width = computeModifierDefinedWidth(context);
for (Component c : mChildrenComponents) {
- width = Math.max(c.intrinsicWidth(context), width);
+ width = Math.max(c.minIntrinsicWidth(context), width);
}
return width;
}
@@ -149,10 +149,10 @@
Math.min(maxHeight, computeModifierDefinedHeight(context.getContext()));
if (mWidthModifier.isIntrinsicMin()) {
- maxWidth = intrinsicWidth(context.getContext()) + mPaddingLeft + mPaddingRight;
+ maxWidth = minIntrinsicWidth(context.getContext()) + mPaddingLeft + mPaddingRight;
}
if (mHeightModifier.isIntrinsicMin()) {
- maxHeight = intrinsicHeight(context.getContext()) + mPaddingTop + mPaddingBottom;
+ maxHeight = minIntrinsicHeight(context.getContext()) + mPaddingTop + mPaddingBottom;
}
float insetMaxWidth = maxWidth - mPaddingLeft - mPaddingRight;
@@ -171,6 +171,11 @@
mHeightModifier.isWrap(),
measure,
mCachedWrapSize);
+ int selfVisibilityAfterMeasure = measure.get(this).getVisibility();
+ if (Visibility.hasOverride(selfVisibilityAfterMeasure)
+ && mScheduledVisibility != selfVisibilityAfterMeasure) {
+ mScheduledVisibility = selfVisibilityAfterMeasure;
+ }
measuredWidth = mCachedWrapSize.getWidth();
if (hasHorizontalWrap) {
measuredWidth += mPaddingLeft + mPaddingRight;
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/RowLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/RowLayout.java
index e93cbd7..d5d2e03 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/RowLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/RowLayout.java
@@ -136,7 +136,7 @@
for (Component c : mChildrenComponents) {
c.measure(context, 0f, currentMaxWidth, 0f, maxHeight, measure);
ComponentMeasure m = measure.get(c);
- if (m.getVisibility() != Visibility.GONE) {
+ if (!m.isGone()) {
size.setWidth(size.getWidth() + m.getW());
size.setHeight(Math.max(size.getHeight(), m.getH()));
visibleChildrens++;
@@ -162,7 +162,7 @@
for (Component child : mChildrenComponents) {
child.measure(context, minWidth, mw, minHeight, maxHeight, measure);
ComponentMeasure m = measure.get(child);
- if (m.getVisibility() != Visibility.GONE) {
+ if (!m.isGone()) {
mw -= m.getW();
}
}
@@ -170,16 +170,26 @@
}
@Override
- public float intrinsicWidth(@Nullable RemoteContext context) {
+ public float minIntrinsicWidth(@Nullable RemoteContext context) {
float width = computeModifierDefinedWidth(context);
float componentWidths = 0f;
for (Component c : mChildrenComponents) {
- componentWidths += c.intrinsicWidth(context);
+ componentWidths += c.minIntrinsicWidth(context);
}
return Math.max(width, componentWidths);
}
@Override
+ public float minIntrinsicHeight(@Nullable RemoteContext context) {
+ float height = computeModifierDefinedHeight(context);
+ float componentHeights = 0f;
+ for (Component c : mChildrenComponents) {
+ componentHeights = Math.max(componentHeights, c.minIntrinsicHeight(context));
+ }
+ return Math.max(height, componentHeights);
+ }
+
+ @Override
public void internalLayoutMeasure(@NonNull PaintContext context, @NonNull MeasurePass measure) {
ComponentMeasure selfMeasure = measure.get(this);
DebugLog.s(
@@ -225,7 +235,7 @@
float totalWeights = 0f;
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
if (child instanceof LayoutComponent
@@ -245,7 +255,7 @@
if (child instanceof LayoutComponent
&& ((LayoutComponent) child).getWidthModifier().hasWeight()) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
float weight = ((LayoutComponent) child).getWidthModifier().getValue();
@@ -283,7 +293,7 @@
int visibleChildrens = 0;
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
childrenWidth += childMeasure.getW();
@@ -311,17 +321,22 @@
case SPACE_BETWEEN:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getW();
}
- horizontalGap = (selfWidth - total) / (visibleChildrens - 1);
+ if (visibleChildrens > 1) {
+ horizontalGap = (selfWidth - total) / (visibleChildrens - 1);
+ } else {
+ // we center the element
+ tx = (selfWidth - childrenWidth) / 2f;
+ }
break;
case SPACE_EVENLY:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getW();
@@ -332,7 +347,7 @@
case SPACE_AROUND:
for (Component child : mChildrenComponents) {
ComponentMeasure childMeasure = measure.get(child);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
total += childMeasure.getW();
@@ -357,7 +372,7 @@
}
childMeasure.setX(tx);
childMeasure.setY(ty);
- if (childMeasure.getVisibility() == Visibility.GONE) {
+ if (childMeasure.isGone()) {
continue;
}
tx += childMeasure.getW();
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/StateLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/StateLayout.java
index ee16bc2..0192d84 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/StateLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/StateLayout.java
@@ -413,7 +413,7 @@
if (index != currentLayoutIndex && index != previousLayoutIndex) {
pane.mVisibility = Visibility.GONE;
}
- if (index == currentLayoutIndex && pane.mVisibility != Visibility.VISIBLE) {
+ if (index == currentLayoutIndex && !pane.isVisible()) {
pane.mVisibility = Visibility.VISIBLE;
}
index++;
@@ -511,7 +511,7 @@
&& previousLayout.mAnimateMeasure == null) {
inTransition = false;
LayoutManager previous = getLayout(previousLayoutIndex);
- if (previous != currentLayout && previous.mVisibility != Visibility.GONE) {
+ if (previous != currentLayout && !previous.isGone()) {
previous.mVisibility = Visibility.GONE;
previous.needsRepaint();
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
index d5db74b..2595a71 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
@@ -280,7 +280,7 @@
+ " x "
+ mHeight
+ ") "
- + mVisibility;
+ + Visibility.toString(mVisibility);
}
@NonNull
@@ -308,7 +308,7 @@
+ ", "
+ mHeight
+ "] "
- + mVisibility
+ + Visibility.toString(mVisibility)
+ " ("
+ mTextId
+ ":\""
@@ -343,7 +343,7 @@
flags |= PaintContext.TEXT_COMPLEX;
}
context.getTextBounds(mTextId, 0, mCachedString.length(), flags, bounds);
- if (bounds[2] - bounds[1] > maxWidth && mMaxLines > 1) {
+ if (bounds[2] - bounds[1] > maxWidth && mMaxLines > 1 && maxWidth > 0f) {
mComputedTextLayout =
context.layoutComplexText(
mTextId,
@@ -375,12 +375,12 @@
}
@Override
- public float intrinsicHeight(@Nullable RemoteContext context) {
+ public float minIntrinsicHeight(@Nullable RemoteContext context) {
return mTextH;
}
@Override
- public float intrinsicWidth(@Nullable RemoteContext context) {
+ public float minIntrinsicWidth(@Nullable RemoteContext context) {
return mTextW;
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/measure/ComponentMeasure.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/measure/ComponentMeasure.java
index 11ed9f4..9934419 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/measure/ComponentMeasure.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/measure/ComponentMeasure.java
@@ -26,7 +26,7 @@
float mY;
float mW;
float mH;
- @NonNull Component.Visibility mVisibility = Component.Visibility.VISIBLE;
+ int mVisibility = Component.Visibility.VISIBLE;
public void setX(float value) {
mX = value;
@@ -60,16 +60,15 @@
return mH;
}
- public @NonNull Component.Visibility getVisibility() {
+ public int getVisibility() {
return mVisibility;
}
- public void setVisibility(@NonNull Component.Visibility visibility) {
+ public void setVisibility(int visibility) {
mVisibility = visibility;
}
- public ComponentMeasure(
- int id, float x, float y, float w, float h, @NonNull Component.Visibility visibility) {
+ public ComponentMeasure(int id, float x, float y, float w, float h, int visibility) {
this.mId = id;
this.mX = x;
this.mY = y;
@@ -114,4 +113,42 @@
public boolean same(@NonNull ComponentMeasure m) {
return mX == m.mX && mY == m.mY && mW == m.mW && mH == m.mH && mVisibility == m.mVisibility;
}
+
+ /**
+ * Returns true if the component will be gone
+ *
+ * @return true if gone
+ */
+ public boolean isGone() {
+ return Component.Visibility.isGone(mVisibility);
+ }
+
+ /**
+ * Returns true if the component will be visible
+ *
+ * @return true if visible
+ */
+ public boolean isVisible() {
+ return Component.Visibility.isVisible(mVisibility);
+ }
+
+ /**
+ * Returns true if the component will be invisible
+ *
+ * @return true if invisible
+ */
+ public boolean isInvisible() {
+ return Component.Visibility.isInvisible(mVisibility);
+ }
+
+ /** Clear any override on the visibility */
+ public void clearVisibilityOverride() {
+ mVisibility = Component.Visibility.clearOverride(mVisibility);
+ }
+
+ /** Add a visibility override */
+ public void addVisibilityOverride(int value) {
+ mVisibility = Component.Visibility.clearOverride(mVisibility);
+ mVisibility = Component.Visibility.add(mVisibility, value);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
index fd5f8c9..1ab0c3d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
@@ -228,7 +228,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "BackgroundModifierOperation")
+ .addType("BackgroundModifierOperation")
.add("x", mX)
.add("y", mY)
.add("width", mWidth)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
index e5f3183..656a3c0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
@@ -290,7 +290,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "BorderModifierOperation")
+ .addType("BorderModifierOperation")
.add("x", mX)
.add("y", mY)
.add("width", mWidth)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ClipRectModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ClipRectModifierOperation.java
index 00a5317..e96dc83 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ClipRectModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ClipRectModifierOperation.java
@@ -111,7 +111,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "ClipRectModifierOperation")
+ .addType("ClipRectModifierOperation")
.add("width", mWidth)
.add("height", mHeight);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentModifiers.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentModifiers.java
index a9e3421..14b2fad 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentModifiers.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentModifiers.java
@@ -327,7 +327,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "ComponentModifiers")
+ .addType("ComponentModifiers")
.add("modifiers", mList);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentVisibilityOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentVisibilityOperation.java
index fbf8a95..88b28c3 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentVisibilityOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ComponentVisibilityOperation.java
@@ -41,7 +41,7 @@
private static final int OP_CODE = Operations.MODIFIER_VISIBILITY;
int mVisibilityId;
- @NonNull Component.Visibility mVisibility = Component.Visibility.VISIBLE;
+ int mVisibility = Component.Visibility.VISIBLE;
private LayoutComponent mParent;
public ComponentVisibilityOperation(int id) {
@@ -124,11 +124,11 @@
@Override
public void updateVariables(@NonNull RemoteContext context) {
int visibility = context.getInteger(mVisibilityId);
- if (visibility == Component.Visibility.VISIBLE.ordinal()) {
+ if (Component.Visibility.isVisible(visibility)) {
mVisibility = Component.Visibility.VISIBLE;
- } else if (visibility == Component.Visibility.GONE.ordinal()) {
+ } else if (Component.Visibility.isGone(visibility)) {
mVisibility = Component.Visibility.GONE;
- } else if (visibility == Component.Visibility.INVISIBLE.ordinal()) {
+ } else if (Component.Visibility.isInvisible(visibility)) {
mVisibility = Component.Visibility.INVISIBLE;
} else {
mVisibility = Component.Visibility.GONE;
@@ -150,8 +150,8 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "ComponentVisibilityOperation")
+ .addType("ComponentVisibilityOperation")
.add("visibilityId", mVisibilityId)
- .add("visibility", mVisibility);
+ .add("visibility", Component.Visibility.toString(mVisibility));
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/DrawContentOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/DrawContentOperation.java
index d7abdba..6beb135 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/DrawContentOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/DrawContentOperation.java
@@ -120,6 +120,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.addTags(SerializeTags.MODIFIER).add("type", "DrawContentOperation");
+ serializer.addTags(SerializeTags.MODIFIER).addType("DrawContentOperation");
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/GraphicsLayerModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/GraphicsLayerModifierOperation.java
index c1c1f95..361438b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/GraphicsLayerModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/GraphicsLayerModifierOperation.java
@@ -352,7 +352,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "GraphicsLayerModifierOperation")
+ .addType("GraphicsLayerModifierOperation")
.add("scaleX", mScaleX)
.add("scaleX", mScaleX)
.add("rotationX", mRotationX)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightInModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightInModifierOperation.java
index 7f0dd8d..9b63c03 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightInModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightInModifierOperation.java
@@ -107,7 +107,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "HeightInModifierOperation")
+ .addType("HeightInModifierOperation")
.add("min", mV1, mValue1)
.add("max", mV2, mValue2);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightModifierOperation.java
index 1df8425..5fbaafc 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HeightModifierOperation.java
@@ -143,7 +143,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "HeightModifierOperation")
+ .addType("HeightModifierOperation")
.add("height", mValue, mOutValue)
.add("dimensionModifierType", mType);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostActionOperation.java
index 67714ef..4d8acb4 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostActionOperation.java
@@ -130,7 +130,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "HostActionOperation")
+ .addType("HostActionOperation")
.add("id", mActionId);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostNamedActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostNamedActionOperation.java
index 40c13f14..807ff68 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostNamedActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/HostNamedActionOperation.java
@@ -157,7 +157,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "HostNamedActionOperation")
+ .addType("HostNamedActionOperation")
.add("textId", mTextId)
.add("actionType", getActionType(mType))
.add("valueId", mValueId);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/MarqueeModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/MarqueeModifierOperation.java
index d2a1684..c493e25 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/MarqueeModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/MarqueeModifierOperation.java
@@ -247,8 +247,8 @@
mComponentHeight = height;
if (component instanceof LayoutComponent) {
LayoutComponent layoutComponent = (LayoutComponent) component;
- setContentWidth(layoutComponent.intrinsicWidth(context));
- setContentHeight(layoutComponent.intrinsicHeight(context));
+ setContentWidth(layoutComponent.minIntrinsicWidth(context));
+ setContentHeight(layoutComponent.minIntrinsicHeight(context));
}
}
@@ -256,7 +256,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "MarqueeModifierOperation")
+ .addType("MarqueeModifierOperation")
.add("iterations", mIterations)
.add("animationMode", mAnimationMode)
.add("repeatDelayMillis", mRepeatDelayMillis)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/OffsetModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/OffsetModifierOperation.java
index b7fe97b..37f56cb 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/OffsetModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/OffsetModifierOperation.java
@@ -162,7 +162,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "OffsetModifierOperation")
+ .addType("OffsetModifierOperation")
.add("x", mX)
.add("y", mY);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/PaddingModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/PaddingModifierOperation.java
index d5b3a0b..0156992 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/PaddingModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/PaddingModifierOperation.java
@@ -184,7 +184,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "PaddingModifierOperation")
+ .addType("PaddingModifierOperation")
.add("left", mLeft)
.add("top", mTop)
.add("right", mRight)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
index 69ace84..eb5bfcf 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
@@ -217,7 +217,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "RippleModifierOperation")
+ .addType("RippleModifierOperation")
.add("animateRippleStart", mAnimateRippleStart)
.add("animateRippleX", mAnimateRippleX)
.add("animateRippleY", mAnimateRippleY)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RoundedClipRectModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RoundedClipRectModifierOperation.java
index 8442e05..f0ed905 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RoundedClipRectModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RoundedClipRectModifierOperation.java
@@ -167,7 +167,7 @@
public void serialize(MapSerializer serializer) {
serialize(serializer, "topStart", "topEnd", "bottomStart", "bottomEnd")
.addTags(SerializeTags.MODIFIER)
- .add("type", CLASS_NAME)
+ .addType(CLASS_NAME)
.add("width", mWidth)
.add("height", mHeight);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ScrollModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ScrollModifierOperation.java
index a57365e..466e435e 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ScrollModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ScrollModifierOperation.java
@@ -397,7 +397,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "ScrollModifierOperation")
+ .addType("ScrollModifierOperation")
.add("direction", mDirection)
.add("max", mMax)
.add("notchMax", mNotchMax)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatChangeActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatChangeActionOperation.java
index bd91734..171e2be 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatChangeActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatChangeActionOperation.java
@@ -126,7 +126,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.ACTION)
- .add("type", "ValueFloatChangeActionOperation")
+ .addType("ValueFloatChangeActionOperation")
.add("targetValueId", mTargetValueId)
.add("value", mValue);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatExpressionChangeActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatExpressionChangeActionOperation.java
index 4b18d0a..d8133f6 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatExpressionChangeActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueFloatExpressionChangeActionOperation.java
@@ -133,7 +133,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.ACTION)
- .add("type", "ValueFloatExpressionChangeActionOperation")
+ .addType("ValueFloatExpressionChangeActionOperation")
.add("targetValueId", mTargetValueId)
.add("valueExpressionId", mValueExpressionId);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerChangeActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerChangeActionOperation.java
index d86c4a6..05a6fd0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerChangeActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerChangeActionOperation.java
@@ -131,7 +131,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.ACTION)
- .add("type", "ValueIntegerChangeActionOperation")
+ .addType("ValueIntegerChangeActionOperation")
.add("targetValueId", mTargetValueId)
.add("value", mValue);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerExpressionChangeActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerExpressionChangeActionOperation.java
index e253460..8994feb 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerExpressionChangeActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueIntegerExpressionChangeActionOperation.java
@@ -133,7 +133,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.ACTION)
- .add("type", "ValueIntegerExpressionChangeActionOperation")
+ .addType("ValueIntegerExpressionChangeActionOperation")
.add("targetValueId", mTargetValueId)
.add("valueExpressionId", mValueExpressionId);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueStringChangeActionOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueStringChangeActionOperation.java
index e84b299..08960d3 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueStringChangeActionOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ValueStringChangeActionOperation.java
@@ -139,7 +139,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.ACTION)
- .add("type", "ValueIntegerExpressionChangeActionOperation")
+ .addType("ValueIntegerExpressionChangeActionOperation")
.add("targetValueId", mTargetValueId)
.add("valueId", mValueId);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthInModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthInModifierOperation.java
index 3282a9c..93074c7 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthInModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthInModifierOperation.java
@@ -107,7 +107,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "WidthInModifierOperation")
+ .addType("WidthInModifierOperation")
.add("min", mV1, mValue1)
.add("max", mV2, mValue2);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthModifierOperation.java
index 6fe5a70..ebdafa2 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/WidthModifierOperation.java
@@ -143,7 +143,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "WidthModifierOperation")
+ .addType("WidthModifierOperation")
.add("width", mValue, mOutValue)
.add("dimensionModifierType", mType);
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ZIndexModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ZIndexModifierOperation.java
index f250951..ddb34b5 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ZIndexModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/ZIndexModifierOperation.java
@@ -147,7 +147,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER)
- .add("type", "ZIndexModifierOperation")
+ .addType("ZIndexModifierOperation")
.add("value", mValue);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java b/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
index 0f17b11..55b6436 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
@@ -1248,7 +1248,7 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", "PaintBundle");
+ serializer.addType("PaintBundle");
List<Map<String, Object>> list = new ArrayList<>();
int i = 0;
while (i < mPos) {
@@ -1336,6 +1336,7 @@
serializer.add("operations", list);
}
+ @SuppressWarnings("JdkImmutableCollections")
private static Map<String, Object> getVariable(int value) {
float fValue = Float.intBitsToFloat(value);
if (Float.isNaN(fValue)) {
@@ -1344,6 +1345,7 @@
return orderedOf("type", "Value", "value", fValue);
}
+ @SuppressWarnings("JdkImmutableCollections")
private static int serializeGradient(
int cmd, int[] array, int i, List<Map<String, Object>> list) {
int ret = i;
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
index cad7605..349ab61 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
@@ -34,8 +34,10 @@
private float mWrap = Float.NaN;
private float mInitialValue = Float.NaN;
private float mTargetValue = Float.NaN;
+ private int mDirectionalSnap = 0;
// private float mScale = 1;
float mOffset = 0;
+ private boolean mPropagate = false;
@NonNull
@Override
@@ -161,11 +163,15 @@
int type = 0;
float wrapValue = Float.NaN;
float initialValue = Float.NaN;
+ int directionalSnap = 0;
+ boolean propagate = false;
if (mSpec.length > 1) {
int num_type = Float.floatToRawIntBits(mSpec[1]);
type = num_type & 0xFF;
boolean wrap = ((num_type >> 8) & 0x1) > 0;
boolean init = ((num_type >> 8) & 0x2) > 0;
+ directionalSnap = (num_type >> 10) & 0x3;
+ propagate = ((num_type >> 12) & 0x1) > 0;
len = (num_type >> 16) & 0xFFFF;
int off = 2 + len;
if (init) {
@@ -229,6 +235,12 @@
if (!Float.isNaN(wrapValue)) {
str += " wrap =" + wrapValue;
}
+ if (directionalSnap != 0) {
+ str += " directionalSnap=" + directionalSnap;
+ }
+ if (propagate) {
+ str += " propagate";
+ }
return str;
}
@@ -246,6 +258,8 @@
mType = num_type & 0xFF;
boolean wrap = ((num_type >> 8) & 0x1) > 0;
boolean init = ((num_type >> 8) & 0x2) > 0;
+ int directional = (num_type >> 10) & 0x3;
+ boolean propagate = ((num_type >> 12) & 0x1) > 0;
len = (num_type >> 16) & 0xFFFF;
int off = 2 + len;
if (init) {
@@ -254,6 +268,8 @@
if (wrap) {
mWrap = mSpec[off];
}
+ mDirectionalSnap = directional;
+ mPropagate = propagate;
}
create(mType, description, 2, len);
}
@@ -347,7 +363,13 @@
float dist = wrapDistance(mWrap, mInitialValue, mTargetValue);
if ((dist > 0) && (mTargetValue < mInitialValue)) {
mTargetValue += mWrap;
- } else if ((dist < 0) && (mTargetValue > mInitialValue)) {
+ } else if ((dist < 0) && mDirectionalSnap != 0) {
+ if (mDirectionalSnap == 1 && mTargetValue > mInitialValue) {
+ mInitialValue = mTargetValue;
+ }
+ if (mDirectionalSnap == 2 && mTargetValue < mInitialValue) {
+ mInitialValue = mTargetValue;
+ }
mTargetValue -= mWrap;
}
}
@@ -377,6 +399,14 @@
/** get the value at time t in seconds since start */
@Override
public float get(float t) {
+ if (mDirectionalSnap == 1 && mTargetValue < mInitialValue) {
+ mInitialValue = mTargetValue;
+ return mTargetValue;
+ }
+ if (mDirectionalSnap == 2 && mTargetValue > mInitialValue) {
+ mInitialValue = mTargetValue;
+ return mTargetValue;
+ }
return mEasingCurve.get(t / mDuration) * (mTargetValue - mInitialValue) + mInitialValue;
}
@@ -387,6 +417,13 @@
}
/**
+ * @return if you should propagate the animation
+ */
+ public boolean isPropagate() {
+ return mPropagate;
+ }
+
+ /**
* Get the initial value
*
* @return the initial value
@@ -398,7 +435,7 @@
@Override
public void serialize(MapSerializer serializer) {
serializer
- .add("type", "FloatAnimation")
+ .addType("FloatAnimation")
.add("initialValue", mInitialValue)
.add("targetValue", mInitialValue)
.add("duration", mInitialValue)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/semantics/CoreSemantics.java b/core/java/com/android/internal/widget/remotecompose/core/semantics/CoreSemantics.java
index 08559fc..424894a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/semantics/CoreSemantics.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/semantics/CoreSemantics.java
@@ -161,7 +161,7 @@
public void serialize(MapSerializer serializer) {
serializer
.addTags(SerializeTags.MODIFIER, SerializeTags.A11Y)
- .add("type", "CoreSemantics")
+ .addType("CoreSemantics")
.add("contentDescriptionId", mContentDescriptionId)
.add("role", mRole)
.add("textId", mTextId)
diff --git a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
index f9ecf0f..20e94ab 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
@@ -25,11 +25,17 @@
public interface MapSerializer {
/**
+ * Adds a "type" field with this value
+ *
+ * @param type The name of the type
+ */
+ MapSerializer addType(String type);
+
+ /**
* Add a float expression
*
- * @param key
- * @param value
- * @return
+ * @param key The key
+ * @param value The float src
*/
MapSerializer addFloatExpressionSrc(String key, float[] value);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
index cb759a6..0da543f 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
@@ -131,6 +131,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ serializer.addType(CLASS_NAME).add("id", mId).add("value", mValue);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
index c734f81..bdc7659 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
@@ -123,6 +123,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ serializer.addType(CLASS_NAME).add("id", mId).add("value", mValue);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
index 50509f3..d071e0a2 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
@@ -35,9 +35,13 @@
private static final String CLASS_NAME = "LongConstant";
private static final int OP_CODE = Operations.DATA_LONG;
- private final long mValue;
+ private long mValue;
private final int mId;
+ /**
+ * @param id the id of the constant
+ * @param value the value of the constant
+ */
public LongConstant(int id, long value) {
mId = id;
mValue = value;
@@ -52,6 +56,15 @@
return mValue;
}
+ /**
+ * Set the value of the long constant
+ *
+ * @param value the value to set it to
+ */
+ public void setValue(long value) {
+ mValue = value;
+ }
+
@Override
public void write(@NonNull WireBuffer buffer) {
apply(buffer, mId, mValue);
@@ -114,6 +127,6 @@
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ serializer.addType(CLASS_NAME).add("id", mId).add("value", mValue);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
index 1d1e579..1f9a274 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
@@ -388,6 +388,16 @@
mInner.setColor(colorName, colorValue);
}
+ /**
+ * This sets long based on its name.
+ *
+ * @param name Name of the color
+ * @param value The new long value
+ */
+ public void setLong(String name, long value) {
+ mInner.setLong(name, value);
+ }
+
private void mapColors() {
String[] name = getNamedColors();
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
index ac4a294..b5aedd8 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
@@ -290,8 +290,8 @@
}
if ((flags & PaintContext.TEXT_MEASURE_FONT_HEIGHT) != 0) {
- bounds[1] = Math.round(mCachedFontMetrics.top);
- bounds[3] = Math.round(mCachedFontMetrics.bottom);
+ bounds[1] = Math.round(mCachedFontMetrics.ascent);
+ bounds[3] = Math.round(mCachedFontMetrics.descent);
} else {
bounds[1] = mTmpRect.top;
bounds[3] = mTmpRect.bottom;
@@ -344,6 +344,7 @@
default:
}
staticLayoutBuilder.setMaxLines(maxLines);
+ staticLayoutBuilder.setIncludePad(false);
StaticLayout staticLayout = staticLayoutBuilder.build();
return new AndroidComputedTextLayout(
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPlatformServices.java b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPlatformServices.java
index ba8d83b..51c42fe 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPlatformServices.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPlatformServices.java
@@ -60,6 +60,14 @@
}
@Override
+ public boolean isAlpha8Image(@NonNull Object image) {
+ if (image instanceof Bitmap) {
+ return ((Bitmap) image).getConfig().equals(Bitmap.Config.ALPHA_8);
+ }
+ return false;
+ }
+
+ @Override
@Nullable
public float[] pathToFloatArray(@NonNull Object path) {
// if (path is RemotePath) {
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidRemoteContext.java b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidRemoteContext.java
index 14349b0..b31c760 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidRemoteContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidRemoteContext.java
@@ -20,6 +20,7 @@
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
+import android.graphics.Paint;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.remotecompose.core.RemoteContext;
@@ -30,6 +31,7 @@
import com.android.internal.widget.remotecompose.core.operations.ShaderData;
import com.android.internal.widget.remotecompose.core.operations.utilities.ArrayAccess;
import com.android.internal.widget.remotecompose.core.operations.utilities.DataMap;
+import com.android.internal.widget.remotecompose.core.types.LongConstant;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -141,6 +143,16 @@
}
@Override
+ public void setNamedLong(String name, long value) {
+ VarName entry = mVarNameHashMap.get(name);
+ if (entry != null) {
+ int id = entry.mId;
+ LongConstant longConstant = (LongConstant) mRemoteComposeState.getObject(id);
+ longConstant.setValue(value);
+ }
+ }
+
+ @Override
public void setNamedDataOverride(String dataName, Object value) {
if (mVarNameHashMap.get(dataName) != null) {
int id = mVarNameHashMap.get(dataName).mId;
@@ -215,6 +227,27 @@
case BitmapData.TYPE_PNG_8888:
image = BitmapFactory.decodeByteArray(data, 0, data.length);
break;
+ case BitmapData.TYPE_PNG_ALPHA_8:
+ image = decodePreferringAlpha8(data);
+
+ // If needed convert to ALPHA_8.
+ if (!image.getConfig().equals(Bitmap.Config.ALPHA_8)) {
+ Bitmap alpha8Bitmap =
+ Bitmap.createBitmap(
+ image.getWidth(),
+ image.getHeight(),
+ Bitmap.Config.ALPHA_8);
+ Canvas canvas = new Canvas(alpha8Bitmap);
+ Paint paint = new Paint();
+ paint.setXfermode(
+ new android.graphics.PorterDuffXfermode(
+ android.graphics.PorterDuff.Mode.SRC));
+ canvas.drawBitmap(image, 0, 0, paint);
+ image.recycle(); // Release resources
+
+ image = alpha8Bitmap;
+ }
+ break;
case BitmapData.TYPE_RAW8888:
image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
int[] idata = new int[data.length / 4];
@@ -255,6 +288,12 @@
}
}
+ private Bitmap decodePreferringAlpha8(@NonNull byte[] data) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inPreferredConfig = Bitmap.Config.ALPHA_8;
+ return BitmapFactory.decodeByteArray(data, 0, data.length, options);
+ }
+
@Override
public void loadText(int id, @NonNull String text) {
if (!mRemoteComposeState.containsId(id)) {
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
index 4d2dd05..29cd40d 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
@@ -200,6 +200,16 @@
mARContext.setNamedColorOverride(colorName, colorValue);
}
+ /**
+ * set the value of a long associated with this name.
+ *
+ * @param name Name of color typically "android.xxx"
+ * @param value the long value
+ */
+ public void setLong(String name, long value) {
+ mARContext.setNamedLong(name, value);
+ }
+
public RemoteComposeDocument getDocument() {
return mDocument;
}
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/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index 34ec148..8de7746 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -111,6 +111,7 @@
optional SettingProto autoclick_cursor_area_size = 62 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto autoclick_ignore_minor_cursor_movement = 63 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto autoclick_panel_position = 64 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto autoclick_revert_to_left_click = 65 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional Accessibility accessibility = 2;
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ee6899c..e16ce98 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -8995,13 +8995,13 @@
<!-- @SystemApi
@FlaggedApi("android.permission.flags.text_classifier_choice_api_enabled")
- This permission is required to access the specific text classifier you need from the
+ This permission is required to access the specific text classifier from the
TextClassificationManager.
- <p>Protection level: signature|role
+ <p>Protection level: signature|role|privileged
@hide
-->
<permission android:name="android.permission.ACCESS_TEXT_CLASSIFIER_BY_TYPE"
- android:protectionLevel="signature|role"
+ android:protectionLevel="signature|role|privileged"
android:featureFlag="android.permission.flags.text_classifier_choice_api_enabled"/>
<!-- Attribution for Geofencing service. -->
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/drawable/ic_notification_summarization.xml b/core/res/res/drawable/ic_notification_summarization.xml
index d476872..acfd90e 100644
--- a/core/res/res/drawable/ic_notification_summarization.xml
+++ b/core/res/res/drawable/ic_notification_summarization.xml
@@ -16,9 +16,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
- android:tint="?android:attr/colorControlNormal"
- android:viewportHeight="960"
- android:viewportWidth="960">
- <path android:fillColor="#ffffff"
- android:pathData="M120,840L120,760L600,760L600,840L120,840ZM120,640L120,560L840,560L840,640L120,640ZM120,440L120,360L560,360L560,440L120,440ZM700,480Q700,388 636,324Q572,260 480,260Q572,260 636,196Q700,132 700,40Q700,132 764,196Q828,260 920,260Q828,260 764,324Q700,388 700,480Z"/>
+ android:tint="@color/materialColorPrimary"
+ android:viewportHeight="14"
+ android:viewportWidth="14">
+ <path
+ android:pathData="M10,9C9.986,9 9.979,8.993 9.979,8.979C9.979,8.431 9.875,7.917 9.667,7.438C9.465,6.958 9.184,6.538 8.823,6.177C8.462,5.816 8.042,5.535 7.563,5.333C7.083,5.125 6.569,5.021 6.021,5.021C6.007,5.021 6,5.014 6,5C6,4.986 6.007,4.979 6.021,4.979C6.569,4.979 7.083,4.878 7.563,4.677C8.042,4.469 8.462,4.184 8.823,3.823C9.184,3.462 9.465,3.042 9.667,2.563C9.875,2.083 9.979,1.569 9.979,1.021C9.979,1.007 9.986,1 10,1C10.014,1 10.021,1.007 10.021,1.021C10.021,1.569 10.122,2.083 10.323,2.563C10.531,3.042 10.816,3.462 11.177,3.823C11.538,4.184 11.958,4.469 12.438,4.677C12.917,4.878 13.431,4.979 13.979,4.979C13.993,4.979 14,4.986 14,5C14,5.014 13.993,5.021 13.979,5.021C13.431,5.021 12.917,5.125 12.438,5.333C11.958,5.535 11.538,5.816 11.177,6.177C10.816,6.538 10.531,6.958 10.323,7.438C10.122,7.917 10.021,8.431 10.021,8.979C10.021,8.993 10.014,9 10,9Z"
+ android:fillColor="#ffffff"/>
+ <path
+ android:pathData="M1,10.456C1,10.204 1.204,10 1.456,10H12.544C12.796,10 13,10.204 13,10.456V11.544C13,11.796 12.796,12 12.544,12H1.456C1.204,12 1,11.796 1,11.544V10.456Z"
+ android:fillColor="#ffffff"/>
+ <path
+ android:pathData="M1,7.456C1,7.204 1.204,7 1.456,7H6.544C6.796,7 7,7.204 7,7.456V8.544C7,8.796 6.796,9 6.544,9H1.456C1.204,9 1,8.796 1,8.544V7.456Z"
+ android:fillColor="#ffffff"/>
</vector>
\ No newline at end of file
diff --git a/core/res/res/layout/accessibility_autoclick_type_panel.xml b/core/res/res/layout/accessibility_autoclick_type_panel.xml
index cedbdc1..902ef7f 100644
--- a/core/res/res/layout/accessibility_autoclick_type_panel.xml
+++ b/core/res/res/layout/accessibility_autoclick_type_panel.xml
@@ -17,7 +17,7 @@
*/
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.server.accessibility.autoclick.AutoclickLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/accessibility_autoclick_type_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -130,4 +130,4 @@
</LinearLayout>
-</LinearLayout>
+</com.android.server.accessibility.autoclick.AutoclickLinearLayout>
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/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 9983c45..0905ae0 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -854,8 +854,21 @@
<aside class="note"><b>Note:</b>
<ul>
<li>To improve the layout of apps on form factors with smallest width >= 600dp, the
- system ignores this attribute for apps that target Android 16 (API level 36) or
- higher.</li>
+ system ignores the following values of this attribute for apps that target
+ Android 16 (API level 36) or higher:
+ <ul>
+ <li><code>portrait</code></li>
+ <li><code>landscape</code></li>
+ <li><code>reversePortrait</code></li>
+ <li><code>reverseLandscape</code></li>
+ <li><code>sensorPortrait</code></li>
+ <li><code>sensorLandscape</code></li>
+ <li><code>userPortrait</code></li>
+ <li><code>userLandscape</code></li>
+ </ul>
+ <p>The values are treated as if the app had set orientation as
+ <code>unspecified</code>.</p>
+ </li>
<li>Device manufacturers can configure devices to override (ignore) this attribute
to improve the layout of apps.</li>
<li>On devices with Android 16 (API level 36) or higher installed, virtual device
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/app/PropertyInvalidatedCacheTests.java b/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java
index ac78e87..f75a72d 100644
--- a/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java
+++ b/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java
@@ -414,16 +414,23 @@
@Test
@DisabledOnRavenwood(reason = "SystemProperties doesn't have permission check")
public void testPermissionFailure() {
- // Create a cache that will write a system nonce.
- TestCache sysCache = new TestCache(MODULE_SYSTEM, "mode1");
try {
- // Invalidate the cache, which writes the system property. There must be a permission
- // failure.
- sysCache.invalidateCache();
- fail("expected permission failure");
- } catch (RuntimeException e) {
- // The expected exception is a bare RuntimeException. The test does not attempt to
- // validate the text of the exception message.
+ // Disable the test mode for this test, but ensure that it will be enabled when the
+ // test exits.
+ PropertyInvalidatedCache.setTestMode(false);
+ // Create a cache that will write a system nonce.
+ TestCache sysCache = new TestCache(MODULE_SYSTEM, "mode1");
+ try {
+ // Invalidate the cache, which writes the system property. There must be a
+ // permission failure.
+ sysCache.invalidateCache();
+ fail("expected permission failure");
+ } catch (RuntimeException e) {
+ // The expected exception is a bare RuntimeException. The test does not attempt
+ // to validate the text of the exception message.
+ }
+ } finally {
+ PropertyInvalidatedCache.setTestMode(true);
}
}
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/os/IpcDataCacheTest.java b/core/tests/coretests/src/android/os/IpcDataCacheTest.java
index 74b32a1..791ec5d 100644
--- a/core/tests/coretests/src/android/os/IpcDataCacheTest.java
+++ b/core/tests/coretests/src/android/os/IpcDataCacheTest.java
@@ -452,22 +452,28 @@
assertTrue(ec.isDisabled());
}
-
// Verify that invalidating the cache from an app process would fail due to lack of permissions.
@Test
@android.platform.test.annotations.DisabledOnRavenwood(
reason = "SystemProperties doesn't have permission check")
public void testPermissionFailure() {
- // Create a cache that will write a system nonce.
- TestCache sysCache = new TestCache(IpcDataCache.MODULE_SYSTEM, "mode1");
try {
- // Invalidate the cache, which writes the system property. There must be a permission
- // failure.
- sysCache.invalidateCache();
- fail("expected permission failure");
- } catch (RuntimeException e) {
- // The expected exception is a bare RuntimeException. The test does not attempt to
- // validate the text of the exception message.
+ // Disable test mode for this test. Guarantee that the mode is enabled before the
+ // test exits.
+ IpcDataCache.setTestMode(false);
+ // Create a cache that will write a system nonce.
+ TestCache sysCache = new TestCache(IpcDataCache.MODULE_SYSTEM, "mode1");
+ try {
+ // Invalidate the cache, which writes the system property. There must be a
+ // permission failure.
+ sysCache.invalidateCache();
+ fail("expected permission failure");
+ } catch (RuntimeException e) {
+ // The expected exception is a bare RuntimeException. The test does not attempt
+ // to validate the text of the exception message.
+ }
+ } finally {
+ IpcDataCache.setTestMode(true);
}
}
diff --git a/core/tests/coretests/src/android/os/PerfettoTraceTest.java b/core/tests/coretests/src/android/os/PerfettoTraceTest.java
index 6915015..790ac4a 100644
--- a/core/tests/coretests/src/android/os/PerfettoTraceTest.java
+++ b/core/tests/coretests/src/android/os/PerfettoTraceTest.java
@@ -33,6 +33,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -611,6 +612,7 @@
@Test
@RequiresFlagsEnabled(android.os.Flags.FLAG_PERFETTO_SDK_TRACING_V2)
+ @Ignore("b/303199244")
public void testMessageQueue() throws Exception {
TraceConfig traceConfig = getTraceConfig("mq");
diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java
index f5d1e7a..39f3d33 100644
--- a/core/tests/coretests/src/android/view/ViewRootImplTest.java
+++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java
@@ -16,6 +16,8 @@
package android.view;
+import static android.app.UiModeManager.MODE_NIGHT_NO;
+import static android.app.UiModeManager.MODE_NIGHT_YES;
import static android.util.SequenceUtils.getInitSeq;
import static android.view.HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING;
import static android.view.InputDevice.SOURCE_ROTARY_ENCODER;
@@ -67,8 +69,10 @@
import android.annotation.NonNull;
import android.app.Instrumentation;
import android.app.UiModeManager;
+import android.app.UiModeManager.ForceInvertType;
import android.content.Context;
import android.graphics.ForceDarkType;
+import android.graphics.ForceDarkType.ForceDarkTypeDef;
import android.graphics.Rect;
import android.hardware.display.DisplayManagerGlobal;
import android.os.Binder;
@@ -93,9 +97,12 @@
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.compatibility.common.util.ShellIdentityUtils;
+import com.android.compatibility.common.util.TestUtils;
import com.android.cts.input.BlockingQueueEventVerifier;
import com.android.window.flags.Flags;
+import com.google.common.truth.Expect;
+
import org.hamcrest.Matcher;
import org.junit.After;
import org.junit.AfterClass;
@@ -124,6 +131,8 @@
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ @Rule
+ public final Expect mExpect = Expect.create();
private ViewRootImpl mViewRootImpl;
private View mView;
@@ -1507,49 +1516,34 @@
}
@Test
- public void forceInvertOffDarkThemeOff_forceDarkModeDisabled() {
- mSetFlagsRule.enableFlags(FLAG_FORCE_INVERT_COLOR);
- ShellIdentityUtils.invokeWithShellPermissions(() -> {
- Settings.Secure.putInt(
- sContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED,
- /* value= */ 0
- );
- var uiModeManager = sContext.getSystemService(UiModeManager.class);
- uiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
- });
+ @RequiresFlagsEnabled(FLAG_FORCE_INVERT_COLOR)
+ public void updateConfiguration_returnsExpectedForceDarkMode() {
+ waitForSystemNightModeActivated(true);
- sInstrumentation.runOnMainSync(() ->
- mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId())
- );
+ verifyForceDarkType(/* isAppInNightMode= */ true, /* isForceInvertEnabled= */ true,
+ UiModeManager.FORCE_INVERT_TYPE_DARK, ForceDarkType.FORCE_INVERT_COLOR_DARK);
+ verifyForceDarkType(/* isAppInNightMode= */ true, /* isForceInvertEnabled= */ false,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
+ verifyForceDarkType(/* isAppInNightMode= */ false, /* isForceInvertEnabled= */ true,
+ UiModeManager.FORCE_INVERT_TYPE_DARK, ForceDarkType.FORCE_INVERT_COLOR_DARK);
+ verifyForceDarkType(/* isAppInNightMode= */ false, /* isForceInvertEnabled= */ false,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
- assertThat(mViewRootImpl.determineForceDarkType()).isEqualTo(ForceDarkType.NONE);
+ waitForSystemNightModeActivated(false);
+
+ verifyForceDarkType(/* isAppInNightMode= */ true, /* isForceInvertEnabled= */ true,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
+ verifyForceDarkType(/* isAppInNightMode= */ true, /* isForceInvertEnabled= */ false,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
+ verifyForceDarkType(/* isAppInNightMode= */ false, /* isForceInvertEnabled= */ true,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
+ verifyForceDarkType(/* isAppInNightMode= */ false, /* isForceInvertEnabled= */ false,
+ UiModeManager.FORCE_INVERT_TYPE_OFF, ForceDarkType.NONE);
}
@Test
- public void forceInvertOnDarkThemeOff_forceDarkModeEnabled() {
- mSetFlagsRule.enableFlags(FLAG_FORCE_INVERT_COLOR);
- ShellIdentityUtils.invokeWithShellPermissions(() -> {
- Settings.Secure.putInt(
- sContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED,
- /* value= */ 1
- );
- var uiModeManager = sContext.getSystemService(UiModeManager.class);
- uiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
- });
-
- sInstrumentation.runOnMainSync(() ->
- mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId())
- );
-
- assertThat(mViewRootImpl.determineForceDarkType())
- .isEqualTo(ForceDarkType.FORCE_INVERT_COLOR_DARK);
- }
-
- @Test
+ @EnableFlags(FLAG_FORCE_INVERT_COLOR)
public void forceInvertOffForceDarkOff_forceDarkModeDisabled() {
- mSetFlagsRule.enableFlags(FLAG_FORCE_INVERT_COLOR);
ShellIdentityUtils.invokeWithShellPermissions(() -> {
Settings.Secure.putInt(
sContext.getContentResolver(),
@@ -1562,15 +1556,14 @@
});
sInstrumentation.runOnMainSync(() ->
- mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId())
- );
+ mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId()));
assertThat(mViewRootImpl.determineForceDarkType()).isEqualTo(ForceDarkType.NONE);
}
@Test
+ @EnableFlags(FLAG_FORCE_INVERT_COLOR)
public void forceInvertOffForceDarkOn_forceDarkModeEnabled() {
- mSetFlagsRule.enableFlags(FLAG_FORCE_INVERT_COLOR);
ShellIdentityUtils.invokeWithShellPermissions(() -> {
Settings.Secure.putInt(
sContext.getContentResolver(),
@@ -1582,8 +1575,7 @@
});
sInstrumentation.runOnMainSync(() ->
- mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId())
- );
+ mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId()));
assertThat(mViewRootImpl.determineForceDarkType()).isEqualTo(ForceDarkType.FORCE_DARK);
}
@@ -1790,4 +1782,39 @@
() -> view.getViewTreeObserver().removeOnDrawListener(listener));
}
}
+
+ private void waitForSystemNightModeActivated(boolean active) {
+ ShellIdentityUtils.invokeWithShellPermissions(() ->
+ sInstrumentation.runOnMainSync(() -> {
+ var uiModeManager = sContext.getSystemService(UiModeManager.class);
+ uiModeManager.setNightModeActivated(active);
+ }));
+ sInstrumentation.waitForIdleSync();
+ }
+
+ private void verifyForceDarkType(boolean isAppInNightMode, boolean isForceInvertEnabled,
+ @ForceInvertType int expectedForceInvertType,
+ @ForceDarkTypeDef int expectedForceDarkType) {
+ var uiModeManager = sContext.getSystemService(UiModeManager.class);
+ ShellIdentityUtils.invokeWithShellPermissions(() -> {
+ uiModeManager.setApplicationNightMode(
+ isAppInNightMode ? MODE_NIGHT_YES : MODE_NIGHT_NO);
+ Settings.Secure.putInt(
+ sContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED,
+ isForceInvertEnabled ? 1 : 0);
+ });
+
+ sInstrumentation.runOnMainSync(() ->
+ mViewRootImpl.updateConfiguration(sContext.getDisplayNoVerify().getDisplayId()));
+ try {
+ TestUtils.waitUntil("Waiting for force invert state changed",
+ () -> (uiModeManager.getForceInvertState() == expectedForceInvertType));
+ } catch (Exception e) {
+ Log.e(TAG, "Unexpected error trying to apply force invert state. " + e);
+ e.printStackTrace();
+ }
+
+ mExpect.that(mViewRootImpl.determineForceDarkType()).isEqualTo(expectedForceDarkType);
+ }
}
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/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 15f7029..9234902 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -619,6 +619,8 @@
<permission name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE"/>
<permission name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE"/>
<permission name="android.permission.READ_COLOR_ZONES"/>
+ <!-- Permission required for CTS test - CtsTextClassifierTestCases -->
+ <permission name="android.permission.ACCESS_TEXT_CLASSIFIER_BY_TYPE"/>
</privapp-permissions>
<privapp-permissions package="com.android.statementservice">
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/Paint.java b/graphics/java/android/graphics/Paint.java
index a0ca098..05e23a0 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -2206,26 +2206,21 @@
* @param fontVariationOverride font variation override. You can pass null or empty string for
* clearing font variation override.
*
- * @return true if the provided font variation settings is valid. Otherwise returns false.
- *
+ * @throws IllegalArgumentException If given string is not a valid font variation settings
+ * format
* @see #getFontVariationSettings()
* @see #setFontVariationSettings(String)
* @see #getFontVariationOverride()
* @see FontVariationAxis
*/
@FlaggedApi(FLAG_TYPEFACE_REDESIGN_READONLY)
- public boolean setFontVariationOverride(@Nullable String fontVariationOverride) {
+ public void setFontVariationOverride(@Nullable String fontVariationOverride) {
if (Objects.equals(fontVariationOverride, mFontVariationOverride)) {
- return true;
+ return;
}
- List<FontVariationAxis> axes;
- try {
- axes = FontVariationAxis.fromFontVariationSettingsForList(fontVariationOverride);
- } catch (IllegalArgumentException e) {
- Log.i(TAG, "failed to parse font variation settings.", e);
- return false;
- }
+ List<FontVariationAxis> axes =
+ FontVariationAxis.fromFontVariationSettingsForList(fontVariationOverride);
long builderPtr = nCreateFontVariationBuilder(axes.size());
for (int i = 0; i < axes.size(); ++i) {
FontVariationAxis axis = axes.get(i);
@@ -2234,7 +2229,6 @@
}
nSetFontVariationOverride(mNativePaint, builderPtr);
mFontVariationOverride = fontVariationOverride;
- return true;
}
/**
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/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/shared/res/values/dimen.xml b/libs/WindowManager/Shell/shared/res/values/dimen.xml
index 23c9caf..f6a176f 100644
--- a/libs/WindowManager/Shell/shared/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/shared/res/values/dimen.xml
@@ -39,6 +39,8 @@
<!-- Bubble drop target dimensions -->
<dimen name="drop_target_elevation">1dp</dimen>
+ <dimen name="drop_target_radius">28dp</dimen>
+ <dimen name="drop_target_stroke">1dp</dimen>
<dimen name="drop_target_full_screen_padding">20dp</dimen>
<dimen name="drop_target_desktop_window_padding_small">100dp</dimen>
<dimen name="drop_target_desktop_window_padding_large">130dp</dimen>
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetManager.kt b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetManager.kt
index 2dc183f..5c25908 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetManager.kt
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetManager.kt
@@ -18,29 +18,34 @@
import android.content.Context
import android.graphics.Rect
-import android.view.View
+import android.graphics.RectF
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.widget.FrameLayout
import androidx.core.animation.Animator
import androidx.core.animation.AnimatorListenerAdapter
import androidx.core.animation.ValueAnimator
+import com.android.wm.shell.shared.R
/**
* Manages animating drop targets in response to dragging bubble icons or bubble expanded views
* across different drag zones.
*/
class DropTargetManager(
- context: Context,
+ private val context: Context,
private val container: FrameLayout,
private val isLayoutRtl: Boolean,
private val dragZoneChangedListener: DragZoneChangedListener,
) {
private var state: DragState? = null
- private val dropTargetView = View(context)
+ private val dropTargetView = DropTargetView(context)
private var animator: ValueAnimator? = null
+ private var morphRect: RectF = RectF(0f, 0f, 0f, 0f)
private companion object {
- const val ANIMATION_DURATION_MS = 250L
+ const val MORPH_ANIM_DURATION = 250L
+ const val DROP_TARGET_ALPHA_IN_DURATION = 150L
+ const val DROP_TARGET_ALPHA_OUT_DURATION = 100L
}
/** Must be called when a drag gesture is starting. */
@@ -55,15 +60,10 @@
private fun setupDropTarget() {
if (dropTargetView.parent != null) container.removeView(dropTargetView)
container.addView(dropTargetView, 0)
- // TODO b/393173014: set elevation and background
dropTargetView.alpha = 0f
- dropTargetView.scaleX = 1f
- dropTargetView.scaleY = 1f
- dropTargetView.translationX = 0f
- dropTargetView.translationY = 0f
- // the drop target is added with a width and height of 1 pixel. when it gets resized, we use
- // set its scale to the width and height of the bounds it should have to avoid layout passes
- dropTargetView.layoutParams = FrameLayout.LayoutParams(/* width= */ 1, /* height= */ 1)
+ dropTargetView.elevation = context.resources.getDimension(R.dimen.drop_target_elevation)
+ // Match parent and the target is drawn within the view
+ dropTargetView.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
}
/** Called when the user drags to a new location. */
@@ -92,10 +92,7 @@
when {
dropTargetBounds == null -> startFadeAnimation(from = dropTargetView.alpha, to = 0f)
dropTargetView.alpha == 0f -> {
- dropTargetView.translationX = dropTargetBounds.exactCenterX()
- dropTargetView.translationY = dropTargetBounds.exactCenterY()
- dropTargetView.scaleX = dropTargetBounds.width().toFloat()
- dropTargetView.scaleY = dropTargetBounds.height().toFloat()
+ dropTargetView.update(RectF(dropTargetBounds))
startFadeAnimation(from = 0f, to = 1f)
}
else -> startMorphAnimation(dropTargetBounds)
@@ -104,7 +101,9 @@
private fun startFadeAnimation(from: Float, to: Float, onEnd: (() -> Unit)? = null) {
animator?.cancel()
- val animator = ValueAnimator.ofFloat(from, to).setDuration(ANIMATION_DURATION_MS)
+ val duration =
+ if (from < to) DROP_TARGET_ALPHA_IN_DURATION else DROP_TARGET_ALPHA_OUT_DURATION
+ val animator = ValueAnimator.ofFloat(from, to).setDuration(duration)
animator.addUpdateListener { _ -> dropTargetView.alpha = animator.animatedValue as Float }
if (onEnd != null) {
animator.doOnEnd(onEnd)
@@ -113,23 +112,20 @@
animator.start()
}
- private fun startMorphAnimation(bounds: Rect) {
+ private fun startMorphAnimation(endBounds: Rect) {
animator?.cancel()
val startAlpha = dropTargetView.alpha
- val startTx = dropTargetView.translationX
- val startTy = dropTargetView.translationY
- val startScaleX = dropTargetView.scaleX
- val startScaleY = dropTargetView.scaleY
- val animator = ValueAnimator.ofFloat(0f, 1f).setDuration(ANIMATION_DURATION_MS)
+ val startRect = dropTargetView.getRect()
+ val animator = ValueAnimator.ofFloat(0f, 1f).setDuration(MORPH_ANIM_DURATION)
animator.addUpdateListener { _ ->
val fraction = animator.animatedValue as Float
dropTargetView.alpha = startAlpha + (1 - startAlpha) * fraction
- dropTargetView.translationX = startTx + (bounds.exactCenterX() - startTx) * fraction
- dropTargetView.translationY = startTy + (bounds.exactCenterY() - startTy) * fraction
- dropTargetView.scaleX =
- startScaleX + (bounds.width().toFloat() - startScaleX) * fraction
- dropTargetView.scaleY =
- startScaleY + (bounds.height().toFloat() - startScaleY) * fraction
+
+ morphRect.left = (startRect.left + (endBounds.left - startRect.left) * fraction)
+ morphRect.top = (startRect.top + (endBounds.top - startRect.top) * fraction)
+ morphRect.right = (startRect.right + (endBounds.right - startRect.right) * fraction)
+ morphRect.bottom = (startRect.bottom + (endBounds.bottom - startRect.bottom) * fraction)
+ dropTargetView.update(morphRect)
}
this.animator = animator
animator.start()
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetView.kt b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetView.kt
new file mode 100644
index 0000000..2bb6cf4
--- /dev/null
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/bubbles/DropTargetView.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.wm.shell.shared.bubbles
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.RectF
+import android.view.View
+import com.android.wm.shell.shared.R
+
+/**
+ * Shows a drop target within this view.
+ */
+class DropTargetView(context: Context) : View(context) {
+
+ private val rectPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ color = context.getColor(com.android.internal.R.color.materialColorPrimaryContainer)
+ style = Paint.Style.FILL
+ alpha = (0.35f * 255).toInt()
+ }
+
+ private val strokePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ color = context.getColor(com.android.internal.R.color.materialColorPrimaryContainer)
+ style = Paint.Style.STROKE
+ strokeWidth = context.resources.getDimensionPixelSize(R.dimen.drop_target_stroke).toFloat()
+ }
+
+ private val cornerRadius = context.resources.getDimensionPixelSize(
+ R.dimen.drop_target_radius).toFloat()
+
+ private val rect = RectF(0f, 0f, 0f, 0f)
+
+ override fun onDraw(canvas: Canvas) {
+ canvas.save()
+ canvas.drawRoundRect(rect, cornerRadius, cornerRadius, rectPaint)
+ canvas.drawRoundRect(rect, cornerRadius, cornerRadius, strokePaint)
+ canvas.restore()
+ }
+
+ fun update(positionRect: RectF) {
+ rect.set(positionRect)
+ invalidate()
+ }
+
+ fun getRect(): RectF {
+ return RectF(rect)
+ }
+}
\ No newline at end of file
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 7acad50..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
*/
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/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
index 305fcdd..be22402 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
@@ -117,6 +117,7 @@
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
+import com.android.wm.shell.shared.bubbles.BubbleBarLocation.UpdateSource;
import com.android.wm.shell.shared.bubbles.BubbleBarUpdate;
import com.android.wm.shell.shared.bubbles.BubbleDropTargetBoundsProvider;
import com.android.wm.shell.shared.bubbles.DeviceConfig;
@@ -795,7 +796,7 @@
* Update bubble bar location and trigger and update to listeners
*/
public void setBubbleBarLocation(BubbleBarLocation bubbleBarLocation,
- @BubbleBarLocation.UpdateSource int source) {
+ @UpdateSource int source) {
if (isShowingAsBubbleBar()) {
updateExpandedViewForBubbleBarLocation(bubbleBarLocation, source);
BubbleBarUpdate bubbleBarUpdate = new BubbleBarUpdate();
@@ -805,7 +806,7 @@
}
private void updateExpandedViewForBubbleBarLocation(BubbleBarLocation bubbleBarLocation,
- @BubbleBarLocation.UpdateSource int source) {
+ @UpdateSource int source) {
if (isShowingAsBubbleBar()) {
BubbleBarLocation previousLocation = mBubblePositioner.getBubbleBarLocation();
mBubblePositioner.setBubbleBarLocation(bubbleBarLocation);
@@ -818,7 +819,7 @@
private void logBubbleBarLocationIfChanged(BubbleBarLocation location,
BubbleBarLocation previous,
- @BubbleBarLocation.UpdateSource int source) {
+ @UpdateSource int source) {
if (mLayerView == null) {
return;
}
@@ -830,25 +831,25 @@
return;
}
switch (source) {
- case BubbleBarLocation.UpdateSource.DRAG_BAR:
- case BubbleBarLocation.UpdateSource.A11Y_ACTION_BAR:
+ case UpdateSource.DRAG_BAR:
+ case UpdateSource.A11Y_ACTION_BAR:
mLogger.log(onLeft ? BubbleLogger.Event.BUBBLE_BAR_MOVED_LEFT_DRAG_BAR
: BubbleLogger.Event.BUBBLE_BAR_MOVED_RIGHT_DRAG_BAR);
break;
- case BubbleBarLocation.UpdateSource.DRAG_BUBBLE:
- case BubbleBarLocation.UpdateSource.A11Y_ACTION_BUBBLE:
+ case UpdateSource.DRAG_BUBBLE:
+ case UpdateSource.A11Y_ACTION_BUBBLE:
mLogger.log(onLeft ? BubbleLogger.Event.BUBBLE_BAR_MOVED_LEFT_DRAG_BUBBLE
: BubbleLogger.Event.BUBBLE_BAR_MOVED_RIGHT_DRAG_BUBBLE);
break;
- case BubbleBarLocation.UpdateSource.DRAG_EXP_VIEW:
- case BubbleBarLocation.UpdateSource.A11Y_ACTION_EXP_VIEW:
+ case UpdateSource.DRAG_EXP_VIEW:
+ case UpdateSource.A11Y_ACTION_EXP_VIEW:
// TODO(b/349845968): move logging from BubbleBarLayerView to here
break;
- case BubbleBarLocation.UpdateSource.APP_ICON_DRAG:
+ case UpdateSource.APP_ICON_DRAG:
mLogger.log(onLeft ? BubbleLogger.Event.BUBBLE_BAR_MOVED_LEFT_APP_ICON_DROP
: BubbleLogger.Event.BUBBLE_BAR_MOVED_RIGHT_APP_ICON_DROP);
break;
- case BubbleBarLocation.UpdateSource.DRAG_TASK:
+ case UpdateSource.DRAG_TASK:
mLogger.log(onLeft ? BubbleLogger.Event.BUBBLE_BAR_MOVED_LEFT_DRAG_TASK
: BubbleLogger.Event.BUBBLE_BAR_MOVED_RIGHT_DRAG_TASK);
break;
@@ -872,10 +873,7 @@
if (bubbleBarLocation == null) return;
if (isShowingAsBubbleBar() && BubbleAnythingFlagHelper.enableCreateAnyBubble()) {
mBubbleStateListener.onDragItemOverBubbleBarDragZone(bubbleBarLocation);
- ensureBubbleViewsAndWindowCreated();
- if (mLayerView != null) {
- mLayerView.showBubbleBarExtendedViewDropTarget(bubbleBarLocation);
- }
+ showBubbleBarExpandedViewDropTarget(bubbleBarLocation);
}
}
@@ -921,6 +919,13 @@
return result;
}
+ private void showBubbleBarExpandedViewDropTarget(BubbleBarLocation bubbleBarLocation) {
+ ensureBubbleViewsAndWindowCreated();
+ if (mLayerView != null) {
+ mLayerView.showBubbleBarExtendedViewDropTarget(bubbleBarLocation);
+ }
+ }
+
private void hideBubbleBarExpandedViewDropTarget() {
if (mLayerView != null) {
mLayerView.hideBubbleBarExpandedViewDropTarget();
@@ -1541,20 +1546,9 @@
public void expandStackAndSelectBubble(ShortcutInfo info,
@Nullable BubbleBarLocation bubbleBarLocation) {
if (!BubbleAnythingFlagHelper.enableCreateAnyBubble()) return;
- BubbleBarLocation updateLocation = isShowingAsBubbleBar() ? bubbleBarLocation : null;
- if (updateLocation != null) {
- updateExpandedViewForBubbleBarLocation(updateLocation,
- BubbleBarLocation.UpdateSource.APP_ICON_DRAG);
- }
Bubble b = mBubbleData.getOrCreateBubble(info); // Removes from overflow
ProtoLog.v(WM_SHELL_BUBBLES, "expandStackAndSelectBubble - shortcut=%s", info);
- if (b.isInflated()) {
- mBubbleData.setSelectedBubbleAndExpandStack(b, updateLocation);
- } else {
- b.enable(Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE);
- inflateAndAdd(b, /* suppressFlyout= */ true, /* showInShade= */ false,
- updateLocation);
- }
+ expandStackAndSelectAppBubble(b, bubbleBarLocation, UpdateSource.APP_ICON_DRAG);
}
/**
@@ -1562,16 +1556,12 @@
*
* @param intent the intent for the bubble.
*/
- public void expandStackAndSelectBubble(Intent intent, UserHandle user) {
+ public void expandStackAndSelectBubble(Intent intent, UserHandle user,
+ @Nullable BubbleBarLocation bubbleBarLocation) {
if (!BubbleAnythingFlagHelper.enableCreateAnyBubble()) return;
Bubble b = mBubbleData.getOrCreateBubble(intent, user); // Removes from overflow
ProtoLog.v(WM_SHELL_BUBBLES, "expandStackAndSelectBubble - intent=%s", intent);
- if (b.isInflated()) {
- mBubbleData.setSelectedBubbleAndExpandStack(b);
- } else {
- b.enable(Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE);
- inflateAndAdd(b, /* suppressFlyout= */ true, /* showInShade= */ false);
- }
+ expandStackAndSelectAppBubble(b, bubbleBarLocation, UpdateSource.APP_ICON_DRAG);
}
/**
@@ -1583,14 +1573,19 @@
public void expandStackAndSelectBubble(PendingIntent pendingIntent, UserHandle user,
@Nullable BubbleBarLocation bubbleBarLocation) {
if (!BubbleAnythingFlagHelper.enableCreateAnyBubble()) return;
- BubbleBarLocation updateLocation = isShowingAsBubbleBar() ? bubbleBarLocation : null;
- if (updateLocation != null) {
- updateExpandedViewForBubbleBarLocation(updateLocation,
- BubbleBarLocation.UpdateSource.APP_ICON_DRAG);
- }
- Bubble b = mBubbleData.getOrCreateBubble(pendingIntent, user);
+ Bubble b = mBubbleData.getOrCreateBubble(pendingIntent, user); // Removes from overflow
ProtoLog.v(WM_SHELL_BUBBLES, "expandStackAndSelectBubble - pendingIntent=%s",
pendingIntent);
+ expandStackAndSelectAppBubble(b, bubbleBarLocation, UpdateSource.APP_ICON_DRAG);
+ }
+
+ private void expandStackAndSelectAppBubble(Bubble b,
+ @Nullable BubbleBarLocation bubbleBarLocation, @UpdateSource int source) {
+ if (!BubbleAnythingFlagHelper.enableCreateAnyBubble()) return;
+ BubbleBarLocation updateLocation = isShowingAsBubbleBar() ? bubbleBarLocation : null;
+ if (updateLocation != null) {
+ updateExpandedViewForBubbleBarLocation(updateLocation, source);
+ }
if (b.isInflated()) {
mBubbleData.setSelectedBubbleAndExpandStack(b, updateLocation);
} else {
@@ -1623,7 +1618,7 @@
}
} else {
if (location != null) {
- setBubbleBarLocation(location, BubbleBarLocation.UpdateSource.DRAG_TASK);
+ setBubbleBarLocation(location, UpdateSource.DRAG_TASK);
}
b.enable(Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE);
// Lazy init stack view when a bubble is created
@@ -2840,14 +2835,16 @@
}
@Override
- public void showShortcutBubble(ShortcutInfo info) {
+ public void showShortcutBubble(ShortcutInfo info, @Nullable BubbleBarLocation location) {
mMainExecutor.execute(() -> mController
- .expandStackAndSelectBubble(info, /* bubbleBarLocation = */ null));
+ .expandStackAndSelectBubble(info, location));
}
@Override
- public void showAppBubble(Intent intent, UserHandle user) {
- mMainExecutor.execute(() -> mController.expandStackAndSelectBubble(intent, user));
+ public void showAppBubble(Intent intent, UserHandle user,
+ @Nullable BubbleBarLocation location) {
+ mMainExecutor.execute(
+ () -> mController.expandStackAndSelectBubble(intent, user, location));
}
@Override
@@ -2900,7 +2897,7 @@
@Override
public void setBubbleBarLocation(BubbleBarLocation location,
- @BubbleBarLocation.UpdateSource int source) {
+ @UpdateSource int source) {
mMainExecutor.execute(() ->
mController.setBubbleBarLocation(location, source));
}
@@ -2921,6 +2918,17 @@
}
});
}
+
+ @Override
+ public void showDropTarget(boolean show, BubbleBarLocation location) {
+ mMainExecutor.execute(() -> {
+ if (show) {
+ showBubbleBarExpandedViewDropTarget(location);
+ } else {
+ hideBubbleBarExpandedViewDropTarget();
+ }
+ });
+ }
}
private class BubblesImpl implements Bubbles {
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/IBubbles.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/IBubbles.aidl
index 0a4d79a..ae1b407 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/IBubbles.aidl
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/IBubbles.aidl
@@ -51,9 +51,11 @@
oneway void stopBubbleDrag(in BubbleBarLocation location, in int topOnScreen) = 11;
- oneway void showShortcutBubble(in ShortcutInfo info) = 12;
+ oneway void showShortcutBubble(in ShortcutInfo info, in @nullable BubbleBarLocation location) = 12;
- oneway void showAppBubble(in Intent intent, in UserHandle user) = 13;
+ oneway void showAppBubble(in Intent intent, in UserHandle user, in @nullable BubbleBarLocation location) = 13;
oneway void showExpandedView() = 14;
+
+ oneway void showDropTarget(in boolean show, in @nullable BubbleBarLocation location) = 15;
}
\ No newline at end of file
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..3f21e74 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
@@ -20,6 +20,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import android.app.ActivityManager;
+import android.window.DesktopExperienceFlags;
import android.window.DisplayAreaInfo;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
@@ -67,7 +68,7 @@
/** Returns whether PiP in Connected Displays is enabled by checking the flag. */
public boolean isConnectedDisplaysPipEnabled() {
- return Flags.enableConnectedDisplaysPip();
+ return DesktopExperienceFlags.ENABLE_CONNECTED_DISPLAYS_PIP.isTrue();
}
/** Returns whether the display with the PiP task is in freeform windowing mode. */
@@ -88,7 +89,7 @@
return false;
}
final int displayId = mPipDisplayLayoutState.getDisplayId();
- return getDesktopRepository().getVisibleTaskCount(displayId) > 0
+ return getDesktopRepository().isAnyDeskActive(displayId)
|| getDesktopWallpaperActivityTokenProvider().isWallpaperActivityVisible(displayId)
|| isDisplayInFreeform();
}
@@ -100,7 +101,7 @@
return false;
}
final DesktopRepository desktopRepository = getDesktopRepository();
- return desktopRepository.getVisibleTaskCount(pipTask.getDisplayId()) > 0
+ return desktopRepository.isAnyDeskActive(pipTask.getDisplayId())
|| desktopRepository.isMinimizedPipPresentInDisplay(pipTask.getDisplayId());
}
@@ -114,7 +115,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 48fadc0..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
@@ -802,6 +802,7 @@
recentTasksController.orElse(null),
interactionJankMonitor,
mainHandler,
+ focusTransitionObserver,
desktopModeEventLogger,
desktopModeUiEventLogger,
desktopWallpaperActivityTokenProvider,
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/DesktopMinimizationTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
index 7074e8b..6c6d830 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
@@ -21,6 +21,7 @@
import android.os.Handler
import android.os.IBinder
import android.view.SurfaceControl.Transaction
+import android.view.WindowManager.TRANSIT_TO_BACK
import android.window.TransitionInfo
import android.window.TransitionRequestInfo
import android.window.WindowContainerTransaction
@@ -61,7 +62,9 @@
finishTransaction: Transaction,
finishCallback: Transitions.TransitionFinishCallback,
): Boolean {
- if (!TransitionUtil.isClosingType(info.type)) return false
+ val shouldAnimate =
+ TransitionUtil.isClosingType(info.type) || info.type == Transitions.TRANSIT_MINIMIZE
+ if (!shouldAnimate) return false
val animations = mutableListOf<Animator>()
val onAnimFinish: (Animator) -> Unit = { animator ->
@@ -75,10 +78,14 @@
}
}
+ val checkChangeMode = { change: TransitionInfo.Change ->
+ change.mode == info.type ||
+ (info.type == Transitions.TRANSIT_MINIMIZE && change.mode == TRANSIT_TO_BACK)
+ }
animations +=
info.changes
.filter {
- it.mode == info.type && it.taskInfo?.windowingMode == WINDOWING_MODE_FREEFORM
+ checkChangeMode(it) && it.taskInfo?.windowingMode == WINDOWING_MODE_FREEFORM
}
.mapNotNull { createMinimizeAnimation(it, finishTransaction, onAnimFinish) }
if (animations.isEmpty()) return false
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..e3a71a1 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,19 @@
package com.android.wm.shell.desktopmode
+import android.app.ActivityTaskManager.INVALID_TASK_ID
import android.window.DesktopExperienceFlags
+import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.UnminimizeReason
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 +81,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
}
@@ -183,8 +189,12 @@
pw.println("Error: task id should be an integer")
return false
}
- pw.println("Not implemented.")
- return false
+ controller.moveTaskToFront(
+ /* taskId= */ taskId,
+ /* remoteTransition= */ null,
+ /* unminimizeReason= */ UnminimizeReason.UNKNOWN,
+ )
+ return true
}
private fun runMoveTaskOutOfDesk(args: Array<String>, pw: PrintWriter): Boolean {
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 03423ba..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
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt
index 6034299..70a648f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt
@@ -35,7 +35,7 @@
desktopRepository.removeTask(taskInfo.displayId, taskInfo.taskId)
return
}
- if (isFreeformTask(taskInfo)) {
+ if (isFreeformTask(taskInfo) && !desktopRepository.isActiveTask(taskInfo.taskId)) {
desktopRepository.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
}
}
@@ -44,23 +44,33 @@
logD("onTaskChanging for taskId=%d, displayId=%d", taskInfo.taskId, taskInfo.displayId)
val desktopRepository: DesktopRepository =
desktopUserRepositories.getProfile(taskInfo.userId)
- if (!desktopRepository.isActiveTask(taskInfo.taskId)) return
-
// TODO: b/394281403 - with multiple desks, it's possible to have a non-freeform task
// inside a desk, so this should be decoupled from windowing mode.
// Also, changes in/out of desks are handled by the [DesksTransitionObserver], which has
// more specific information about the desk involved in the transition, which might be
// more accurate than assuming it's always the default/active desk in the display, as this
// method does.
- // Case 1: Freeform task is changed in Desktop Mode.
- if (isFreeformTask(taskInfo)) {
- if (taskInfo.isVisible) {
- desktopRepository.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
+ // Case 1: When the task change is from a task in the desktop repository which is now
+ // fullscreen,
+ // remove the task from the desktop repository since it is no longer a freeform task.
+ if (!isFreeformTask(taskInfo)) {
+ if (desktopRepository.isActiveTask(taskInfo.taskId)) {
+ desktopRepository.removeTask(taskInfo.displayId, taskInfo.taskId)
}
- desktopRepository.updateTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
- } else {
- // Case 2: Freeform task is changed outside Desktop Mode.
- desktopRepository.removeTask(taskInfo.displayId, taskInfo.taskId)
+ } else { // Task change is a freeform task
+ if (!desktopRepository.isActiveTask(taskInfo.taskId)) {
+ // Case 2: When the task change is a freeform visible task, but the task is not
+ // yet active in the desktop repository, adds task to desktop repository.
+ desktopRepository.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
+ } else {
+ // Case 3: When the task change is a freeform task which already exists as an active
+ // task in the desktop repository, updates the task state.
+ desktopRepository.updateTask(
+ taskInfo.displayId,
+ taskInfo.taskId,
+ taskInfo.isVisible,
+ )
+ }
}
}
@@ -82,14 +92,22 @@
logD("onTaskMovingToFront for taskId=%d, displayId=%d", taskInfo.taskId, taskInfo.displayId)
val desktopRepository: DesktopRepository =
desktopUserRepositories.getProfile(taskInfo.userId)
- if (!desktopRepository.isActiveTask(taskInfo.taskId)) return
- if (!isFreeformTask(taskInfo)) {
+ // When the task change is from a task in the desktop repository which is now fullscreen,
+ // remove the task from the desktop repository since it is no longer a freeform task.
+ if (!isFreeformTask(taskInfo) && desktopRepository.isActiveTask(taskInfo.taskId)) {
desktopRepository.removeTask(taskInfo.displayId, taskInfo.taskId)
}
- desktopRepository.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
+ if (isFreeformTask(taskInfo)) {
+ // If the task is already active in the repository, then it only moves the task to the
+ // front.
+ desktopRepository.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible)
+ }
}
override fun onTaskMovingToBack(taskInfo: RunningTaskInfo) {
+ val desktopRepository: DesktopRepository =
+ desktopUserRepositories.getProfile(taskInfo.userId)
+ if (!desktopRepository.isActiveTask(taskInfo.taskId)) return
logD("onTaskMovingToBack for taskId=%d, displayId=%d", taskInfo.taskId, taskInfo.displayId)
// TODO: b/367268953 - Connect this with DesktopRepository.
}
@@ -101,7 +119,7 @@
if (!desktopRepository.isActiveTask(taskInfo.taskId)) return
// TODO: b/370038902 - Handle Activity#finishAndRemoveTask.
if (
- !DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue() ||
+ !DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue ||
desktopRepository.isClosingTask(taskInfo.taskId)
) {
// A task that's vanishing should be removed:
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 fca5084..8f7e52e 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,
@@ -217,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
@@ -337,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:
@@ -346,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 =
@@ -463,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,
@@ -523,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,
@@ -669,11 +677,7 @@
// Bring other apps to front first.
bringDesktopAppsToFrontBeforeShowingNewTask(displayId, wct, task.taskId)
}
- if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
- prepareMoveTaskToDesk(wct, task, deskId)
- } else {
- addMoveToDesktopChanges(wct, task)
- }
+ addMoveToDeskTaskChanges(wct = wct, task = task, deskId = deskId)
return taskIdToMinimize
}
@@ -1113,12 +1117,13 @@
excludeTaskId = launchingTaskId,
reason = DesktopImmersiveController.ExitReason.TASK_LAUNCH,
)
- var deskIdToActivate: Int? = null
- if (
- DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue &&
+ var activationRunOnTransitStart: RunOnTransitStart? = null
+ val shouldActivateDesk =
+ (DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue ||
+ DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) &&
!isDesktopModeShowing(displayId)
- ) {
- deskIdToActivate =
+ if (shouldActivateDesk) {
+ val deskIdToActivate =
checkNotNull(
launchingTaskId?.let { taskRepository.getDeskIdForTask(it) }
?: getDefaultDeskId(displayId)
@@ -1128,6 +1133,18 @@
// Desk activation must be handled before app launch-related transactions.
activateDeskWct.merge(launchTransaction, /* transfer= */ true)
launchTransaction = activateDeskWct
+ activationRunOnTransitStart = { transition ->
+ desksTransitionObserver.addPendingTransition(
+ DeskTransition.ActivateDesk(
+ token = transition,
+ displayId = displayId,
+ deskId = deskIdToActivate,
+ )
+ )
+ }
+ desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
+ FREEFORM_ANIMATION_DURATION
+ )
}
val t =
if (remoteTransition == null) {
@@ -1161,24 +1178,7 @@
if (launchingTaskId != null && taskRepository.isMinimizedTask(launchingTaskId)) {
addPendingUnminimizeTransition(t, displayId, launchingTaskId, unminimizeReason)
}
- if (
- DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue &&
- deskIdToActivate != null
- ) {
- if (DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) {
- desksTransitionObserver.addPendingTransition(
- DeskTransition.ActivateDesk(
- token = t,
- displayId = displayId,
- deskId = deskIdToActivate,
- )
- )
- }
-
- desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
- FREEFORM_ANIMATION_DURATION
- )
- }
+ activationRunOnTransitStart?.invoke(t)
exitImmersiveResult.asExit()?.runOnTransitionStart?.invoke(t)
return t
}
@@ -1242,6 +1242,10 @@
pendingIntentBackgroundActivityStartMode =
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS
launchBounds = bounds
+ if (DesktopModeFlags.ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX.isTrue) {
+ // Sets launch bounds size as flexible so core can recalculate.
+ flexibleLaunchSize = true
+ }
}
wct.sendPendingIntent(pendingIntent, intent, ops.toBundle())
@@ -1252,6 +1256,8 @@
* Move [task] to display with [displayId].
*
* No-op if task is already on that display per [RunningTaskInfo.displayId].
+ *
+ * TODO: b/399411604 - split this up into smaller functions.
*/
private fun moveToDisplay(task: RunningTaskInfo, displayId: Int) {
logV("moveToDisplay: taskId=%d displayId=%d", task.taskId, displayId)
@@ -1307,30 +1313,32 @@
// TODO: b/393977830 and b/397437641 - do not assume that freeform==desktop.
if (!task.isFreeform) {
- addMoveToDesktopChanges(wct, task, displayId)
- } else if (Flags.enableMoveToNextDisplayShortcut()) {
- applyFreeformDisplayChange(wct, task, displayId)
+ addMoveToDeskTaskChanges(wct = wct, task = task, deskId = destinationDeskId)
+ } else {
+ if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
+ desksOrganizer.moveTaskToDesk(wct, destinationDeskId, task)
+ }
+ if (Flags.enableMoveToNextDisplayShortcut()) {
+ 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 {
+ if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
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
@@ -2056,12 +2064,13 @@
triggerTask?.let { task ->
when {
// Check if freeform task launch during recents should be handled
- shouldHandleMidRecentsFreeformLaunch -> handleMidRecentsFreeformTaskLaunch(task)
+ shouldHandleMidRecentsFreeformLaunch ->
+ handleMidRecentsFreeformTaskLaunch(task, transition)
// Check if the closing task needs to be handled
TransitionUtil.isClosingType(request.type) ->
handleTaskClosing(task, transition, request.type)
// Check if the top task shouldn't be allowed to enter desktop mode
- isIncompatibleTask(task) -> handleIncompatibleTaskLaunch(task)
+ isIncompatibleTask(task) -> handleIncompatibleTaskLaunch(task, transition)
// Check if fullscreen task should be updated
task.isFullscreen -> handleFullscreenTaskLaunch(task, transition)
// Check if freeform task should be updated
@@ -2300,20 +2309,23 @@
* This is a special case where we want to launch the task in fullscreen instead of freeform.
*/
private fun handleMidRecentsFreeformTaskLaunch(
- task: RunningTaskInfo
+ task: RunningTaskInfo,
+ transition: IBinder,
): WindowContainerTransaction? {
logV("DesktopTasksController: handleMidRecentsFreeformTaskLaunch")
val wct = WindowContainerTransaction()
- addMoveToFullscreenChanges(
- wct = wct,
- taskInfo = task,
- willExitDesktop =
- willExitDesktop(
- triggerTaskId = task.taskId,
- displayId = task.displayId,
- forceExitDesktop = true,
- ),
- )
+ val runOnTransitStart =
+ addMoveToFullscreenChanges(
+ wct = wct,
+ taskInfo = task,
+ willExitDesktop =
+ willExitDesktop(
+ triggerTaskId = task.taskId,
+ displayId = task.displayId,
+ forceExitDesktop = true,
+ ),
+ )
+ runOnTransitStart?.invoke(transition)
wct.reorder(task.token, true)
return wct
}
@@ -2337,16 +2349,18 @@
// launched. We should make this task go to fullscreen instead of freeform. Note
// that this means any re-launch of a freeform window outside of desktop will be in
// fullscreen as long as default-desktop flag is disabled.
- addMoveToFullscreenChanges(
- wct = wct,
- taskInfo = task,
- willExitDesktop =
- willExitDesktop(
- triggerTaskId = task.taskId,
- displayId = task.displayId,
- forceExitDesktop = true,
- ),
- )
+ val runOnTransitStart =
+ addMoveToFullscreenChanges(
+ wct = wct,
+ taskInfo = task,
+ willExitDesktop =
+ willExitDesktop(
+ triggerTaskId = task.taskId,
+ displayId = task.displayId,
+ forceExitDesktop = true,
+ ),
+ )
+ runOnTransitStart?.invoke(transition)
return wct
}
bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, task.taskId)
@@ -2410,7 +2424,8 @@
if (shouldFullscreenTaskLaunchSwitchToDesktop(task)) {
logD("Switch fullscreen task to freeform on transition: taskId=%d", task.taskId)
return WindowContainerTransaction().also { wct ->
- addMoveToDesktopChanges(wct, task)
+ val deskId = getDefaultDeskId(task.displayId)
+ addMoveToDeskTaskChanges(wct = wct, task = task, deskId = deskId)
// In some launches home task is moved behind new task being launched. Make sure
// that's not the case for launches in desktop. Also, if this launch is the first
// one to trigger the desktop mode (e.g., when [forceEnterDesktop()]), activate the
@@ -2441,7 +2456,8 @@
// If a freeform task receives a request for a fullscreen launch, apply the same
// changes we do for similar transitions. The task not having WINDOWING_MODE_UNDEFINED
// set when needed can interfere with future split / multi-instance transitions.
- return WindowContainerTransaction().also { wct ->
+ val wct = WindowContainerTransaction()
+ val runOnTransitStart =
addMoveToFullscreenChanges(
wct = wct,
taskInfo = task,
@@ -2452,7 +2468,8 @@
forceExitDesktop = true,
),
)
- }
+ runOnTransitStart?.invoke(transition)
+ return wct
}
return null
}
@@ -2467,7 +2484,10 @@
* If a task is not compatible with desktop mode freeform, it should always be launched in
* fullscreen.
*/
- private fun handleIncompatibleTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction? {
+ private fun handleIncompatibleTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder,
+ ): WindowContainerTransaction? {
logV("handleIncompatibleTaskLaunch")
if (!isDesktopModeShowing(task.displayId) && !forceEnterDesktop(task.displayId)) return null
// Only update task repository for transparent task.
@@ -2479,7 +2499,8 @@
}
// Already fullscreen, no-op.
if (task.isFullscreen) return null
- return WindowContainerTransaction().also { wct ->
+ val wct = WindowContainerTransaction()
+ val runOnTransitStart =
addMoveToFullscreenChanges(
wct = wct,
taskInfo = task,
@@ -2490,7 +2511,8 @@
forceExitDesktop = true,
),
)
- }
+ runOnTransitStart?.invoke(transition)
+ return wct
}
/**
@@ -2537,55 +2559,44 @@
}
/**
- * Apply all changes required when task is first added to desktop. Uses the task's current
- * display by default to apply initial bounds and placement relative to the display. Use a
- * different [displayId] if the task should be moved to a different display.
+ * Applies the [wct] changes needed when a task is first moving to a desk.
+ *
+ * Note that this recalculates the initial bounds of the task, so it should not be used when
+ * transferring a task between desks.
+ *
+ * TODO: b/362720497 - this should be improved to be reusable by desk-to-desk CUJs where
+ * [DesksOrganizer.moveTaskToDesk] needs to be called and even cross-display CUJs where
+ * [applyFreeformDisplayChange] needs to be called. Potentially by comparing source vs
+ * destination desk ids and display ids, or adding extra arguments to the function.
*/
- @VisibleForTesting
- @Deprecated("Deprecated with multiple desks", ReplaceWith("prepareMoveTaskToDesk()"))
- fun addMoveToDesktopChanges(
+ fun addMoveToDeskTaskChanges(
wct: WindowContainerTransaction,
- taskInfo: RunningTaskInfo,
- displayId: Int = taskInfo.displayId,
- ) {
- val displayLayout = displayController.getDisplayLayout(displayId) ?: return
- val tdaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(displayId)!!
- val tdaWindowingMode = tdaInfo.configuration.windowConfiguration.windowingMode
- // TODO: b/397437641 - reconsider the windowing mode choice when multiple desks is enabled.
- val targetWindowingMode =
- if (tdaWindowingMode == WINDOWING_MODE_FREEFORM) {
- // Display windowing is freeform, set to undefined and inherit it
- WINDOWING_MODE_UNDEFINED
- } else {
- WINDOWING_MODE_FREEFORM
- }
- val initialBounds = getInitialBounds(displayLayout, taskInfo, displayId)
-
- if (canChangeTaskPosition(taskInfo)) {
- wct.setBounds(taskInfo.token, initialBounds)
- }
- wct.setWindowingMode(taskInfo.token, targetWindowingMode)
- wct.reorder(taskInfo.token, /* onTop= */ true)
- if (useDesktopOverrideDensity()) {
- wct.setDensityDpi(taskInfo.token, DESKTOP_DENSITY_OVERRIDE)
- }
- }
-
- private fun prepareMoveTaskToDesk(
- wct: WindowContainerTransaction,
- taskInfo: RunningTaskInfo,
+ task: RunningTaskInfo,
deskId: Int,
) {
- if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) return
- val displayId = taskRepository.getDisplayForDesk(deskId)
- val displayLayout = displayController.getDisplayLayout(displayId) ?: return
- val initialBounds = getInitialBounds(displayLayout, taskInfo, displayId)
- if (canChangeTaskPosition(taskInfo)) {
- wct.setBounds(taskInfo.token, initialBounds)
+ val targetDisplayId = taskRepository.getDisplayForDesk(deskId)
+ val displayLayout = displayController.getDisplayLayout(targetDisplayId) ?: return
+ val initialBounds = getInitialBounds(displayLayout, task, targetDisplayId)
+ if (canChangeTaskPosition(task)) {
+ wct.setBounds(task.token, initialBounds)
}
- desksOrganizer.moveTaskToDesk(wct, deskId = deskId, task = taskInfo)
+ if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
+ desksOrganizer.moveTaskToDesk(wct = wct, deskId = deskId, task = task)
+ } else {
+ val tdaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(targetDisplayId)!!
+ val tdaWindowingMode = tdaInfo.configuration.windowConfiguration.windowingMode
+ val targetWindowingMode =
+ if (tdaWindowingMode == WINDOWING_MODE_FREEFORM) {
+ // Display windowing is freeform, set to undefined and inherit it
+ WINDOWING_MODE_UNDEFINED
+ } else {
+ WINDOWING_MODE_FREEFORM
+ }
+ wct.setWindowingMode(task.token, targetWindowingMode)
+ wct.reorder(task.token, /* onTop= */ true)
+ }
if (useDesktopOverrideDensity()) {
- wct.setDensityDpi(taskInfo.token, DESKTOP_DENSITY_OVERRIDE)
+ wct.setDensityDpi(task.token, DESKTOP_DENSITY_OVERRIDE)
}
}
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/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/keyguard/KeyguardTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
index d666126..c0a0f46 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/keyguard/KeyguardTransitionHandler.java
@@ -22,6 +22,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.service.dreams.Flags.dismissDreamOnKeyguardDismiss;
import static android.view.WindowManager.KEYGUARD_VISIBILITY_TRANSIT_FLAGS;
+import static android.view.WindowManager.TRANSIT_FLAG_AOD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_LOCKED;
@@ -200,7 +201,8 @@
transition, info, startTransaction, finishTransaction, finishCallback);
}
- if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_APPEARING) != 0) {
+ if ((info.getFlags() & TRANSIT_FLAG_KEYGUARD_APPEARING) != 0
+ || (info.getFlags() & TRANSIT_FLAG_AOD_APPEARING) != 0) {
return startAnimation(mAppearTransition, "appearing",
transition, info, startTransaction, finishTransaction, finishCallback);
}
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/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
index 1ce24f7..6012fe6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
@@ -32,6 +32,7 @@
import android.graphics.Rect;
import android.os.Bundle;
import android.view.SurfaceControl;
+import android.window.DesktopExperienceFlags;
import android.window.DisplayAreaInfo;
import android.window.WindowContainerTransaction;
@@ -41,7 +42,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.ProtoLog;
import com.android.internal.util.Preconditions;
-import com.android.window.flags.Flags;
import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayChangeController;
@@ -303,7 +303,8 @@
public void onDisplayRemoved(int displayId) {
// If PiP was active on an external display that is removed, clean up states and set
// {@link PipDisplayLayoutState} to DEFAULT_DISPLAY.
- if (Flags.enableConnectedDisplaysPip() && mPipTransitionState.isInPip()
+ if (DesktopExperienceFlags.ENABLE_CONNECTED_DISPLAYS_PIP.isTrue()
+ && mPipTransitionState.isInPip()
&& displayId == mPipDisplayLayoutState.getDisplayId()
&& displayId != DEFAULT_DISPLAY) {
mPipTransitionState.setState(PipTransitionState.EXITING_PIP);
@@ -345,7 +346,6 @@
return;
}
- mPipTouchHandler.updateMinMaxSize(mPipBoundsState.getAspectRatio());
mPipMenuController.hideMenu();
if (mPipTransitionState.isInFixedRotation()) {
@@ -366,6 +366,8 @@
mPipBoundsState.setBounds(toBounds);
}
t.setBounds(mPipTransitionState.getPipTaskToken(), mPipBoundsState.getBounds());
+ // Update the size spec in PipBoundsState afterwards.
+ mPipBoundsState.updateMinMaxSize(mPipBoundsState.getAspectRatio());
}
private void setDisplayLayout(DisplayLayout layout) {
@@ -384,7 +386,7 @@
// If PiP is enabled on Connected Displays, update PipDisplayLayoutState to have the correct
// display info that PiP is entering in.
- if (Flags.enableConnectedDisplaysPip()) {
+ if (DesktopExperienceFlags.ENABLE_CONNECTED_DISPLAYS_PIP.isTrue()) {
final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(displayId);
if (displayLayout != null) {
mPipDisplayLayoutState.setDisplayId(displayId);
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..d53365a 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
@@ -81,8 +81,6 @@
private final PointF mDownSecondPoint = new PointF();
private final PointF mLastPoint = new PointF();
private final PointF mLastSecondPoint = new PointF();
- private final Point mMaxSize = new Point();
- private final Point mMinSize = new Point();
private final Rect mLastResizeBounds = new Rect();
private final Rect mUserResizeBounds = new Rect();
private final Rect mDownBounds = new Rect();
@@ -95,7 +93,6 @@
private boolean mIsEnabled;
private boolean mEnablePinchResize;
private boolean mEnableDragCornerResize;
- private boolean mIsSysUiStateValid;
private boolean mThresholdCrossed;
private boolean mOngoingPinchToResize = false;
private boolean mWaitingForBoundsChangeTransition = false;
@@ -152,7 +149,6 @@
}
void init() {
- mContext.getDisplay().getRealSize(mMaxSize);
reloadResources();
final Resources res = mContext.getResources();
@@ -163,15 +159,6 @@
reloadResources();
}
- /**
- * Called when SysUI state changed.
- *
- * @param isSysUiStateValid Is SysUI valid or not.
- */
- public void onSystemUiStateChanged(boolean isSysUiStateValid) {
- mIsSysUiStateValid = isSysUiStateValid;
- }
-
private void reloadResources() {
mPipDragToResizeHandler.reloadResources();
mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
@@ -287,13 +274,15 @@
}
}
+ final Point minSize = mPipBoundsState.getMinSize();
+ final Point maxSize = mPipBoundsState.getMaxSize();
if (mOngoingPinchToResize) {
mPipPinchToResizeHandler.onPinchResize(mv, mDownPoint, mDownSecondPoint,
mDownBounds, mLastPoint, mLastSecondPoint, mLastResizeBounds, mTouchSlop,
- mMinSize, mMaxSize);
+ minSize, maxSize);
} else if (mEnableDragCornerResize) {
mPipDragToResizeHandler.onDragCornerResize(mv, mLastResizeBounds, mDownPoint,
- mDownBounds, mMinSize, mMaxSize, mTouchSlop);
+ mDownBounds, minSize, maxSize, mTouchSlop);
}
}
}
@@ -327,7 +316,7 @@
if (mEnablePinchResize && ev.getPointerCount() == 2) {
mPipPinchToResizeHandler.onPinchResize(ev, mDownPoint, mDownSecondPoint,
mDownBounds, mLastPoint, mLastSecondPoint, mLastResizeBounds,
- mTouchSlop, mMinSize, mMaxSize);
+ mTouchSlop, mPipBoundsState.getMinSize(), mPipBoundsState.getMaxSize());
mOngoingPinchToResize = mAllowGesture;
return mAllowGesture;
}
@@ -395,6 +384,7 @@
void finishResize() {
if (mLastResizeBounds.isEmpty()) {
resetState();
+ return;
}
// Cache initial bounds after release for animation before mLastResizeBounds are modified.
@@ -406,16 +396,19 @@
return;
}
+ final Point minSize = mPipBoundsState.getMinSize();
+ final Point maxSize = mPipBoundsState.getMaxSize();
+
// If user resize is pretty close to max size, just auto resize to max.
- if (mLastResizeBounds.width() >= PINCH_RESIZE_AUTO_MAX_RATIO * mMaxSize.x
- || mLastResizeBounds.height() >= PINCH_RESIZE_AUTO_MAX_RATIO * mMaxSize.y) {
- resizeRectAboutCenter(mLastResizeBounds, mMaxSize.x, mMaxSize.y);
+ if (mLastResizeBounds.width() >= PINCH_RESIZE_AUTO_MAX_RATIO * maxSize.x
+ || mLastResizeBounds.height() >= PINCH_RESIZE_AUTO_MAX_RATIO * maxSize.y) {
+ resizeRectAboutCenter(mLastResizeBounds, maxSize.x, maxSize.y);
}
// If user resize is smaller than min size, auto resize to min
- if (mLastResizeBounds.width() < mMinSize.x
- || mLastResizeBounds.height() < mMinSize.y) {
- resizeRectAboutCenter(mLastResizeBounds, mMinSize.x, mMinSize.y);
+ if (mLastResizeBounds.width() < minSize.x
+ || mLastResizeBounds.height() < minSize.y) {
+ resizeRectAboutCenter(mLastResizeBounds, minSize.x, minSize.y);
}
// get the current movement bounds
@@ -471,15 +464,6 @@
mInputMonitor.pilferPointers();
}
-
- void updateMaxSize(int maxX, int maxY) {
- mMaxSize.set(maxX, maxY);
- }
-
- void updateMinSize(int minX, int minY) {
- mMinSize.set(minX, minY);
- }
-
void setOhmOffset(int offset) {
mOhmOffset = offset;
}
@@ -567,8 +551,6 @@
pw.println(innerPrefix + "mEnableDragCornerResize=" + mEnableDragCornerResize);
pw.println(innerPrefix + "mThresholdCrossed=" + mThresholdCrossed);
pw.println(innerPrefix + "mOhmOffset=" + mOhmOffset);
- pw.println(innerPrefix + "mMinSize=" + mMinSize);
- pw.println(innerPrefix + "mMaxSize=" + mMaxSize);
}
class PipResizeInputEventReceiver extends BatchedInputEventReceiver {
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/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
index 72346b3..6fdfeca 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
@@ -230,10 +230,7 @@
pipBoundsState, mTouchState, mPipScheduler, mPipTransitionState, pipUiEventLogger,
menuController, this::getMovementBounds, mPipDisplayLayoutState, pipDesktopState,
mainExecutor, mPipPerfHintController);
- mPipBoundsState.addOnAspectRatioChangedCallback(aspectRatio -> {
- updateMinMaxSize(aspectRatio);
- onAspectRatioChanged();
- });
+ mPipBoundsState.addOnAspectRatioChangedCallback(aspectRatio -> onAspectRatioChanged());
mMoveOnShelVisibilityChanged = () -> {
if (mIsImeShowing && mImeHeight > mShelfHeight) {
@@ -418,15 +415,6 @@
mMainExecutor.executeDelayed(mMoveOnShelVisibilityChanged, PIP_KEEP_CLEAR_AREAS_DELAY);
}
- /**
- * Called when SysUI state changed.
- *
- * @param isSysUiStateValid Is SysUI valid or not.
- */
- public void onSystemUiStateChanged(boolean isSysUiStateValid) {
- mPipResizeGestureHandler.onSystemUiStateChanged(isSysUiStateValid);
- }
-
void adjustBoundsForRotation(Rect outBounds, Rect curBounds, Rect insetBounds) {
final Rect toMovementBounds = new Rect();
mPipBoundsAlgorithm.getMovementBounds(outBounds, insetBounds, toMovementBounds, 0);
@@ -480,8 +468,6 @@
mPipBoundsState.getExpandedBounds(), insetBounds, expandedMovementBounds,
bottomOffset);
- updatePipSizeConstraints(normalBounds, aspectRatio);
-
// The extra offset does not really affect the movement bounds, but are applied based on the
// current state (ime showing, or shelf offset) when we need to actually shift
int extraOffset = Math.max(
@@ -507,35 +493,6 @@
}
/**
- * Update the values for min/max allowed size of picture in picture window based on the aspect
- * ratio.
- * @param aspectRatio aspect ratio to use for the calculation of min/max size
- */
- public void updateMinMaxSize(float aspectRatio) {
- updatePipSizeConstraints(mPipBoundsState.getNormalBounds(),
- aspectRatio);
- }
-
- private void updatePipSizeConstraints(Rect normalBounds,
- float aspectRatio) {
- if (mPipResizeGestureHandler.isUsingPinchToZoom()) {
- updatePinchResizeSizeConstraints(aspectRatio);
- } else {
- mPipResizeGestureHandler.updateMinSize(normalBounds.width(), normalBounds.height());
- mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getExpandedBounds().width(),
- mPipBoundsState.getExpandedBounds().height());
- }
- }
-
- private void updatePinchResizeSizeConstraints(float aspectRatio) {
- mPipBoundsState.updateMinMaxSize(aspectRatio);
- mPipResizeGestureHandler.updateMinSize(mPipBoundsState.getMinSize().x,
- mPipBoundsState.getMinSize().y);
- mPipResizeGestureHandler.updateMaxSize(mPipBoundsState.getMaxSize().x,
- mPipBoundsState.getMaxSize().y);
- }
-
- /**
* TODO Add appropriate description
*/
public void onRegistrationChanged(boolean isRegistered) {
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..a3a808d 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;
@@ -2079,8 +2080,8 @@
Math.max(topLeftBounds.top, 0);
bottomRightBounds.right =
Math.min(bottomRightBounds.right, mSplitLayout.getDisplayWidth());
- bottomRightBounds.top =
- Math.min(bottomRightBounds.top, mSplitLayout.getDisplayHeight());
+ bottomRightBounds.bottom =
+ Math.min(bottomRightBounds.bottom, mSplitLayout.getDisplayHeight());
// TODO (b/349828130): Can change to getState() fully after brief soak time.
if (mSplitState.get() != currentSnapPosition) {
@@ -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 3652a16..bf58003 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
@@ -95,7 +95,6 @@
import android.util.ArrayMap;
import android.view.SurfaceControl;
import android.view.WindowManager;
-import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.window.TransitionInfo;
import android.window.TransitionMetrics;
@@ -835,9 +834,8 @@
a = mTransitionAnimation.loadVoiceActivityExitAnimation(enter, userId);
}
} else if (changeMode == TRANSIT_CHANGE) {
- // In the absence of a specific adapter, we just want to keep everything stationary.
- a = new AlphaAnimation(1.f, 1.f);
- a.setDuration(TransitionAnimation.DEFAULT_APP_TRANSITION_DURATION);
+ // Apply end state directly by default.
+ return null;
} else if (type == TRANSIT_RELAUNCH) {
a = mTransitionAnimation.createRelaunchAnimation(endBounds, mInsets, endBounds);
} else if (overrideType == ANIM_CUSTOM
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/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/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/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/tests/e2e/desktopmode/flicker-service/src/com/android/wm/shell/flicker/DesktopModeFlickerScenarios.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/flicker-service/src/com/android/wm/shell/flicker/DesktopModeFlickerScenarios.kt
index 4c443d7..d73d08c 100644
--- a/libs/WindowManager/Shell/tests/e2e/desktopmode/flicker-service/src/com/android/wm/shell/flicker/DesktopModeFlickerScenarios.kt
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/flicker-service/src/com/android/wm/shell/flicker/DesktopModeFlickerScenarios.kt
@@ -498,9 +498,9 @@
it.remove(VisibleLayersShownMoreThanOneConsecutiveEntry())
} +
listOf(
- AppWindowOnTopAtStart(DESKTOP_MODE_APP),
AppWindowBecomesInvisible(DESKTOP_MODE_APP),
AppWindowOnTopAtEnd(LAUNCHER),
+ AppWindowIsInvisibleAtEnd(DESKTOP_WALLPAPER),
).associateBy({ it }, { AssertionInvocationGroup.BLOCKING })
)
val OPEN_UNLIMITED_APPS =
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 f0c97d3..cc37c44 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,9 +22,10 @@
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
import android.view.Display.DEFAULT_DISPLAY
import android.view.IWindowManager
import android.view.WindowManager.TRANSIT_CHANGE
@@ -32,6 +33,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
@@ -40,6 +42,8 @@
import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider
import com.android.wm.shell.transition.Transitions
import com.google.common.truth.Truth.assertThat
+import com.google.testing.junit.testparameterinjector.TestParameter
+import com.google.testing.junit.testparameterinjector.TestParameterInjector
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -59,7 +63,7 @@
* Usage: atest WMShellUnitTests:DesktopDisplayModeControllerTest
*/
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(TestParameterInjector::class)
class DesktopDisplayModeControllerTest : ShellTestCase() {
private val transitions = mock<Transitions>()
private val rootTaskDisplayAreaOrganizer = mock<RootTaskDisplayAreaOrganizer>()
@@ -139,33 +143,30 @@
}
@Test
- fun displayWindowingModeSwitchOnDisplayConnected_extendedDisplayDisabled() {
+ @DisableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
+ fun displayWindowingModeSwitchOnDisplayConnected_flagDisabled(
+ @TestParameter param: ModeSwitchTestCase
+ ) {
testDisplayWindowingModeSwitch(
- defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
- extendedDisplayEnabled = false,
+ param.defaultWindowingMode,
+ param.extendedDisplayEnabled,
+ // When the flag is disabled, never switch.
expectToSwitch = false,
)
}
@Test
- fun displayWindowingModeSwitchOnDisplayConnected_fullscreenDisplay() {
+ @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING)
+ fun displayWindowingModeSwitchOnDisplayConnected(@TestParameter param: ModeSwitchTestCase) {
testDisplayWindowingModeSwitch(
- defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
- extendedDisplayEnabled = true,
- expectToSwitch = true,
+ param.defaultWindowingMode,
+ param.extendedDisplayEnabled,
+ param.expectToSwitchByDefault,
)
}
@Test
- fun displayWindowingModeSwitchOnDisplayConnected_freeformDisplay() {
- testDisplayWindowingModeSwitch(
- defaultWindowingMode = WINDOWING_MODE_FREEFORM,
- extendedDisplayEnabled = true,
- 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)
@@ -184,6 +185,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 {
@@ -231,7 +233,34 @@
}
}
- private companion object {
+ companion object {
const val EXTERNAL_DISPLAY_ID = 100
+
+ enum class ModeSwitchTestCase(
+ val defaultWindowingMode: Int,
+ val extendedDisplayEnabled: Boolean,
+ val expectToSwitchByDefault: Boolean,
+ ) {
+ FULLSCREEN_DISPLAY(
+ defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
+ extendedDisplayEnabled = true,
+ expectToSwitchByDefault = true,
+ ),
+ FULLSCREEN_DISPLAY_MIRRORING(
+ defaultWindowingMode = WINDOWING_MODE_FULLSCREEN,
+ extendedDisplayEnabled = false,
+ expectToSwitchByDefault = false,
+ ),
+ FREEFORM_DISPLAY(
+ defaultWindowingMode = WINDOWING_MODE_FREEFORM,
+ extendedDisplayEnabled = true,
+ expectToSwitchByDefault = false,
+ ),
+ FREEFORM_DISPLAY_MIRRORING(
+ defaultWindowingMode = WINDOWING_MODE_FREEFORM,
+ extendedDisplayEnabled = false,
+ expectToSwitchByDefault = false,
+ ),
+ }
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
index 0d1c5722..3e6f688 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
@@ -33,6 +33,7 @@
import com.android.wm.shell.TestRunningTaskInfoBuilder
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.ShellExecutor
+import com.android.wm.shell.transition.Transitions
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
@@ -154,6 +155,24 @@
assertTrue("Should animate going to back freeform task close transition", animates)
}
+ @Test
+ fun startAnimation_minimizeTransitionToBackFreeformTask_returnsTrue() {
+ val animates =
+ handler.startAnimation(
+ transition = mock(),
+ info =
+ createTransitionInfo(
+ type = Transitions.TRANSIT_MINIMIZE,
+ task = createTask(WINDOWING_MODE_FREEFORM),
+ ),
+ startTransaction = mock(),
+ finishTransaction = mock(),
+ finishCallback = {},
+ )
+
+ assertTrue("Should animate going to back freeform task minimize transition", animates)
+ }
+
private fun createTransitionInfo(
type: Int = WindowManager.TRANSIT_TO_BACK,
changeMode: Int = WindowManager.TRANSIT_TO_BACK,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt
index 50590f0..6b0ee5b 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt
@@ -56,7 +56,7 @@
}
@Test
- fun onTaskOpening_fullscreenTask_notActiveDesktopTask_noop() {
+ fun onTaskOpening_fullscreenTask_nonActiveDesktopTask_noop() {
val task = createFullscreenTask().apply { isVisible = true }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(false)
@@ -68,7 +68,7 @@
}
@Test
- fun onTaskOpening_freeformTask_activeDesktopTask_removesTaskFromRepo() {
+ fun onTaskOpening_fullscreenTask_taskIsActiveInDesktopRepo_removesTaskFromDesktopRepo() {
val task = createFullscreenTask().apply { isVisible = true }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
@@ -78,8 +78,19 @@
}
@Test
- fun onTaskOpening_freeformTask_visibleDesktopTask_addsTaskToRepository() {
+ fun onTaskOpening_freeformTask_activeInDesktopRepository_noop() {
val task = createFreeformTask().apply { isVisible = true }
+ whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
+
+ desktopTaskChangeListener.onTaskOpening(task)
+
+ verify(desktopUserRepositories.current, never())
+ .addTask(task.displayId, task.taskId, task.isVisible)
+ }
+
+ @Test
+ fun onTaskOpening_freeformTask_notActiveInDesktopRepo_addsTaskToRepository() {
+ val task = createFreeformTask().apply { isVisible = false }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(false)
desktopTaskChangeListener.onTaskOpening(task)
@@ -88,17 +99,7 @@
}
@Test
- fun onTaskOpening_freeformTask_nonVisibleDesktopTask_addsTaskToRepository() {
- val task = createFreeformTask().apply { isVisible = false }
- whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
-
- desktopTaskChangeListener.onTaskOpening(task)
-
- verify(desktopUserRepositories.current).addTask(task.displayId, task.taskId, task.isVisible)
- }
-
- @Test
- fun onTaskChanging_freeformTaskOutsideDesktop_removesTaskFromRepo() {
+ fun onTaskChanging_fullscreenTask_activeInDesktopRepository_removesTaskFromRepo() {
val task = createFullscreenTask().apply { isVisible = true }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
@@ -108,7 +109,27 @@
}
@Test
- fun onTaskChanging_visibleTaskInDesktop_updatesTaskVisibility() {
+ fun onTaskChanging_fullscreenTask_nonActiveInDesktopRepo_noop() {
+ val task = createFullscreenTask().apply { isVisible = true }
+ whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(false)
+
+ desktopTaskChangeListener.onTaskChanging(task)
+
+ verify(desktopUserRepositories.current, never()).removeTask(task.displayId, task.taskId)
+ }
+
+ @Test
+ fun onTaskChanging_freeformTask_nonActiveTaskInDesktopRepo_addsTaskToDesktopRepo() {
+ val task = createFreeformTask().apply { isVisible = true }
+ whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(false)
+
+ desktopTaskChangeListener.onTaskChanging(task)
+
+ verify(desktopUserRepositories.current).addTask(task.displayId, task.taskId, task.isVisible)
+ }
+
+ @Test
+ fun onTaskChanging_freeformTask_activeVisibleTaskInDesktopRepo_updatesTaskVisibility() {
val task = createFreeformTask().apply { isVisible = true }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
@@ -119,7 +140,7 @@
}
@Test
- fun onTaskChanging_nonVisibleTask_updatesTaskVisibility() {
+ fun onTaskChanging_freeformTask_activeNonVisibleTask_updatesTaskVisibility() {
val task = createFreeformTask().apply { isVisible = false }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
@@ -130,7 +151,7 @@
}
@Test
- fun onTaskMovingToFront_freeformTaskOutsideDesktop_removesTaskFromRepo() {
+ fun onTaskMovingToFront_fullscreenTask_activeTaskInDesktopRepo_removesTaskFromRepo() {
val task = createFullscreenTask().apply { isVisible = true }
whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
@@ -140,9 +161,18 @@
}
@Test
- fun onTaskMovingToFront_freeformTaskOutsideDesktop_addsTaskToRepo() {
+ fun onTaskMovingToFront_fullscreenTask_nonActiveTaskInDesktopRepo_noop() {
val task = createFullscreenTask().apply { isVisible = true }
- whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true)
+ whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(false)
+
+ desktopTaskChangeListener.onTaskMovingToFront(task)
+
+ verify(desktopUserRepositories.current, never()).removeTask(task.displayId, task.taskId)
+ }
+
+ @Test
+ fun onTaskMovingToFront_freeformTask_addsTaskToRepo() {
+ val task = createFreeformTask().apply { isVisible = true }
desktopTaskChangeListener.onTaskMovingToFront(task)
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 04acaef..63bf6841 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
@@ -332,6 +334,16 @@
whenever(enterDesktopTransitionHandler.moveToDesktop(any(), any())).thenAnswer { Binder() }
whenever(exitDesktopTransitionHandler.startTransition(any(), any(), any(), any()))
.thenReturn(Binder())
+ whenever(
+ desktopMixedTransitionHandler.startLaunchTransition(
+ any(),
+ any(),
+ anyOrNull(),
+ anyOrNull(),
+ anyOrNull(),
+ )
+ )
+ .thenReturn(Binder())
whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
whenever(displayController.getDisplayContext(anyInt())).thenReturn(mockDisplayContext)
whenever(displayController.getDisplay(anyInt())).thenReturn(display)
@@ -423,6 +435,7 @@
recentTasksController,
mockInteractionJankMonitor,
mockHandler,
+ focusTransitionObserver,
desktopModeEventLogger,
desktopModeUiEventLogger,
desktopWallpaperActivityTokenProvider,
@@ -1064,75 +1077,81 @@
}
@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
- fun addMoveToDesktopChanges_gravityLeft_noBoundsApplied() {
+ fun addMoveToDeskTaskChanges_gravityLeft_noBoundsApplied() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(gravity = Gravity.LEFT)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(finalBounds).isEqualTo(Rect())
}
@Test
- fun addMoveToDesktopChanges_gravityRight_noBoundsApplied() {
+ fun addMoveToDeskTaskChanges_gravityRight_noBoundsApplied() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(gravity = Gravity.RIGHT)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(finalBounds).isEqualTo(Rect())
}
@Test
- fun addMoveToDesktopChanges_gravityTop_noBoundsApplied() {
+ fun addMoveToDeskTaskChanges_gravityTop_noBoundsApplied() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(gravity = Gravity.TOP)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(finalBounds).isEqualTo(Rect())
}
@Test
- fun addMoveToDesktopChanges_gravityBottom_noBoundsApplied() {
+ fun addMoveToDeskTaskChanges_gravityBottom_noBoundsApplied() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(gravity = Gravity.BOTTOM)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(finalBounds).isEqualTo(Rect())
@@ -1173,7 +1192,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_positionBottomRight() {
+ fun addMoveToDeskTaskChanges_positionBottomRight() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1182,7 +1201,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1191,7 +1210,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_positionTopLeft() {
+ fun addMoveToDeskTaskChanges_positionTopLeft() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1200,7 +1219,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1209,7 +1228,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_positionBottomLeft() {
+ fun addMoveToDeskTaskChanges_positionBottomLeft() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1218,7 +1237,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1227,7 +1246,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_positionTopRight() {
+ fun addMoveToDeskTaskChanges_positionTopRight() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1236,7 +1255,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1245,7 +1264,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_positionResetsToCenter() {
+ fun addMoveToDeskTaskChanges_positionResetsToCenter() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1254,7 +1273,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1263,7 +1282,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_lastWindowSnapLeft_positionResetsToCenter() {
+ fun addMoveToDeskTaskChanges_lastWindowSnapLeft_positionResetsToCenter() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1275,7 +1294,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1284,7 +1303,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_lastWindowSnapRight_positionResetsToCenter() {
+ fun addMoveToDeskTaskChanges_lastWindowSnapRight_positionResetsToCenter() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1302,7 +1321,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1311,7 +1330,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_lastWindowMaximised_positionResetsToCenter() {
+ fun addMoveToDeskTaskChanges_lastWindowMaximised_positionResetsToCenter() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1321,7 +1340,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1330,7 +1349,7 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_CASCADING_WINDOWS)
- fun addMoveToDesktopChanges_defaultToCenterIfFree() {
+ fun addMoveToDeskTaskChanges_defaultToCenterIfFree() {
setUpLandscapeDisplay()
val stableBounds = Rect()
displayLayout.getStableBoundsForDesktopMode(stableBounds)
@@ -1348,7 +1367,7 @@
val task = setUpFullscreenTask()
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
assertThat(stableBounds.getDesktopTaskPosition(finalBounds!!))
@@ -1356,7 +1375,7 @@
}
@Test
- fun addMoveToDesktopChanges_excludeCaptionFromAppBounds_nonResizableLandscape() {
+ fun addMoveToDeskTaskChanges_excludeCaptionFromAppBounds_nonResizableLandscape() {
setUpLandscapeDisplay()
val task =
setUpFullscreenTask(
@@ -1366,7 +1385,7 @@
whenever(desktopModeCompatPolicy.shouldExcludeCaptionFromAppBounds(task)).thenReturn(true)
val initialAspectRatio = calculateAspectRatio(task)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
val captionInsets = getAppHeaderHeight(context)
@@ -1378,7 +1397,7 @@
}
@Test
- fun addMoveToDesktopChanges_excludeCaptionFromAppBounds_nonResizablePortrait() {
+ fun addMoveToDeskTaskChanges_excludeCaptionFromAppBounds_nonResizablePortrait() {
setUpLandscapeDisplay()
val task =
setUpFullscreenTask(
@@ -1388,7 +1407,7 @@
whenever(desktopModeCompatPolicy.shouldExcludeCaptionFromAppBounds(task)).thenReturn(true)
val initialAspectRatio = calculateAspectRatio(task)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
val finalBounds = findBoundsChange(wct, task)
val captionInsets = getAppHeaderHeight(context)
@@ -1426,29 +1445,29 @@
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_landscapeDevice_userFullscreenOverride_defaultPortraitBounds() {
+ fun addMoveToDeskTaskChanges_landscapeDevice_userFullscreenOverride_defaultPortraitBounds() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(enableUserFullscreenOverride = true)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(DEFAULT_LANDSCAPE_BOUNDS)
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_landscapeDevice_systemFullscreenOverride_defaultPortraitBounds() {
+ fun addMoveToDeskTaskChanges_landscapeDevice_systemFullscreenOverride_defaultPortraitBounds() {
setUpLandscapeDisplay()
val task = setUpFullscreenTask(enableSystemFullscreenOverride = true)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(DEFAULT_LANDSCAPE_BOUNDS)
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_landscapeDevice_portraitResizableApp_aspectRatioOverridden() {
+ fun addMoveToDeskTaskChanges_landscapeDevice_portraitResizableApp_aspectRatioOverridden() {
setUpLandscapeDisplay()
val task =
setUpFullscreenTask(
@@ -1457,36 +1476,36 @@
aspectRatioOverrideApplied = true,
)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(UNRESIZABLE_PORTRAIT_BOUNDS)
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_portraitDevice_userFullscreenOverride_defaultPortraitBounds() {
+ fun addMoveToDeskTaskChanges_portraitDevice_userFullscreenOverride_defaultPortraitBounds() {
setUpPortraitDisplay()
val task = setUpFullscreenTask(enableUserFullscreenOverride = true)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(DEFAULT_PORTRAIT_BOUNDS)
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_portraitDevice_systemFullscreenOverride_defaultPortraitBounds() {
+ fun addMoveToDeskTaskChanges_portraitDevice_systemFullscreenOverride_defaultPortraitBounds() {
setUpPortraitDisplay()
val task = setUpFullscreenTask(enableSystemFullscreenOverride = true)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(DEFAULT_PORTRAIT_BOUNDS)
}
@Test
@EnableFlags(Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS)
- fun addMoveToDesktopChanges_portraitDevice_landscapeResizableApp_aspectRatioOverridden() {
+ fun addMoveToDeskTaskChanges_portraitDevice_landscapeResizableApp_aspectRatioOverridden() {
setUpPortraitDisplay()
val task =
setUpFullscreenTask(
@@ -1496,7 +1515,7 @@
aspectRatioOverrideApplied = true,
)
val wct = WindowContainerTransaction()
- controller.addMoveToDesktopChanges(wct, task)
+ controller.addMoveToDeskTaskChanges(wct, task, deskId = 0)
assertThat(findBoundsChange(wct, task)).isEqualTo(UNRESIZABLE_LANDSCAPE_BOUNDS)
}
@@ -1607,7 +1626,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)
@@ -1622,7 +1641,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)
@@ -1794,7 +1813,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(
@@ -1809,6 +1828,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()))
@@ -2459,7 +2506,7 @@
@Test
fun moveTaskToFront_backgroundTask_launchesTask() {
- val task = createTaskInfo(1)
+ val task = createRecentTaskInfo(1)
whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null)
whenever(
desktopMixedTransitionHandler.startLaunchTransition(
@@ -2481,7 +2528,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(
@@ -2777,6 +2824,71 @@
}
@Test
+ 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,
+ )
+ 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()
@@ -2850,6 +2962,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()
@@ -3363,6 +3504,39 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun handleRequest_fullscreenTask_switchToDesktop_movesTaskToDesk() {
+ taskRepository.addDesk(displayId = DEFAULT_DISPLAY, deskId = 5)
+ setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = 5)
+ taskRepository.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 5)
+
+ val fullscreenTask = createFullscreenTask()
+ val wct = controller.handleRequest(Binder(), createTransition(fullscreenTask))
+
+ assertNotNull(wct, "should handle request")
+ verify(desksOrganizer).moveTaskToDesk(wct = wct, deskId = 5, task = fullscreenTask)
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun handleRequest_fullscreenTaskThatWasInactiveInDesk_tracksDeskDeactivation() {
+ // Set up and existing desktop task in an active desk.
+ val inactiveInDeskTask = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = 0)
+ taskRepository.setDeskInactive(deskId = 0)
+
+ // Now the task is launching as fullscreen.
+ inactiveInDeskTask.configuration.windowConfiguration.windowingMode =
+ WINDOWING_MODE_FULLSCREEN
+ val transition = Binder()
+ val wct = controller.handleRequest(transition, createTransition(inactiveInDeskTask))
+
+ // Desk is deactivated.
+ assertNotNull(wct, "should handle request")
+ verify(desksTransitionsObserver)
+ .addPendingTransition(DeskTransition.DeactivateDesk(transition, deskId = 0))
+ }
+
+ @Test
fun handleRequest_fullscreenTask_freeformVisible_returnSwitchToFreeformWCT() {
val homeTask = setUpHomeTask()
val freeformTask = setUpFreeformTask()
@@ -3538,6 +3712,20 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun handleRequest_freeformTaskFromInactiveDesk_tracksDeskDeactivation() {
+ val deskId = 0
+ val freeformTask = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ taskRepository.setDeskInactive(deskId = deskId)
+
+ val transition = Binder()
+ controller.handleRequest(transition, createTransition(freeformTask))
+
+ verify(desksTransitionsObserver)
+ .addPendingTransition(DeskTransition.DeactivateDesk(transition, deskId))
+ }
+
+ @Test
fun handleRequest_freeformTask_relaunchActiveTask_taskBecomesUndefined() {
val freeformTask = setUpFreeformTask()
markTaskHidden(freeformTask)
@@ -3785,6 +3973,24 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
+ fun handleRequest_recentsAnimationRunning_relaunchActiveTask_tracksDeskDeactivation() {
+ // Set up a visible freeform task
+ val freeformTask = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = 0)
+ markTaskVisible(freeformTask)
+
+ // Mark recents animation running
+ recentsTransitionStateListener.onTransitionStateChanged(TRANSITION_STATE_ANIMATING)
+
+ val transition = Binder()
+ controller.handleRequest(transition, createTransition(freeformTask))
+
+ desksTransitionsObserver.addPendingTransition(
+ DeskTransition.DeactivateDesk(transition, deskId = 0)
+ )
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY)
fun handleRequest_topActivityTransparentWithoutDisplay_returnSwitchToFreeformWCT() {
val freeformTask = setUpFreeformTask()
@@ -3902,6 +4108,31 @@
}
@Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY,
+ )
+ fun handleRequest_systemUIActivityWithDisplayInFreeformTask_inDesktop_tracksDeskDeactivation() {
+ val deskId = 5
+ taskRepository.addDesk(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ taskRepository.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = deskId)
+ val systemUIPackageName =
+ context.resources.getString(com.android.internal.R.string.config_systemUi)
+ val baseComponent = ComponentName(systemUIPackageName, /* cls= */ "")
+ val task =
+ setUpFreeformTask(displayId = DEFAULT_DISPLAY).apply {
+ baseActivity = baseComponent
+ isTopActivityNoDisplay = false
+ }
+
+ val transition = Binder()
+ controller.handleRequest(transition, createTransition(task))
+
+ verify(desksTransitionsObserver)
+ .addPendingTransition(DeskTransition.DeactivateDesk(transition, deskId))
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY)
fun handleRequest_systemUIActivityWithoutDisplay_returnSwitchToFreeformWCT() {
val freeformTask = setUpFreeformTask()
@@ -6443,6 +6674,25 @@
@EnableFlags(
Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
+ Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,
+ )
+ fun startLaunchTransition_desktopNotShowing_updatesDesktopEnterExitListener() {
+ setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = 0)
+ taskRepository.setDeskInactive(deskId = 0)
+
+ controller.startLaunchTransition(
+ transitionType = TRANSIT_OPEN,
+ wct = WindowContainerTransaction(),
+ launchingTaskId = null,
+ )
+
+ verify(desktopModeEnterExitTransitionListener).onEnterDesktopModeTransitionStarted(any())
+ }
+
+ @Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
)
fun startLaunchTransition_desktopShowing_doesNotReorderWallpaper() {
val wct = WindowContainerTransaction()
@@ -6611,7 +6861,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)
}
@@ -6782,6 +7032,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())
@@ -7040,8 +7296,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/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/bubbles/DropTargetManagerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/bubbles/DropTargetManagerTest.kt
index 180a691..3f7f21e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/bubbles/DropTargetManagerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/bubbles/DropTargetManagerTest.kt
@@ -18,7 +18,6 @@
import android.content.Context
import android.graphics.Rect
-import android.view.View
import android.widget.FrameLayout
import androidx.core.animation.AnimatorTestRule
import androidx.test.core.app.ApplicationProvider.getApplicationContext
@@ -58,8 +57,8 @@
private val bubbleRightDragZone =
DragZone.Bubble.Right(bounds = Rect(200, 0, 300, 100), dropTarget = Rect(200, 0, 280, 150))
- private val dropTargetView: View
- get() = container.getChildAt(0)
+ private val dropTargetView: DropTargetView
+ get() = container.getChildAt(0) as DropTargetView
@Before
fun setUp() {
@@ -238,8 +237,9 @@
InstrumentationRegistry.getInstrumentation().runOnMainSync {
dropTargetManager.onDragEnded()
- // advance the timer by 100ms so the animation doesn't complete
- animatorTestRule.advanceTimeBy(100)
+ // advance the timer by 50ms so the animation doesn't complete
+ // needs to be < DropTargetManager.DROP_TARGET_ALPHA_OUT_DURATION
+ animatorTestRule.advanceTimeBy(50)
}
assertThat(container.childCount).isEqualTo(1)
@@ -320,10 +320,10 @@
}
private fun verifyDropTargetPosition(rect: Rect) {
- assertThat(dropTargetView.scaleX).isEqualTo(rect.width())
- assertThat(dropTargetView.scaleY).isEqualTo(rect.height())
- assertThat(dropTargetView.translationX).isEqualTo(rect.exactCenterX())
- assertThat(dropTargetView.translationY).isEqualTo(rect.exactCenterY())
+ assertThat(dropTargetView.getRect().left).isEqualTo(rect.left)
+ assertThat(dropTargetView.getRect().top).isEqualTo(rect.top)
+ assertThat(dropTargetView.getRect().right).isEqualTo(rect.right)
+ assertThat(dropTargetView.getRect().bottom).isEqualTo(rect.bottom)
}
private class FakeDragZoneChangedListener : DropTargetManager.DragZoneChangedListener {
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/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/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp
index 30e7a62..6f60d01 100644
--- a/libs/hwui/CanvasTransform.cpp
+++ b/libs/hwui/CanvasTransform.cpp
@@ -55,12 +55,20 @@
}
}
+SkColor invert(SkColor color) {
+ Lab lab = sRGBToLab(color);
+ lab.L = 100 - lab.L;
+ return LabToSRGB(lab, SkColorGetA(color));
+}
+
SkColor transformColor(ColorTransform transform, SkColor color) {
switch (transform) {
case ColorTransform::Light:
return makeLight(color);
case ColorTransform::Dark:
return makeDark(color);
+ case ColorTransform::Invert:
+ return invert(color);
default:
return color;
}
@@ -80,19 +88,6 @@
static void applyColorTransform(ColorTransform transform, SkPaint& paint) {
if (transform == ColorTransform::None) return;
- if (transform == ColorTransform::Invert) {
- auto filter = SkHighContrastFilter::Make(
- {/* grayscale= */ false, SkHighContrastConfig::InvertStyle::kInvertLightness,
- /* contrast= */ 0.0f});
-
- if (paint.getColorFilter()) {
- paint.setColorFilter(SkColorFilters::Compose(filter, paint.refColorFilter()));
- } else {
- paint.setColorFilter(filter);
- }
- return;
- }
-
SkColor newColor = transformColor(transform, paint.getColor());
paint.setColor(newColor);
@@ -112,6 +107,22 @@
paint.setShader(SkGradientShader::MakeLinear(
info.fPoints, info.fColors, info.fColorOffsets, info.fColorCount,
info.fTileMode, info.fGradientFlags, nullptr));
+ } else {
+ if (transform == ColorTransform::Invert) {
+ // Since we're trying to invert every thing around this draw call, we invert
+ // the color of the draw call if we don't know what it is.
+ auto filter = SkHighContrastFilter::Make(
+ {/* grayscale= */ false,
+ SkHighContrastConfig::InvertStyle::kInvertLightness,
+ /* contrast= */ 0.0f});
+
+ if (paint.getColorFilter()) {
+ paint.setColorFilter(SkColorFilters::Compose(filter, paint.refColorFilter()));
+ } else {
+ paint.setColorFilter(filter);
+ }
+ return;
+ }
}
}
@@ -150,8 +161,13 @@
}
bool transformPaint(ColorTransform transform, SkPaint* paint, BitmapPalette palette) {
- palette = filterPalette(paint, palette);
bool shouldInvert = false;
+ if (transform == ColorTransform::Invert && palette != BitmapPalette::Colorful) {
+ // When the transform is Invert we invert any image that is not deemed "colorful",
+ // regardless of calculated image brightness.
+ shouldInvert = true;
+ }
+ palette = filterPalette(paint, palette);
if (palette == BitmapPalette::Light && transform == ColorTransform::Dark) {
shouldInvert = true;
}
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/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 4801bd1..8b4e59a 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -27,6 +27,7 @@
#include "DamageAccumulator.h"
#include "Debug.h"
+#include "FeatureFlags.h"
#include "Properties.h"
#include "TreeInfo.h"
#include "VectorDrawable.h"
@@ -398,26 +399,32 @@
deleteDisplayList(observer, info);
mDisplayList = std::move(mStagingDisplayList);
if (mDisplayList) {
- WebViewSyncData syncData{.applyForceDark = shouldEnableForceDark(info)};
+ WebViewSyncData syncData{.applyForceDark = shouldEnableForceDark(info) ||
+ (info && isForceInvertDark(*info))};
mDisplayList.syncContents(syncData);
handleForceDark(info);
}
}
+// Return true if the tree should use the force invert feature that inverts
+// the entire tree to darken it.
inline bool RenderNode::isForceInvertDark(TreeInfo& info) {
- return CC_UNLIKELY(
- info.forceDarkType == android::uirenderer::ForceDarkType::FORCE_INVERT_COLOR_DARK);
+ return CC_UNLIKELY(info.forceDarkType ==
+ android::uirenderer::ForceDarkType::FORCE_INVERT_COLOR_DARK);
}
+// Return true if the tree should use the force dark feature that selectively
+// darkens light nodes on the tree.
inline bool RenderNode::shouldEnableForceDark(TreeInfo* info) {
- return CC_UNLIKELY(
- info &&
- (!info->disableForceDark || isForceInvertDark(*info)));
+ return CC_UNLIKELY(info && !info->disableForceDark);
}
-
-
-void RenderNode::handleForceDark(android::uirenderer::TreeInfo *info) {
+void RenderNode::handleForceDark(TreeInfo *info) {
+ if (CC_UNLIKELY(view_accessibility_flags::force_invert_color() && info &&
+ isForceInvertDark(*info))) {
+ mDisplayList.applyColorTransform(ColorTransform::Invert);
+ return;
+ }
if (!shouldEnableForceDark(info)) {
return;
}
@@ -427,13 +434,7 @@
children.push_back(node);
});
if (mDisplayList.hasText()) {
- if (isForceInvertDark(*info) && mDisplayList.hasFill()) {
- // Handle a special case for custom views that draw both text and background in the
- // same RenderNode, which would otherwise be altered to white-on-white text.
- usage = UsageHint::Container;
- } else {
- usage = UsageHint::Foreground;
- }
+ usage = UsageHint::Foreground;
}
if (usage == UsageHint::Unknown) {
if (children.size() > 1) {
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index 63a024b..3ef9708 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -16,6 +16,8 @@
#include "Bitmap.h"
#include <android-base/file.h>
+
+#include "FeatureFlags.h"
#include "HardwareBitmapUploader.h"
#include "Properties.h"
#ifdef __ANDROID__ // Layoutlib does not support render thread
@@ -547,9 +549,16 @@
}
ALOGV("samples = %d, hue [min = %f, max = %f, avg = %f]; saturation [min = %f, max = %f, avg = "
- "%f]",
+ "%f] %d x %d",
sampledCount, hue.min(), hue.max(), hue.average(), saturation.min(), saturation.max(),
- saturation.average());
+ saturation.average(), info.width(), info.height());
+
+ if (CC_UNLIKELY(view_accessibility_flags::force_invert_color())) {
+ if (saturation.delta() > 0.1f ||
+ (hue.delta() > 20 && saturation.average() > 0.2f && value.average() < 0.9f)) {
+ return BitmapPalette::Colorful;
+ }
+ }
if (hue.delta() <= 20 && saturation.delta() <= .1f) {
if (value.average() >= .5f) {
diff --git a/libs/hwui/hwui/Bitmap.h b/libs/hwui/hwui/Bitmap.h
index 4e9bcf2..0fe5fe8 100644
--- a/libs/hwui/hwui/Bitmap.h
+++ b/libs/hwui/hwui/Bitmap.h
@@ -49,6 +49,7 @@
Unknown,
Light,
Dark,
+ Colorful,
};
namespace uirenderer {
diff --git a/libs/hwui/jni/GIFMovie.cpp b/libs/hwui/jni/GIFMovie.cpp
index 6c82aa1..476b6fd 100644
--- a/libs/hwui/jni/GIFMovie.cpp
+++ b/libs/hwui/jni/GIFMovie.cpp
@@ -63,7 +63,7 @@
}
fCurrIndex = -1;
fLastDrawIndex = -1;
- fPaintingColor = SkPackARGB32(0, 0, 0, 0);
+ fPaintingColor = SK_AlphaTRANSPARENT;
}
GIFMovie::~GIFMovie()
@@ -127,7 +127,7 @@
for (; width > 0; width--, src++, dst++) {
if (*src != transparent && *src < cmap->ColorCount) {
const GifColorType& col = cmap->Colors[*src];
- *dst = SkPackARGB32(0xFF, col.Red, col.Green, col.Blue);
+ *dst = SkColorSetRGB(col.Red, col.Green, col.Blue);
}
}
}
@@ -395,10 +395,10 @@
lastIndex = fGIF->ImageCount - 1;
}
- SkColor bgColor = SkPackARGB32(0, 0, 0, 0);
+ SkColor bgColor = SK_ColorTRANSPARENT;
if (gif->SColorMap != nullptr && gif->SBackGroundColor < gif->SColorMap->ColorCount) {
const GifColorType& col = gif->SColorMap->Colors[gif->SBackGroundColor];
- bgColor = SkColorSetARGB(0xFF, col.Red, col.Green, col.Blue);
+ bgColor = SkColorSetRGB(col.Red, col.Green, col.Blue);
}
// draw each frames - not intelligent way
@@ -411,7 +411,7 @@
if (!trans && gif->SColorMap != nullptr) {
fPaintingColor = bgColor;
} else {
- fPaintingColor = SkColorSetARGB(0, 0, 0, 0);
+ fPaintingColor = SK_ColorTRANSPARENT;
}
bm->eraseColor(fPaintingColor);
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/LocationRequest.java b/location/java/android/location/LocationRequest.java
index 80b55e2..5a993bf 100644
--- a/location/java/android/location/LocationRequest.java
+++ b/location/java/android/location/LocationRequest.java
@@ -33,6 +33,7 @@
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.content.pm.PackageManager;
+import android.location.flags.Flags;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
@@ -181,7 +182,8 @@
public static final int POWER_HIGH = 203;
private static final long IMPLICIT_MIN_UPDATE_INTERVAL = -1;
- private static final double IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR = 1D / 6D;
+ private static final double LEGACY_IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR = 1D / 6D;
+ private static final double IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR = 1D / 2D;
private @Nullable String mProvider;
private @Quality int mQuality;
@@ -553,7 +555,10 @@
*/
public @IntRange(from = 0) long getMinUpdateIntervalMillis() {
if (mMinUpdateIntervalMillis == IMPLICIT_MIN_UPDATE_INTERVAL) {
- return (long) (mIntervalMillis * IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR);
+ if (Flags.updateMinLocationRequestInterval()) {
+ return (long) (mIntervalMillis * IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR);
+ }
+ return (long) (mIntervalMillis * LEGACY_IMPLICIT_MIN_UPDATE_INTERVAL_FACTOR);
} else {
// the min is only necessary in case someone use a deprecated function to mess with the
// interval or min update interval
diff --git a/location/java/android/location/flags/location.aconfig b/location/java/android/location/flags/location.aconfig
index 1b38982..83b1778 100644
--- a/location/java/android/location/flags/location.aconfig
+++ b/location/java/android/location/flags/location.aconfig
@@ -168,3 +168,14 @@
description: "Flag for GNSS assistance interface"
bug: "209078566"
}
+
+flag {
+ name: "update_min_location_request_interval"
+ namespace: "location"
+ description: "Flag for updating the default logic for the minimal interval for location request"
+ bug: "397444378"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
index fb89973..66de8c7 100644
--- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
+++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
@@ -27,8 +27,6 @@
import android.telephony.emergency.EmergencyNumber;
import android.util.Log;
-import com.android.internal.annotations.KeepForWeakReference;
-
import java.util.concurrent.TimeUnit;
/**
@@ -94,7 +92,6 @@
// The internal implementation of TelephonyManager uses WeakReference so we have to keep a
// reference here.
- @KeepForWeakReference
private final EmergencyCallListener mEmergencyCallListener = new EmergencyCallListener();
private final EmergencyCallCallback mEmergencyCallCallback;
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/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 9bb31d0..4e86eac 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -1223,8 +1223,14 @@
private static final String TAG = "CodecCapabilities";
// NEW-STYLE CAPABILITIES
+ // Capabilities for an audio codec.
+ @Nullable
private AudioCapabilities mAudioCaps;
+ // Capabilities for a video codec.
+ @Nullable
private VideoCapabilities mVideoCaps;
+ // Capabilities specific to an encoder (vs. a decoder).
+ @Nullable
private EncoderCapabilities mEncoderCaps;
private MediaFormat mDefaultFormat;
@@ -1262,6 +1268,7 @@
/**
* Returns the audio capabilities or {@code null} if this is not an audio codec.
*/
+ @Nullable
public AudioCapabilities getAudioCapabilities() {
return mAudioCaps;
}
@@ -1273,6 +1280,7 @@
/**
* Returns the encoding capabilities or {@code null} if this is not an encoder.
*/
+ @Nullable
public EncoderCapabilities getEncoderCapabilities() {
return mEncoderCaps;
}
@@ -1284,6 +1292,7 @@
/**
* Returns the video capabilities or {@code null} if this is not a video codec.
*/
+ @Nullable
public VideoCapabilities getVideoCapabilities() {
return mVideoCaps;
}
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/Utils.java b/media/java/android/media/Utils.java
index d6e27b0..9db527b 100644
--- a/media/java/android/media/Utils.java
+++ b/media/java/android/media/Utils.java
@@ -18,6 +18,8 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.annotation.TestApi;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
@@ -61,16 +63,30 @@
*
* @hide
*/
+@TestApi
+@SuppressLint({"UnflaggedApi", "StaticUtils"}) // Test API
public class Utils {
private static final String TAG = "Utils";
+ /** @hide
+ * The vibration uri key parameter
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi") // Test API
public static final String VIBRATION_URI_PARAM = "vibration_uri";
+ /** @hide
+ * Indicates the synchronized vibration
+ */
+ @TestApi
+ @SuppressLint("UnflaggedApi") // Test API
public static final String SYNCHRONIZED_VIBRATION = "synchronized";
/**
* Sorts distinct (non-intersecting) range array in ascending order.
* @throws java.lang.IllegalArgumentException if ranges are not distinct
+ *
+ * @hide
*/
public static <T extends Comparable<? super T>> void sortDistinctRanges(Range<T>[] ranges) {
Arrays.sort(ranges, new Comparator<Range<T>>() {
@@ -92,6 +108,8 @@
* @param one a sorted set of non-intersecting ranges in ascending order
* @param another another sorted set of non-intersecting ranges in ascending order
* @return the intersection of the two sets, sorted in ascending order
+ *
+ * @hide
*/
public static <T extends Comparable<? super T>>
Range<T>[] intersectSortedDistinctRanges(Range<T>[] one, Range<T>[] another) {
@@ -124,6 +142,8 @@
* @return if the value is in one of the ranges, it returns the index of that range. Otherwise,
* the return value is {@code (-1-index)} for the {@code index} of the range that is
* immediately following {@code value}.
+ *
+ * @hide
*/
public static <T extends Comparable<? super T>>
int binarySearchDistinctRanges(Range<T>[] ranges, T value) {
@@ -358,6 +378,8 @@
* @param fileName desired name for the file.
* @param mimeType MIME type of the file to create.
* @return the File object in the storage, or null if an error occurs.
+ *
+ * @hide
*/
public static File getUniqueExternalFile(Context context, String subdirectory, String fileName,
String mimeType) {
@@ -676,6 +698,8 @@
* Must match the implementation of BluetoothUtils.toAnonymizedAddress()
* @param address MAC address to be anonymized
* @return anonymized MAC address
+ *
+ * @hide
*/
public static @Nullable String anonymizeBluetoothAddress(@Nullable String address) {
if (address == null) {
@@ -693,6 +717,8 @@
* @param deviceType the internal type of the audio device
* @param address MAC address to be anonymized
* @return anonymized MAC address
+ *
+ * @hide
*/
public static @Nullable String anonymizeBluetoothAddress(
int deviceType, @Nullable String address) {
@@ -707,6 +733,8 @@
*
* @param context the {@link Context}
* @return {@code true} if the device supports ringtone vibration
+ *
+ * @hide
*/
public static boolean isRingtoneVibrationSettingsSupported(Context context) {
final Resources res = context.getResources();
@@ -719,6 +747,8 @@
*
* @param ringtoneUri the ringtone Uri
* @return {@code true} if the Uri has vibration parameter
+ *
+ * @hide
*/
public static boolean hasVibration(Uri ringtoneUri) {
if (ringtoneUri == null) {
@@ -734,6 +764,8 @@
* @param ringtoneUri the ringtone Uri
* @return parsed {@link Uri} of vibration parameter, {@code null} if the vibration parameter
* is not found.
+ *
+ * @hide
*/
public static @Nullable Uri getVibrationUri(Uri ringtoneUri) {
if (ringtoneUri == null) {
@@ -751,6 +783,8 @@
*
* @param vibrator the vibrator to resolve the vibration file
* @param vibrationUri the vibration file Uri to represent a vibration
+ *
+ * @hide
*/
@SuppressWarnings("FlaggedApi") // VibrationXmlParser is available internally as hidden APIs.
public static VibrationEffect parseVibrationEffect(Vibrator vibrator, Uri vibrationUri) {
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/native/webview/TEST_MAPPING b/native/webview/TEST_MAPPING
index 3858059..c9b5476 100644
--- a/native/webview/TEST_MAPPING
+++ b/native/webview/TEST_MAPPING
@@ -17,15 +17,6 @@
"exclude-annotation": "android.test.FlakyTest"
}
]
- },
- {
- "name": "GtsWebViewHostTestCases",
- "keywords": ["internal"],
- "options": [
- {
- "exclude-annotation": "android.test.FlakyTest"
- }
- ]
}
]
}
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/layout/activity_confirmation.xml b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
index 0ad7f5f..3d011bc 100644
--- a/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
+++ b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
@@ -76,6 +76,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
+ android:accessibilityLiveRegion="polite"
style="@style/TimeoutMessage" />
<androidx.recyclerview.widget.RecyclerView
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..b2c1e60 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionAssociationActivity.java
@@ -339,7 +339,7 @@
private void onDiscoveryStateChanged(DiscoveryState newState) {
switch (newState) {
case IN_PROGRESS: {
- mTimeoutMessage.setText(null);
+ mTimeoutMessage.setVisibility(View.GONE);
mProgressBar.setIndeterminate(true);
break;
}
@@ -351,6 +351,7 @@
R.string.message_discovery_soft_timeout,
deviceType, discoveryType, profile);
mTimeoutMessage.setText(message);
+ mTimeoutMessage.setVisibility(View.VISIBLE);
break;
}
case FINISHED_STOPPED: {
@@ -363,6 +364,7 @@
}
}
mTimeoutMessage.setText(getString(R.string.message_discovery_hard_timeout));
+ mTimeoutMessage.setVisibility(View.VISIBLE);
}
mProgressBar.setIndeterminate(false);
break;
@@ -528,6 +530,7 @@
mVendorHeader.setVisibility(View.VISIBLE);
mProfileIcon.setVisibility(View.GONE);
mDeviceListRecyclerView.setVisibility(View.GONE);
+ mTimeoutMessage.setVisibility(View.GONE);
mProgressBar.setVisibility(View.GONE);
mBorderBottom.setVisibility(View.GONE);
}
@@ -592,6 +595,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/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceListAdapter.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceListAdapter.java
index d8348d1..8f12cb4 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceListAdapter.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceListAdapter.java
@@ -101,7 +101,7 @@
void setDevices(List<DeviceFilterPair<?>> devices) {
mDevices = devices;
- notifyDataSetChanged();
+ notifyItemRangeInserted(devices.size(), mDevices.size());
}
static class ViewHolder extends RecyclerView.ViewHolder {
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/EasterEgg/src/com/android/egg/landroid/Autopilot.kt b/packages/EasterEgg/src/com/android/egg/landroid/Autopilot.kt
index 8214c54..a4803d2 100644
--- a/packages/EasterEgg/src/com/android/egg/landroid/Autopilot.kt
+++ b/packages/EasterEgg/src/com/android/egg/landroid/Autopilot.kt
@@ -44,7 +44,7 @@
if (enabled)
listOf(
"---- AUTOPILOT ENGAGED ----",
- "TGT: " + (target?.name?.toUpperCase() ?: "SELECTING..."),
+ "TGT: " + (target?.name?.uppercase() ?: "SELECTING..."),
"EXE: $strategy" + if (debug.isNotEmpty()) " ($debug)" else "",
)
.joinToString("\n")
diff --git a/packages/EasterEgg/src/com/android/egg/landroid/MainActivity.kt b/packages/EasterEgg/src/com/android/egg/landroid/MainActivity.kt
index 95a60c7..61ea08e 100644
--- a/packages/EasterEgg/src/com/android/egg/landroid/MainActivity.kt
+++ b/packages/EasterEgg/src/com/android/egg/landroid/MainActivity.kt
@@ -236,8 +236,8 @@
((closest.pos - pos).mag() - closest.radius).toInt()
listOfNotNull(
landing?.let {
- "LND: ${it.planet.name.toUpperCase()}\n" +
- "JOB: ${it.text.toUpperCase()}"
+ "LND: ${it.planet.name.uppercase()}\n" +
+ "JOB: ${it.text.uppercase()}"
}
?: if (distToClosest < 10_000) {
"ALT: $distToClosest"
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml
index 6221659..3db0ac6 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml
@@ -41,6 +41,7 @@
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
+ android:layout_marginStart="@dimen/settingslib_expressive_space_extrasmall4"
android:theme="?android:attr/actionBarTheme"
android:transitionName="shared_element_view"
app:layout_collapseMode="pin"/>
diff --git a/packages/SettingsLib/OWNERS b/packages/SettingsLib/OWNERS
index 04df308..7348920 100644
--- a/packages/SettingsLib/OWNERS
+++ b/packages/SettingsLib/OWNERS
@@ -8,6 +8,7 @@
evanlaird@google.com
jiannan@google.com
juliacr@google.com
+millchen@google.com
ykhung@google.com
# Exempt resource files (because they are in a flat directory and too hard to manage via OWNERS)
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/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/NormalPaddingMixin.kt
similarity index 69%
copy from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
copy to packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/NormalPaddingMixin.kt
index 231fb2d..5035542 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
+++ b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/NormalPaddingMixin.kt
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.android.systemui.dagger.qualifiers
+package com.android.settingslib.widget
-import javax.inject.Qualifier
-
-@Qualifier
-@MustBeDocumented
-@Retention(AnnotationRetention.RUNTIME)
-annotation class NotifInflation
+/**
+ * A base interface to indicate that a Preference should have normal paddings.
+ *
+ * Preferences implementing this interface will be treated as has normal paddings both inside and
+ * outside.
+ */
+interface NormalPaddingMixin
\ No newline at end of file
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/SettingsTheme/src/com/android/settingslib/widget/SettingsPreferenceGroupAdapter.kt b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsPreferenceGroupAdapter.kt
index a04fce7..2672787 100644
--- a/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsPreferenceGroupAdapter.kt
+++ b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/SettingsPreferenceGroupAdapter.kt
@@ -177,14 +177,32 @@
val v = holder.itemView
// Update padding
if (SettingsThemeHelper.isExpressiveTheme(context)) {
- val paddingStart = if (backgroundRes == 0) mNormalPaddingStart else mGroupPaddingStart
- val paddingEnd = if (backgroundRes == 0) mNormalPaddingEnd else mGroupPaddingEnd
+ val (paddingStart, paddingEnd) = getStartEndPadding(position, backgroundRes)
v.setPaddingRelative(paddingStart, v.paddingTop, paddingEnd, v.paddingBottom)
+ v.clipToOutline = backgroundRes != 0
}
// Update background
v.setBackgroundResource(backgroundRes)
}
+ private fun getStartEndPadding(position: Int, backgroundRes: Int): Pair<Int, Int> {
+ val item = getItem(position)
+ return when {
+ // This item handles edge to edge itself
+ item is NormalPaddingMixin && item is GroupSectionDividerMixin -> 0 to 0
+
+ // According to mappingPreferenceGroup(), backgroundRes == 0 means this item is
+ // GroupSectionDividerMixin or PreferenceCategory, which is design to have normal
+ // padding.
+ // NormalPaddingMixin items are also designed to have normal padding.
+ backgroundRes == 0 || item is NormalPaddingMixin ->
+ mNormalPaddingStart to mNormalPaddingEnd
+
+ // Other items are suppose to have group padding.
+ else -> mGroupPaddingStart to mGroupPaddingEnd
+ }
+ }
+
@DrawableRes
protected fun getRoundCornerDrawableRes(position: Int, isSelected: Boolean): Int {
return getRoundCornerDrawableRes(position, isSelected, false)
diff --git a/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java b/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java
index 4315238..fe8e8b6 100644
--- a/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java
+++ b/packages/SettingsLib/SliderPreference/src/com/android/settingslib/widget/SliderPreference.java
@@ -22,6 +22,7 @@
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
@@ -72,6 +73,7 @@
private int mSliderIncrement;
private boolean mAdjustable;
private boolean mTrackingTouch;
+ private CharSequence mSliderContentDescription;
/**
* Listener reacting to the user pressing DPAD left/right keys if {@code
@@ -143,6 +145,7 @@
@Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setLayoutResource(R.layout.settingslib_expressive_preference_slider);
+ setSelectable(false);
TypedArray a = context.obtainStyledAttributes(
attrs, androidx.preference.R.styleable.SeekBarPreference, defStyleAttr,
@@ -265,6 +268,14 @@
} else {
mSliderIncrement = (int) (mSlider.getStepSize());
}
+ final CharSequence title = getTitle();
+ if (!TextUtils.isEmpty(mSliderContentDescription)) {
+ mSlider.setContentDescription(mSliderContentDescription);
+ } else if (!TextUtils.isEmpty(title)) {
+ mSlider.setContentDescription(title);
+ } else {
+ mSlider.setContentDescription(null);
+ }
mSlider.setValueFrom(mMin);
mSlider.setValueTo(mMax);
mSlider.setValue(mSliderValue);
@@ -273,6 +284,8 @@
mSlider.clearOnChangeListeners();
mSlider.addOnChangeListener(mChangeListener);
mSlider.setEnabled(isEnabled());
+ mSlider.setFocusable(isSelectable());
+ mSlider.setClickable(isSelectable());
// Set up slider color
mSlider.setTrackActiveTintList(mTrackActiveColor);
@@ -471,6 +484,19 @@
setValueInternal(sliderValue, true);
}
+
+ /**
+ * Sets the content description of the {@link Slider}.
+ *
+ * @param contentDescription The content description of the {@link Slider}
+ */
+ public void setSliderContentDescription(@Nullable CharSequence contentDescription) {
+ mSliderContentDescription = contentDescription;
+ if (mSlider != null) {
+ mSlider.setContentDescription(contentDescription);
+ }
+ }
+
@Override
protected void onSetInitialValue(@Nullable Object defaultValue) {
if (defaultValue == null) {
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/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/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index f692601e..3c70fc1 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -96,6 +96,7 @@
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED,
Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
Settings.Secure.ACCESSIBILITY_AUTOCLICK_PANEL_POSITION,
+ Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK,
Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON,
Settings.Secure.PREFERRED_TTY_MODE,
Settings.Secure.ENHANCED_VOICE_PRIVACY_ENABLED,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index e42d3fb..c09e45e 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -147,6 +147,7 @@
VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_DELAY, NON_NEGATIVE_INTEGER_VALIDATOR);
VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_PANEL_POSITION, ANY_STRING_VALIDATOR);
+ VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.ACCESSIBILITY_LARGE_POINTER_ICON, BOOLEAN_VALIDATOR);
VALIDATORS.put(
Secure.PREFERRED_TTY_MODE,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index c29a5a2..167674a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -1722,6 +1722,9 @@
Settings.Secure.ACCESSIBILITY_AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT,
SecureSettingsProto.Accessibility.AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT);
dumpSetting(s, p,
+ Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK,
+ SecureSettingsProto.Accessibility.AUTOCLICK_REVERT_TO_LEFT_CLICK);
+ dumpSetting(s, p,
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED,
SecureSettingsProto.Accessibility.AUTOCLICK_ENABLED);
dumpSetting(s, p,
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..897c1fe 100644
--- a/packages/Shell/OWNERS
+++ b/packages/Shell/OWNERS
@@ -4,12 +4,9 @@
jsharkey@android.com
felipeal@google.com
nandana@google.com
-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/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt
index 2c6d09a..2d03e2b 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContent.kt
@@ -23,7 +23,6 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.Layout
-import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntRect
@@ -35,7 +34,6 @@
import com.android.systemui.communal.ui.compose.section.AmbientStatusBarSection
import com.android.systemui.communal.ui.compose.section.CommunalLockSection
import com.android.systemui.communal.ui.compose.section.CommunalPopupSection
-import com.android.systemui.communal.ui.compose.section.CommunalToDreamButtonSection
import com.android.systemui.communal.ui.compose.section.HubOnboardingSection
import com.android.systemui.communal.ui.view.layout.sections.CommunalAppWidgetSection
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
@@ -61,7 +59,6 @@
private val ambientStatusBarSection: AmbientStatusBarSection,
private val communalPopupSection: CommunalPopupSection,
private val widgetSection: CommunalAppWidgetSection,
- private val communalToDreamButtonSection: CommunalToDreamButtonSection,
private val hubOnboardingSection: HubOnboardingSection,
) {
@@ -103,13 +100,11 @@
Modifier.element(Communal.Elements.IndicationArea).fillMaxWidth()
)
}
- with(communalToDreamButtonSection) { Button() }
},
) { measurables, constraints ->
val communalGridMeasurable = measurables[0]
val lockIconMeasurable = measurables[1]
val bottomAreaMeasurable = measurables[2]
- val screensaverButtonMeasurable: Measurable? = measurables.getOrNull(3)
val noMinConstraints = constraints.copy(minWidth = 0, minHeight = 0)
@@ -152,9 +147,6 @@
val bottomAreaPlaceable = bottomAreaMeasurable.measure(noMinConstraints)
- val screensaverButtonPlaceable =
- screensaverButtonMeasurable?.measure(noMinConstraints)
-
val communalGridPlaceable =
communalGridMeasurable.measure(
noMinConstraints.copy(maxHeight = lockIconBounds.top)
@@ -166,26 +158,12 @@
val bottomAreaTop = constraints.maxHeight - bottomAreaPlaceable.height
bottomAreaPlaceable.place(x = 0, y = bottomAreaTop)
-
- val screensaverButtonPaddingInt = screensaverButtonPadding.roundToPx()
- screensaverButtonPlaceable?.place(
- x =
- constraints.maxWidth -
- screensaverButtonPaddingInt -
- screensaverButtonPlaceable.width,
- y =
- constraints.maxHeight -
- screensaverButtonPaddingInt -
- screensaverButtonPlaceable.height,
- )
}
}
}
}
companion object {
- private val screensaverButtonPadding: Dp = 24.dp
-
// TODO(b/382739998): Remove these hardcoded values once lock icon size and bottom area
// position are sorted.
private val lockIconSize: Dp = 54.dp
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/section/CommunalToDreamButtonSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/section/CommunalToDreamButtonSection.kt
deleted file mode 100644
index acaf43a..0000000
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/section/CommunalToDreamButtonSection.kt
+++ /dev/null
@@ -1,231 +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.communal.ui.compose.section
-
-import androidx.compose.animation.AnimatedVisibility
-import androidx.compose.animation.core.MutableTransitionState
-import androidx.compose.animation.expandVertically
-import androidx.compose.animation.fadeIn
-import androidx.compose.animation.fadeOut
-import androidx.compose.animation.shrinkVertically
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.widthIn
-import androidx.compose.foundation.shape.CornerSize
-import androidx.compose.material3.IconButtonDefaults
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.CornerRadius
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.geometry.RoundRect
-import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.geometry.toRect
-import androidx.compose.ui.graphics.Outline
-import androidx.compose.ui.graphics.Path
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.res.dimensionResource
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
-import com.android.compose.PlatformIconButton
-import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
-import com.android.systemui.communal.ui.compose.extensions.observeTaps
-import com.android.systemui.communal.ui.viewmodel.CommunalToDreamButtonViewModel
-import com.android.systemui.lifecycle.rememberViewModel
-import com.android.systemui.res.R
-import javax.inject.Inject
-import kotlin.time.Duration.Companion.seconds
-import kotlinx.coroutines.delay
-
-class CommunalToDreamButtonSection
-@Inject
-constructor(
- private val communalSettingsInteractor: CommunalSettingsInteractor,
- private val viewModelFactory: CommunalToDreamButtonViewModel.Factory,
-) {
- @Composable
- fun Button() {
- if (!communalSettingsInteractor.isV2FlagEnabled()) {
- return
- }
-
- val viewModel =
- rememberViewModel("CommunalToDreamButtonSection") { viewModelFactory.create() }
-
- if (!viewModel.shouldShowDreamButtonOnHub) {
- return
- }
-
- val buttonSize = dimensionResource(R.dimen.communal_to_dream_button_size)
-
- if (viewModel.shouldShowTooltip) {
- val tooltipVisibleState = remember { MutableTransitionState(false) }
-
- Column(
- modifier =
- Modifier.widthIn(max = tooltipMaxWidth).pointerInput(Unit) {
- observeTaps {
- if (tooltipVisibleState.isCurrentlyVisible()) {
- tooltipVisibleState.targetState = false
- }
- }
- }
- ) {
- var waitingToShowTooltip by remember { mutableStateOf(true) }
-
- LaunchedEffect(tooltipVisibleState.targetState) {
- delay(3.seconds)
- tooltipVisibleState.targetState = true
- waitingToShowTooltip = false
- }
-
- // This LaunchedEffect is used to wait for the tooltip dismiss animation to
- // complete before setting the tooltip dismissed. Otherwise, the composable would
- // be removed before the animation can start.
- LaunchedEffect(
- tooltipVisibleState.currentState,
- tooltipVisibleState.isIdle,
- waitingToShowTooltip,
- ) {
- if (
- !waitingToShowTooltip &&
- !tooltipVisibleState.currentState &&
- tooltipVisibleState.isIdle
- ) {
- viewModel.setDreamButtonTooltipDismissed()
- }
- }
-
- AnimatedVisibility(
- visibleState = tooltipVisibleState,
- enter = fadeIn() + expandVertically(expandFrom = Alignment.Bottom),
- exit = fadeOut() + shrinkVertically(shrinkTowards = Alignment.Bottom),
- ) {
- Tooltip(
- pointerOffsetDp = buttonSize.div(2),
- text = stringResource(R.string.glanceable_hub_to_dream_button_tooltip),
- )
- }
-
- GoToDreamButton(
- modifier = Modifier.width(buttonSize).height(buttonSize).align(Alignment.End)
- ) {
- viewModel.onShowDreamButtonTap()
- }
- }
- } else {
- GoToDreamButton(modifier = Modifier.width(buttonSize).height(buttonSize)) {
- viewModel.onShowDreamButtonTap()
- }
- }
- }
-
- private fun MutableTransitionState<Boolean>.isCurrentlyVisible() = currentState && isIdle
-
- companion object {
- private val tooltipMaxWidth = 350.dp
- }
-}
-
-@Composable
-private fun GoToDreamButton(modifier: Modifier, onClick: () -> Unit) {
- PlatformIconButton(
- modifier = modifier,
- onClick = onClick,
- iconResource = R.drawable.ic_screensaver_auto,
- contentDescription = stringResource(R.string.accessibility_glanceable_hub_to_dream_button),
- colors =
- IconButtonDefaults.filledIconButtonColors(
- contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
- containerColor = MaterialTheme.colorScheme.primaryContainer,
- ),
- )
-}
-
-@Composable
-private fun Tooltip(pointerOffsetDp: Dp, text: String) {
- Surface(
- color = MaterialTheme.colorScheme.surface,
- shape = TooltipShape(pointerSizeDp = 12.dp, pointerOffsetDp = pointerOffsetDp),
- ) {
- Text(
- modifier = Modifier.padding(start = 32.dp, top = 16.dp, end = 32.dp, bottom = 32.dp),
- color = MaterialTheme.colorScheme.onSurface,
- text = text,
- )
- }
-
- Spacer(modifier = Modifier.height(4.dp))
-}
-
-private class TooltipShape(private val pointerSizeDp: Dp, private val pointerOffsetDp: Dp) : Shape {
-
- override fun createOutline(
- size: Size,
- layoutDirection: LayoutDirection,
- density: Density,
- ): Outline {
-
- val pointerSizePx = with(density) { pointerSizeDp.toPx() }
- val pointerOffsetPx = with(density) { pointerOffsetDp.toPx() }
- val cornerRadius = CornerRadius(CornerSize(16.dp).toPx(size, density))
- val bubbleSize = size.copy(height = size.height - pointerSizePx)
-
- val path =
- Path().apply {
- addRoundRect(
- RoundRect(
- rect = bubbleSize.toRect(),
- topLeft = cornerRadius,
- topRight = cornerRadius,
- bottomRight = cornerRadius,
- bottomLeft = cornerRadius,
- )
- )
- addPath(
- Path().apply {
- moveTo(0f, 0f)
- lineTo(pointerSizePx / 2f, pointerSizePx)
- lineTo(pointerSizePx, 0f)
- close()
- },
- offset =
- Offset(
- x = bubbleSize.width - pointerOffsetPx - pointerSizePx / 2f,
- y = bubbleSize.height,
- ),
- )
- }
-
- return Outline.Generic(path)
- }
-}
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/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/ClockRegistry.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
index b59b4ab..0648412 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
@@ -103,6 +103,7 @@
fun onAvailableClocksChanged() {}
}
+ private val replacementMap = ConcurrentHashMap<ClockId, ClockId>()
private val availableClocks = ConcurrentHashMap<ClockId, ClockInfo>()
private val clockChangeListeners = mutableListOf<ClockChangeListener>()
private val settingObserver =
@@ -209,6 +210,7 @@
continue
}
+ clock.replacementTarget?.let { replacementMap[id] = it }
info.provider = plugin
onLoaded(info)
}
@@ -393,10 +395,11 @@
// TODO: Merge w/ CurrentClockId when we convert to a flow. We shouldn't need both behaviors.
val activeClockId: String
get() {
- if (!availableClocks.containsKey(currentClockId)) {
+ var id = currentClockId
+ if (!availableClocks.containsKey(id)) {
return DEFAULT_CLOCK_ID
}
- return currentClockId
+ return replacementMap[id] ?: id
}
init {
@@ -404,6 +407,7 @@
defaultClockProvider.initialize(clockBuffers)
for (clock in defaultClockProvider.getClocks()) {
availableClocks[clock.clockId] = ClockInfo(clock, defaultClockProvider, null)
+ clock.replacementTarget?.let { replacementMap[clock.clockId] = it }
}
// Something has gone terribly wrong if the default clock isn't present
@@ -562,9 +566,12 @@
}
}
- fun getClocks(): List<ClockMetadata> {
- if (!isEnabled) return listOf(availableClocks[DEFAULT_CLOCK_ID]!!.metadata)
- return availableClocks.map { (_, clock) -> clock.metadata }
+ fun getClocks(includeDeprecated: Boolean = false): List<ClockMetadata> {
+ return when {
+ !isEnabled -> listOf(availableClocks[DEFAULT_CLOCK_ID]!!.metadata)
+ includeDeprecated -> availableClocks.map { (_, clock) -> clock.metadata }
+ else -> availableClocks.map { (_, clock) -> clock.metadata }.filter { !it.isDeprecated }
+ }
}
fun getClockPickerConfig(clockId: ClockId): ClockPickerConfig? {
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..e9e61a7 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
@@ -44,6 +44,7 @@
val dozeState = DefaultClockController.AnimationState(1F)
override val view = FlexClockView(clockCtx)
+ override var onViewBoundsChanged by view::onViewBoundsChanged
init {
fun createController(cfg: LayerConfig) {
@@ -55,7 +56,6 @@
val layerCfg =
LayerConfig(
style = FontTextStyle(lineHeight = 147.25f),
- timespec = DigitalTimespec.DIGIT_PAIR,
alignment = DigitalAlignment(HorizontalAlignment.CENTER, VerticalAlignment.CENTER),
aodStyle =
FontTextStyle(
@@ -63,12 +63,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/DefaultClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
index f24ad1c..9bb3bac 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
@@ -17,6 +17,7 @@
import android.content.res.Resources
import android.graphics.Color
import android.graphics.Rect
+import android.graphics.RectF
import android.icu.text.NumberFormat
import android.util.TypedValue
import android.view.LayoutInflater
@@ -97,7 +98,12 @@
events.onLocaleChanged(Locale.getDefault())
}
- override fun initialize(isDarkTheme: Boolean, dozeFraction: Float, foldFraction: Float) {
+ override fun initialize(
+ isDarkTheme: Boolean,
+ dozeFraction: Float,
+ foldFraction: Float,
+ onBoundsChanged: (RectF) -> Unit,
+ ) {
largeClock.recomputePadding(null)
largeClock.animations = LargeClockAnimations(largeClock.view, dozeFraction, foldFraction)
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 654478a..c3935e6 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
@@ -61,7 +61,14 @@
override fun getClocks(): List<ClockMetadata> {
var clocks = listOf(ClockMetadata(DEFAULT_CLOCK_ID))
- if (isClockReactiveVariantsEnabled) clocks += ClockMetadata(FLEX_CLOCK_ID)
+ if (isClockReactiveVariantsEnabled) {
+ clocks +=
+ ClockMetadata(
+ FLEX_CLOCK_ID,
+ isDeprecated = true,
+ replacementTarget = DEFAULT_CLOCK_ID,
+ )
+ }
return clocks
}
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 1a1033b..6dfd226 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
@@ -16,6 +16,7 @@
package com.android.systemui.shared.clocks
+import android.graphics.RectF
import com.android.systemui.animation.GSFAxes
import com.android.systemui.customization.R
import com.android.systemui.plugins.clocks.AlarmData
@@ -102,9 +103,15 @@
}
}
- override fun initialize(isDarkTheme: Boolean, dozeFraction: Float, foldFraction: Float) {
+ override fun initialize(
+ isDarkTheme: Boolean,
+ dozeFraction: Float,
+ foldFraction: Float,
+ onBoundsChanged: (RectF) -> Unit,
+ ) {
events.onFontAxesChanged(clockCtx.settings.axes)
smallClock.run {
+ layerController.onViewBoundsChanged = onBoundsChanged
events.onThemeChanged(theme.copy(isDarkTheme = isDarkTheme))
animations.doze(dozeFraction)
animations.fold(foldFraction)
@@ -112,6 +119,7 @@
}
largeClock.run {
+ layerController.onViewBoundsChanged = onBoundsChanged
events.onThemeChanged(theme.copy(isDarkTheme = isDarkTheme))
animations.doze(dozeFraction)
animations.fold(foldFraction)
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..578a489 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
}
}
@@ -245,7 +247,7 @@
timespec = DigitalTimespec.TIME_FULL_FORMAT,
style = FontTextStyle(fontSizeScale = 0.98f),
aodStyle = FontTextStyle(),
- alignment = DigitalAlignment(HorizontalAlignment.LEFT, VerticalAlignment.CENTER),
+ alignment = DigitalAlignment(HorizontalAlignment.START, VerticalAlignment.CENTER),
dateTimeFormat = "h:mm",
)
}
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/SimpleClockLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt
index af00cc2..336c66e 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt
@@ -16,6 +16,7 @@
package com.android.systemui.shared.clocks
+import android.graphics.RectF
import android.view.View
import androidx.annotation.VisibleForTesting
import com.android.systemui.plugins.clocks.ClockAnimations
@@ -31,4 +32,5 @@
val config: ClockFaceConfig
@VisibleForTesting var fakeTimeMills: Long?
+ var onViewBoundsChanged: ((RectF) -> Unit)?
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt
index 0b7ea1a..97004ef 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt
@@ -85,6 +85,7 @@
override val view = SimpleDigitalClockTextView(clockCtx, isLargeClock)
private val logger = Logger(clockCtx.messageBuffer, TAG)
val timespec = DigitalTimespecHandler(layerCfg.timespec, layerCfg.dateTimeFormat)
+ override var onViewBoundsChanged by view::onViewBoundsChanged
@VisibleForTesting
override var fakeTimeMills: Long?
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..c765ea9 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
@@ -83,65 +100,56 @@
updateLocale(Locale.getDefault())
}
+ var onViewBoundsChanged: ((RectF) -> Unit)? = null
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 +172,105 @@
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
+ val bounds =
+ RectF(
+ layoutBounds.centerX() - measuredWidth / 2f,
+ layoutBounds.centerY() - measuredHeight / 2f,
+ layoutBounds.centerX() + measuredWidth / 2f,
+ layoutBounds.centerY() + measuredHeight / 2f,
+ )
+ setFrame(
+ bounds.left.roundToInt(),
+ bounds.top.roundToInt(),
+ bounds.right.roundToInt(),
+ bounds.bottom.roundToInt(),
+ )
+ updateChildFrames(isLayout = false)
+ onViewBoundsChanged?.let { it(bounds) }
+ }
+
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 +280,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 +327,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 +341,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 +357,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 +396,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 +407,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 +428,7 @@
/* rangeMin= */ 0.0f,
/* rangeMax= */ 1.0f,
/* valueMin= */ digitInitialDelay,
- /* valueMax= */ digitInitialDelay +
- availableAnimationTime(digitalClockTextViewMap.size),
+ /* valueMax= */ digitInitialDelay + availableAnimationTime(childViews.size),
/* value= */ fraction,
)
)
@@ -401,35 +475,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..abe5cc2 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,17 +20,18 @@
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
import android.view.View.MeasureSpec.EXACTLY
import android.view.animation.Interpolator
import android.view.animation.PathInterpolator
@@ -44,29 +45,68 @@
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,
- BASELINE, // default
+ BASELINE,
CENTER,
}
enum class HorizontalAlignment {
+ LEFT {
+ override fun resolveXAlignment(view: View) = XAlignment.LEFT
+ },
+ RIGHT {
+ override fun resolveXAlignment(view: View) = XAlignment.RIGHT
+ },
+ START {
+ override fun resolveXAlignment(view: View): XAlignment {
+ return if (view.isLayoutRtl()) XAlignment.RIGHT else XAlignment.LEFT
+ }
+ },
+ END {
+ override fun resolveXAlignment(view: View): XAlignment {
+ return if (view.isLayoutRtl()) XAlignment.LEFT else XAlignment.RIGHT
+ }
+ },
+ CENTER {
+ override fun resolveXAlignment(view: View) = XAlignment.CENTER
+ };
+
+ abstract fun resolveXAlignment(view: View): XAlignment
+}
+
+enum class XAlignment {
LEFT,
RIGHT,
- CENTER, // default
+ CENTER,
}
@SuppressLint("AppCompatCustomView")
@@ -102,28 +142,29 @@
fidgetFontVariation = buildFidgetVariation(lsFontAxes).toFVar()
}
+ var onViewBoundsChanged: ((RectF) -> Unit)? = null
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
@@ -139,16 +180,20 @@
}
var verticalAlignment: VerticalAlignment = VerticalAlignment.BASELINE
- var horizontalAlignment: HorizontalAlignment = HorizontalAlignment.LEFT
+ var horizontalAlignment: HorizontalAlignment = HorizontalAlignment.CENTER
+
+ val xAlignment: XAlignment
+ get() = horizontalAlignment.resolveXAlignment(this)
+
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 +214,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 +240,7 @@
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- logger.onMeasure()
+ logger.onMeasure(widthMeasureSpec, heightMeasureSpec)
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val layout = this.layout
@@ -206,7 +251,7 @@
} else {
textAnimator.updateLayout(layout)
}
- baselineFromMeasure = layout.getLineBaseline(0)
+ measuredBaseline = layout.getLineBaseline(0)
} else {
val currentThread = Thread.currentThread()
Log.wtf(
@@ -216,24 +261,34 @@
)
}
- 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))
+ if (isLayoutRtl()) canvas.translate(interpBounds.width() - textBounds.width(), 0f)
+ textAnimator.draw(canvas)
}
- canvas.translate(-translation.x.toFloat(), -translation.y.toFloat())
}
override fun setVisibility(visibility: Int) {
@@ -246,6 +301,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 +405,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 +424,136 @@
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 (xAlignment) {
+ XAlignment.LEFT -> {
+ left = layoutBounds.left
+ right = layoutBounds.left + measureSize.x
+ }
+ XAlignment.CENTER -> {
+ left = layoutBounds.centerX() - measureSize.x / 2f
+ right = layoutBounds.centerX() + measureSize.x / 2f
+ }
+ XAlignment.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(),
+ )
+ onViewBoundsChanged?.let { it(targetRect) }
+ return targetRect
+ }
+
+ private fun getDrawTranslation(interpBounds: RectF): VPointF {
+ val sizeDiff = this.measuredSize - interpBounds.size
+ val alignment =
+ VPointF(
+ when (xAlignment) {
+ XAlignment.LEFT -> 0f
+ XAlignment.CENTER -> 0.5f
+ XAlignment.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 +561,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 +572,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 +581,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 +598,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 +626,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/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
index 189d554..f4d4b1e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
@@ -25,6 +25,8 @@
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
+import android.view.ViewTreeObserver
+import android.view.ViewTreeObserver.OnPreDrawListener
import android.view.WindowInsetsController
import android.widget.FrameLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -720,6 +722,37 @@
}
@Test
+ fun startAppearAnimation_ifDelayed() {
+ val argumentCaptor = ArgumentCaptor.forClass(OnPreDrawListener::class.java)
+ whenever(view.isAppearAnimationDelayed).thenReturn(true)
+ val viewTreeObserver: ViewTreeObserver = mock()
+ whenever(view.viewTreeObserver).thenReturn(viewTreeObserver)
+
+ underTest.startAppearAnimationIfDelayed()
+
+ verify(view).alpha = 1f
+ verify(viewTreeObserver).addOnPreDrawListener(argumentCaptor.capture())
+ argumentCaptor.value.onPreDraw()
+
+ verify(view).startAppearAnimation(any(SecurityMode::class.java))
+ verify(view).setIsAppearAnimationDelayed(false)
+ }
+
+ @Test
+ fun appearAnimation_willNotStart_ifNotDelayed() {
+ whenever(view.isAppearAnimationDelayed).thenReturn(false)
+ val viewTreeObserver: ViewTreeObserver = mock()
+ whenever(view.viewTreeObserver).thenReturn(viewTreeObserver)
+
+ underTest.startAppearAnimationIfDelayed()
+
+ verify(view, never()).alpha
+ verify(viewTreeObserver, never()).addOnPreDrawListener(any())
+
+ verify(view, never()).startAppearAnimation(any(SecurityMode::class.java))
+ }
+
+ @Test
fun gravityReappliedOnConfigurationChange() {
// Set initial gravity
testableResources.addOverride(R.integer.keyguard_host_view_gravity, Gravity.CENTER)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index 176824f..2845f6a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -452,6 +452,14 @@
verify(keyguardPasswordView).setDisappearAnimationListener(any());
}
+ @Test
+ public void setupForDelayedAppear() {
+ mKeyguardSecurityContainer.setupForDelayedAppear();
+ assertThat(mKeyguardSecurityContainer.getTranslationY()).isEqualTo(0f);
+ assertThat(mKeyguardSecurityContainer.getAlpha()).isEqualTo(0f);
+ assertThat(mKeyguardSecurityContainer.isAppearAnimationDelayed()).isTrue();
+ }
+
private BackEvent createBackEvent(float touchX, float progress) {
return new BackEvent(0, 0, progress, BackEvent.EDGE_LEFT);
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
index f53f964..191eccc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerFullscreenSwipeTouchHandlerTest.java
@@ -28,6 +28,8 @@
import android.animation.ValueAnimator;
import android.content.pm.UserInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Rect;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
@@ -54,6 +56,7 @@
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.wm.shell.animation.FlingAnimationUtils;
import org.junit.Before;
@@ -127,10 +130,16 @@
@Mock
WindowRootView mWindowRootView;
+ @Mock
+ Resources mResources;
+
private SceneInteractor mSceneInteractor;
+ private KeyguardStateController mKeyguardStateController;
+
private static final float TOUCH_REGION = .3f;
private static final float MIN_BOUNCER_HEIGHT = .05f;
+ private final Configuration mConfiguration = new Configuration();
private static final Rect SCREEN_BOUNDS = new Rect(0, 0, 1024, 100);
private static final UserInfo CURRENT_USER_INFO = new UserInfo(
@@ -153,6 +162,8 @@
public void setup() {
mKosmos = new KosmosJavaAdapter(this);
mSceneInteractor = spy(mKosmos.getSceneInteractor());
+ mKeyguardStateController = mKosmos.getKeyguardStateController();
+ mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
MockitoAnnotations.initMocks(this);
mTouchHandler = new BouncerSwipeTouchHandler(
@@ -172,7 +183,9 @@
mKeyguardInteractor,
mSceneInteractor,
mKosmos.getShadeRepository(),
- Optional.of(() -> mWindowRootView));
+ Optional.of(() -> mWindowRootView),
+ mKeyguardStateController,
+ mKosmos.getCommunalSettingsInteractor());
when(mScrimManager.getCurrentController()).thenReturn(mScrimController);
when(mValueAnimatorCreator.create(anyFloat(), anyFloat())).thenReturn(mValueAnimator);
@@ -180,6 +193,9 @@
when(mFlingAnimationUtils.getMinVelocityPxPerSecond()).thenReturn(Float.MAX_VALUE);
when(mTouchSession.getBounds()).thenReturn(SCREEN_BOUNDS);
when(mKeyguardInteractor.isKeyguardDismissible()).thenReturn(MutableStateFlow(false));
+ when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
+ when(mWindowRootView.getResources()).thenReturn(mResources);
+ when(mResources.getConfiguration()).thenReturn(mConfiguration);
}
/**
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
index dd43d81..e8dc6762 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
@@ -16,6 +16,10 @@
package com.android.systemui.ambient.touch;
+import static android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf;
+
+import static com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2;
+
import static com.google.common.truth.Truth.assertThat;
import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;
@@ -34,6 +38,8 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.pm.UserInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.Region;
import android.platform.test.annotations.DisableFlags;
@@ -63,6 +69,7 @@
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.wm.shell.animation.FlingAnimationUtils;
import org.junit.Before;
@@ -132,12 +139,16 @@
@Mock
WindowRootView mWindowRootView;
+ Resources mResources;
+
@Mock
CommunalViewModel mCommunalViewModel;
@Mock
KeyguardInteractor mKeyguardInteractor;
+ private KeyguardStateController mKeyguardStateController;
+
@Captor
ArgumentCaptor<Rect> mRectCaptor;
@@ -147,6 +158,7 @@
private static final int SCREEN_WIDTH_PX = 1024;
private static final int SCREEN_HEIGHT_PX = 100;
private static final float MIN_BOUNCER_HEIGHT = .05f;
+ private final Configuration mConfiguration = new Configuration();
private static final Rect SCREEN_BOUNDS = new Rect(0, 0, 1024, 100);
private static final UserInfo CURRENT_USER_INFO = new UserInfo(
@@ -157,7 +169,8 @@
@Parameters(name = "{0}")
public static List<FlagsParameterization> getParams() {
- return SceneContainerFlagParameterizationKt.parameterizeSceneContainerFlag();
+ return SceneContainerFlagParameterizationKt
+ .andSceneContainer(allCombinationsOf(Flags.FLAG_GLANCEABLE_HUB_V2));
}
public BouncerSwipeTouchHandlerTest(FlagsParameterization flags) {
@@ -168,7 +181,13 @@
@Before
public void setup() {
mKosmos = new KosmosJavaAdapter(this);
+ mContext.ensureTestableResources();
+ mResources = mContext.getResources();
+ overrideConfiguration(mConfiguration);
+ mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
+
mSceneInteractor = spy(mKosmos.getSceneInteractor());
+ mKeyguardStateController = mKosmos.getKeyguardStateController();
MockitoAnnotations.initMocks(this);
mTouchHandler = new BouncerSwipeTouchHandler(
@@ -188,7 +207,9 @@
mKeyguardInteractor,
mSceneInteractor,
mKosmos.getShadeRepository(),
- Optional.of(() -> mWindowRootView)
+ Optional.of(() -> mWindowRootView),
+ mKeyguardStateController,
+ mKosmos.getCommunalSettingsInteractor()
);
when(mScrimManager.getCurrentController()).thenReturn(mScrimController);
@@ -197,6 +218,9 @@
when(mFlingAnimationUtils.getMinVelocityPxPerSecond()).thenReturn(Float.MAX_VALUE);
when(mTouchSession.getBounds()).thenReturn(SCREEN_BOUNDS);
when(mKeyguardInteractor.isKeyguardDismissible()).thenReturn(MutableStateFlow(false));
+ when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
+ when(mWindowRootView.getResources()).thenReturn(mResources);
+ setCommunalV2ConfigEnabled(true);
}
/**
@@ -586,6 +610,43 @@
verify(mUiEventLogger).log(BouncerSwipeTouchHandler.DreamEvent.DREAM_BOUNCER_FULLY_VISIBLE);
}
+ @Test
+ @DisableFlags(Flags.FLAG_SCENE_CONTAINER)
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ public void swipeUpAboveThresholdInLandscape_keyguardRotationNotAllowed_showsBouncer() {
+ when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
+ mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
+
+ final float swipeUpPercentage = .1f;
+ // The upward velocity is ignored.
+ final float velocityY = -1;
+ swipeToPosition(swipeUpPercentage, velocityY);
+
+ // Ensure show bouncer scrimmed
+ verify(mScrimController).show(true);
+ verify(mValueAnimatorCreator, never()).create(anyFloat(), anyFloat());
+ verify(mValueAnimator, never()).start();
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_SCENE_CONTAINER)
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ public void swipeUpBelowThreshold_inLandscapeKeyguardRotationNotAllowed_noBouncer() {
+ mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
+
+ final float swipeUpPercentage = .02f;
+ // The upward velocity is ignored.
+ final float velocityY = -1;
+ swipeToPosition(swipeUpPercentage, velocityY);
+
+ // no bouncer shown scrimmed
+ verify(mScrimController, never()).show(true);
+ // on touch end, bouncer hidden
+ verify(mValueAnimatorCreator).create(eq(1 - swipeUpPercentage),
+ eq(KeyguardBouncerConstants.EXPANSION_HIDDEN));
+ verify(mValueAnimator, never()).addListener(any());
+ }
+
/**
* Tests that swiping up with a speed above the set threshold will continue the expansion.
*/
@@ -672,4 +733,15 @@
inputEventListenerCaptor.getValue().onInputEvent(upEvent);
}
+
+ private void setCommunalV2ConfigEnabled(boolean enabled) {
+ mContext.getOrCreateTestableResources().addOverride(
+ com.android.internal.R.bool.config_glanceableHubEnabled,
+ enabled);
+ }
+
+ private void overrideConfiguration(Configuration configuration) {
+ mContext.getOrCreateTestableResources().overrideConfiguration(
+ configuration);
+ }
}
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/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
index 4d02708..5249bbe 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
@@ -26,7 +26,10 @@
import androidx.test.filters.SmallTest
import com.airbnb.lottie.LottieAnimationView
import com.android.systemui.SysuiTestCase
+import com.android.systemui.biometrics.data.repository.biometricStatusRepository
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
+import com.android.systemui.biometrics.shared.model.AuthenticationReason
+import com.android.systemui.biometrics.shared.model.AuthenticationReason.SettingsOperations
import com.android.systemui.biometrics.shared.model.DisplayRotation
import com.android.systemui.biometrics.shared.model.FingerprintSensorType
import com.android.systemui.biometrics.shared.model.SensorStrength
@@ -50,7 +53,6 @@
import org.mockito.Mock
import org.mockito.Mockito.any
import org.mockito.Mockito.inOrder
-import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
@@ -67,6 +69,7 @@
@JvmField @Rule var mockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock private lateinit var layoutInflater: LayoutInflater
@Mock private lateinit var sideFpsView: View
+ @Mock private lateinit var lottieAnimationView: LottieAnimationView
@Captor private lateinit var viewCaptor: ArgumentCaptor<View>
@Before
@@ -76,7 +79,7 @@
context.addMockSystemService(WindowManager::class.java, kosmos.windowManager)
`when`(layoutInflater.inflate(R.layout.sidefps_view, null, false)).thenReturn(sideFpsView)
`when`(sideFpsView.requireViewById<LottieAnimationView>(eq(R.id.sidefps_animation)))
- .thenReturn(mock(LottieAnimationView::class.java))
+ .thenReturn(lottieAnimationView)
}
@Test
@@ -184,6 +187,20 @@
}
}
+ @Test
+ fun verifyToggleAnimation_onSideFpsIndicatorViewClickedWhileEnrolling() {
+ kosmos.testScope.runTest {
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
+ AuthenticationReason.SettingsAuthentication(SettingsOperations.ENROLL_ENROLLING)
+ )
+ setupTestConfiguration(isInRearDisplayMode = false)
+ val clickListenerCaptor = ArgumentCaptor.forClass(View.OnClickListener::class.java)
+ verify(sideFpsView).setOnClickListener(clickListenerCaptor.capture())
+ clickListenerCaptor.value.onClick(sideFpsView)
+ verify(lottieAnimationView).toggleAnimation()
+ }
+ }
+
private suspend fun TestScope.setupTestConfiguration(isInRearDisplayMode: Boolean) {
kosmos.fingerprintPropertyRepository.setProperties(
sensorId = 1,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
index dd4af7b..53ddcfa 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorTest.kt
@@ -20,6 +20,7 @@
import android.provider.Settings.Global.ONE_HANDED_KEYGUARD_SIDE
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.logging.uiEventLoggerFake
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository
@@ -39,13 +40,22 @@
import com.android.systemui.flags.Flags.FULL_SCREEN_USER_SWITCHER
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runCurrent
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.res.R
+import com.android.systemui.scene.data.repository.sceneContainerRepository
+import com.android.systemui.scene.shared.model.Overlays
+import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.transitionState
import com.android.systemui.testKosmos
import com.android.systemui.util.settings.fakeGlobalSettings
import com.google.common.truth.Truth.assertThat
import kotlin.time.Duration.Companion.seconds
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
@@ -368,6 +378,76 @@
testableResources.removeOverride(R.bool.can_use_one_handed_bouncer)
}
+ @Test
+ fun bouncerExpansion_lockscreenToBouncer() =
+ kosmos.runTest {
+ val bouncerExpansion by collectLastValue(underTest.bouncerExpansion)
+
+ val progress = MutableStateFlow(0f)
+ kosmos.sceneContainerRepository.setTransitionState(transitionState)
+ transitionState.value =
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Lockscreen,
+ currentOverlays = flowOf(emptySet()),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+
+ assertThat(bouncerExpansion).isEqualTo(0f)
+
+ progress.value = 1f
+ assertThat(bouncerExpansion).isEqualTo(1f)
+ }
+
+ @Test
+ fun bouncerExpansion_BouncerToLockscreen() =
+ kosmos.runTest {
+ val bouncerExpansion by collectLastValue(underTest.bouncerExpansion)
+
+ val progress = MutableStateFlow(0f)
+ kosmos.sceneContainerRepository.setTransitionState(transitionState)
+ transitionState.value =
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
+ toScene = Scenes.Lockscreen,
+ currentOverlays = flowOf(emptySet()),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+
+ assertThat(bouncerExpansion).isEqualTo(1f)
+
+ progress.value = 1f
+ assertThat(bouncerExpansion).isEqualTo(0f)
+ }
+
+ @Test
+ fun bouncerExpansion_shadeToLockscreenUnderBouncer() =
+ kosmos.runTest {
+ val bouncerExpansion by collectLastValue(underTest.bouncerExpansion)
+
+ val progress = MutableStateFlow(0f)
+ kosmos.sceneContainerRepository.setTransitionState(transitionState)
+ transitionState.value =
+ ObservableTransitionState.Transition(
+ fromScene = Scenes.Shade,
+ toScene = Scenes.Lockscreen,
+ currentScene = flowOf(Scenes.Lockscreen),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ currentOverlays = setOf(Overlays.Bouncer),
+ )
+
+ assertThat(bouncerExpansion).isEqualTo(1f)
+
+ progress.value = 1f
+ assertThat(bouncerExpansion).isEqualTo(1f)
+ }
+
companion object {
private const val MESSAGE_ENTER_YOUR_PIN = "Enter your PIN"
private const val MESSAGE_ENTER_YOUR_PASSWORD = "Enter your password"
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
index 7051f81..f583914 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
@@ -22,6 +22,7 @@
import android.platform.test.flag.junit.FlagsParameterization
import android.provider.Settings
import androidx.test.filters.SmallTest
+import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.logging.uiEventLoggerFake
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
@@ -38,8 +39,13 @@
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
+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.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.collectLastValue
@@ -56,11 +62,15 @@
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.advanceTimeBy
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mockito
+import org.mockito.kotlin.verify
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
@@ -93,10 +103,12 @@
communalInteractor = communalInteractor,
communalSettingsInteractor = communalSettingsInteractor,
communalSceneInteractor = communalSceneInteractor,
+ keyguardTransitionInteractor = keyguardTransitionInteractor,
keyguardInteractor = keyguardInteractor,
systemSettings = fakeSettings,
notificationShadeWindowController = notificationShadeWindowController,
bgScope = applicationCoroutineScope,
+ applicationScope = applicationCoroutineScope,
mainDispatcher = testDispatcher,
uiEventLogger = uiEventLoggerFake,
)
@@ -111,13 +123,13 @@
UserHandle.USER_CURRENT,
)
fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
+ setCommunalV2ConfigEnabled(true)
underTest.start()
// Make communal available so that communalInteractor.desiredScene accurately reflects
// scene changes instead of just returning Blank.
runBlocking { setCommunalAvailable(true) }
- setCommunalV2ConfigEnabled(true)
}
}
@@ -414,6 +426,107 @@
assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1)
}
+ @Test
+ @DisableFlags(FLAG_SCENE_CONTAINER)
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun glanceableHubOrientationAware_idleOnCommunal() =
+ kosmos.runTest {
+ communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
+
+ val scene by collectLastValue(communalSceneInteractor.currentScene)
+ assertThat(scene).isEqualTo(CommunalScenes.Communal)
+
+ verify(notificationShadeWindowController).setGlanceableHubOrientationAware(true)
+ }
+
+ @Test
+ @DisableFlags(FLAG_SCENE_CONTAINER)
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun glanceableHubOrientationAware_transitioningToCommunal() =
+ kosmos.runTest {
+ val progress = MutableStateFlow(0f)
+ val targetScene = CommunalScenes.Communal
+ val currentScene = CommunalScenes.Blank
+ val transitionState =
+ MutableStateFlow(
+ ObservableTransitionState.Transition(
+ fromScene = currentScene,
+ toScene = targetScene,
+ currentScene = flowOf(targetScene),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ )
+ communalSceneInteractor.setTransitionState(transitionState)
+
+ // Partially transition.
+ progress.value = .4f
+
+ val scene by collectLastValue(communalSceneInteractor.currentScene)
+ assertThat(scene).isEqualTo(CommunalScenes.Blank)
+
+ verify(notificationShadeWindowController).setGlanceableHubOrientationAware(true)
+ }
+
+ @Test
+ @DisableFlags(FLAG_SCENE_CONTAINER)
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun glanceableHubOrientationAware_communalToDreaming() =
+ kosmos.runTest {
+ communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
+
+ verify(notificationShadeWindowController).setGlanceableHubOrientationAware(true)
+ Mockito.clearInvocations(notificationShadeWindowController)
+
+ val progress = MutableStateFlow(0f)
+ val currentScene = CommunalScenes.Communal
+ val targetScene = CommunalScenes.Blank
+ val transitionState =
+ MutableStateFlow(
+ ObservableTransitionState.Transition(
+ fromScene = currentScene,
+ toScene = targetScene,
+ currentScene = flowOf(targetScene),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ )
+ communalSceneInteractor.setTransitionState(transitionState)
+
+ // Partially transitioned out of Communal scene
+ progress.value = .4f
+
+ // Started keyguard transitioning from hub -> dreaming.
+ fakeKeyguardTransitionRepository.sendTransitionStep(
+ TransitionStep(
+ from = KeyguardState.GLANCEABLE_HUB,
+ to = KeyguardState.DREAMING,
+ transitionState = TransitionState.STARTED,
+ )
+ )
+ verify(notificationShadeWindowController).setGlanceableHubOrientationAware(true)
+ Mockito.clearInvocations(notificationShadeWindowController)
+
+ fakeKeyguardTransitionRepository.sendTransitionStep(
+ from = KeyguardState.GLANCEABLE_HUB,
+ to = KeyguardState.DREAMING,
+ transitionState = TransitionState.RUNNING,
+ value = 0.5f,
+ )
+
+ // Transitioned to dreaming.
+ fakeKeyguardTransitionRepository.sendTransitionStep(
+ from = KeyguardState.GLANCEABLE_HUB,
+ to = KeyguardState.DREAMING,
+ transitionState = TransitionState.FINISHED,
+ value = 1f,
+ )
+ // Not on hub anymore, let other states take control
+ verify(notificationShadeWindowController).setGlanceableHubOrientationAware(false)
+ }
+
/**
* Advances time by duration + 1 millisecond, to ensure that tasks scheduled to run at
* currentTime + duration are scheduled.
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractorTest.kt
index 77d7091..dc21f06 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractorTest.kt
@@ -134,7 +134,7 @@
underTest.snapToScene(
CommunalScenes.Communal,
"test",
- ActivityTransitionAnimator.TIMINGS.totalDuration
+ ActivityTransitionAnimator.TIMINGS.totalDuration,
)
assertThat(currentScene).isEqualTo(CommunalScenes.Blank)
advanceTimeBy(ActivityTransitionAnimator.TIMINGS.totalDuration)
@@ -269,6 +269,48 @@
@DisableFlags(FLAG_SCENE_CONTAINER)
@Test
+ fun isTransitioningToOrIdleOnCommunal() =
+ testScope.runTest {
+ // isIdleOnCommunal is false when not on communal.
+ val isTransitioningToOrIdleOnCommunal by
+ collectLastValue(underTest.isTransitioningToOrIdleOnCommunal)
+ assertThat(isTransitioningToOrIdleOnCommunal).isEqualTo(false)
+
+ val transitionState: MutableStateFlow<ObservableTransitionState> =
+ MutableStateFlow(
+ ObservableTransitionState.Transition(
+ fromScene = CommunalScenes.Blank,
+ toScene = CommunalScenes.Communal,
+ currentScene = flowOf(CommunalScenes.Communal),
+ progress = flowOf(0f),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ )
+
+ // Start transition to communal.
+ repository.setTransitionState(transitionState)
+ assertThat(isTransitioningToOrIdleOnCommunal).isEqualTo(true)
+
+ // Finish transition to communal
+ transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Communal)
+ assertThat(isTransitioningToOrIdleOnCommunal).isEqualTo(true)
+
+ // Start transition away from communal.
+ transitionState.value =
+ ObservableTransitionState.Transition(
+ fromScene = CommunalScenes.Communal,
+ toScene = CommunalScenes.Blank,
+ currentScene = flowOf(CommunalScenes.Blank),
+ progress = flowOf(.1f),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ assertThat(isTransitioningToOrIdleOnCommunal).isEqualTo(false)
+ }
+
+ @DisableFlags(FLAG_SCENE_CONTAINER)
+ @Test
fun isCommunalVisible() =
testScope.runTest {
// isCommunalVisible is false when not on communal.
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelTest.kt
deleted file mode 100644
index 2f3073e..0000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelTest.kt
+++ /dev/null
@@ -1,173 +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.communal.ui.viewmodel
-
-import android.content.pm.UserInfo
-import android.platform.test.annotations.EnableFlags
-import android.provider.Settings
-import android.service.dream.dreamManager
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.internal.logging.uiEventLoggerFake
-import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.communal.data.repository.fakeCommunalPrefsRepository
-import com.android.systemui.communal.domain.interactor.HubOnboardingInteractorTest.Companion.MAIN_USER
-import com.android.systemui.communal.shared.log.CommunalUiEvent
-import com.android.systemui.flags.Flags.COMMUNAL_SERVICE_ENABLED
-import com.android.systemui.flags.fakeFeatureFlagsClassic
-import com.android.systemui.kosmos.runCurrent
-import com.android.systemui.kosmos.runTest
-import com.android.systemui.kosmos.testScope
-import com.android.systemui.lifecycle.activateIn
-import com.android.systemui.plugins.activityStarter
-import com.android.systemui.settings.fakeUserTracker
-import com.android.systemui.statusbar.policy.batteryController
-import com.android.systemui.statusbar.policy.fake
-import com.android.systemui.testKosmos
-import com.android.systemui.user.data.repository.fakeUserRepository
-import com.android.systemui.util.settings.fakeSettings
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.Mockito.verify
-import org.mockito.kotlin.any
-
-@SmallTest
-@EnableFlags(FLAG_GLANCEABLE_HUB_V2)
-@RunWith(AndroidJUnit4::class)
-class CommunalToDreamButtonViewModelTest : SysuiTestCase() {
- private val kosmos = testKosmos()
- private val testScope = kosmos.testScope
- private val underTest: CommunalToDreamButtonViewModel by lazy {
- kosmos.communalToDreamButtonViewModel
- }
-
- @Before
- fun setUp() {
- kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
- underTest.activateIn(testScope)
- }
-
- @Test
- fun shouldShowDreamButtonOnHub_trueWhenPluggedIn() =
- with(kosmos) {
- runTest {
- batteryController.fake._isPluggedIn = true
- runCurrent()
-
- assertThat(underTest.shouldShowDreamButtonOnHub).isTrue()
- }
- }
-
- @Test
- fun shouldShowDreamButtonOnHub_falseWhenNotPluggedIn() =
- with(kosmos) {
- runTest {
- batteryController.fake._isPluggedIn = false
-
- assertThat(underTest.shouldShowDreamButtonOnHub).isFalse()
- }
- }
-
- @Test
- fun onShowDreamButtonTap_dreamsEnabled_startsDream() =
- with(kosmos) {
- runTest {
- val currentUser = fakeUserRepository.asMainUser()
- kosmos.fakeSettings.putIntForUser(
- Settings.Secure.SCREENSAVER_ENABLED,
- 1,
- currentUser.id,
- )
- runCurrent()
-
- underTest.onShowDreamButtonTap()
- runCurrent()
-
- verify(dreamManager).startDream()
- }
- }
-
- @Test
- fun onShowDreamButtonTap_dreamsDisabled_startsActivity() =
- with(kosmos) {
- runTest {
- val currentUser = fakeUserRepository.asMainUser()
- kosmos.fakeSettings.putIntForUser(
- Settings.Secure.SCREENSAVER_ENABLED,
- 0,
- currentUser.id,
- )
- runCurrent()
-
- underTest.onShowDreamButtonTap()
- runCurrent()
-
- verify(activityStarter).postStartActivityDismissingKeyguard(any(), anyInt())
- }
- }
-
- @Test
- fun shouldShowDreamButtonTooltip_trueWhenNotDismissedAndHubOnboardingDismissed() =
- kosmos.runTest {
- setSelectedUser(MAIN_USER)
- fakeCommunalPrefsRepository.setHubOnboardingDismissed(MAIN_USER)
- runCurrent()
-
- assertThat(underTest.shouldShowTooltip).isTrue()
- }
-
- @Test
- fun shouldShowDreamButtonTooltip_falseWhenNotDismissedAndHubOnboardingNotDismissed() =
- kosmos.runTest {
- runCurrent()
- assertThat(underTest.shouldShowTooltip).isFalse()
- }
-
- @Test
- fun shouldShowDreamButtonTooltip_falseWhenDismissed() =
- kosmos.runTest {
- setSelectedUser(MAIN_USER)
- fakeCommunalPrefsRepository.setDreamButtonTooltipDismissed(MAIN_USER)
- runCurrent()
-
- assertThat(underTest.shouldShowTooltip).isFalse()
- }
-
- @Test
- fun onShowDreamButtonTap_eventLogged() =
- with(kosmos) {
- runTest {
- underTest.onShowDreamButtonTap()
- runCurrent()
-
- assertThat(uiEventLoggerFake[0].eventId)
- .isEqualTo(CommunalUiEvent.COMMUNAL_HUB_SHOW_DREAM_BUTTON_TAP.id)
- }
- }
-
- private suspend fun setSelectedUser(user: UserInfo) {
- with(kosmos.fakeUserRepository) {
- setUserInfos(listOf(user))
- setSelectedUserInfo(user)
- }
- kosmos.fakeUserTracker.set(userInfos = listOf(user), selectedUserIndex = 0)
- }
-}
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/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelTest.kt
index 6b9e23a..135e9a5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelTest.kt
@@ -16,28 +16,46 @@
package com.android.systemui.keyguard.ui.viewmodel
+import android.content.res.mainResources
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_BLURRED_BACKGROUND
+import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.domain.interactor.communalInteractor
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.setCommunalV2ConfigEnabled
+import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.ui.transitions.blurConfig
+import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.collectValues
+import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.runTest
+import com.android.systemui.statusbar.policy.keyguardStateController
import com.android.systemui.testKosmos
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.whenever
@SmallTest
@RunWith(AndroidJUnit4::class)
class GlanceableHubToPrimaryBouncerTransitionViewModelTest : SysuiTestCase() {
- private val kosmos = testKosmos()
+ private val kosmos =
+ testKosmos().apply { mainResources = mContext.orCreateTestableResources.resources }
private val underTest by lazy { kosmos.glanceableHubToPrimaryBouncerTransitionViewModel }
+ @Before
+ fun setUp() {
+ with(kosmos) { setCommunalV2ConfigEnabled(true) }
+ }
+
@Test
@DisableSceneContainer
@DisableFlags(FLAG_GLANCEABLE_HUB_BLURRED_BACKGROUND)
@@ -84,4 +102,81 @@
},
)
}
+
+ @Test
+ @DisableSceneContainer
+ @DisableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun willDelayBouncerAppearAnimation_flagDisabled_isFalse() =
+ kosmos.runTest {
+ // keyguard rotation is not allowed on device.
+ whenever(keyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false)
+
+ val isIdleOnCommunal by collectLastValue(communalInteractor.isIdleOnCommunal)
+ communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
+ runCurrent()
+ // Device is idle on communal.
+ assertThat(isIdleOnCommunal).isTrue()
+
+ // in landscape
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = true)).isFalse()
+ // in portrait
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = false)).isFalse()
+ }
+
+ @Test
+ @DisableSceneContainer
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun willDelayBouncerAppearAnimation_keyguardRotationAllowed_isFalse() =
+ kosmos.runTest {
+ // Keyguard rotation is allowed on device.
+ whenever(keyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true)
+
+ val isIdleOnCommunal by collectLastValue(communalInteractor.isIdleOnCommunal)
+ communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
+ runCurrent()
+ // Device is idle on communal.
+ assertThat(isIdleOnCommunal).isTrue()
+
+ // in landscape
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = true)).isFalse()
+ // in portrait
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = false)).isFalse()
+ }
+
+ @Test
+ @DisableSceneContainer
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun willDelayBouncerAppearAnimation_isNotIdleOnCommunal_isFalse() =
+ kosmos.runTest {
+ whenever(keyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false)
+
+ val isIdleOnCommunal by collectLastValue(communalInteractor.isIdleOnCommunal)
+ communalSceneInteractor.changeScene(CommunalScenes.Blank, "test")
+ runCurrent()
+ // Device is not on communal.
+ assertThat(isIdleOnCommunal).isFalse()
+
+ // in landscape
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = true)).isFalse()
+ // in portrait
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = false)).isFalse()
+ }
+
+ @Test
+ @DisableSceneContainer
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun willDelayBouncerAppearAnimation_isIdleOnCommunalAndKeyguardRotationIsNotAllowed() =
+ kosmos.runTest {
+ whenever(keyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false)
+ val isIdleOnCommunal by collectLastValue(communalInteractor.isIdleOnCommunal)
+ communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
+ runCurrent()
+ // Device is idle on communal.
+ assertThat(isIdleOnCommunal).isTrue()
+
+ // Will delay in landscape
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = true)).isTrue()
+ // Won't delay in portrait
+ assertThat(underTest.willDelayAppearAnimation(isLandscape = false)).isFalse()
+ }
}
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 4e14fec..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
@@ -61,11 +61,11 @@
fun setUp() {
context.orCreateTestableResources.addOverride(
R.dimen.qs_media_enabled_seekbar_height,
- enabledHeight
+ enabledHeight,
)
context.orCreateTestableResources.addOverride(
R.dimen.qs_media_disabled_seekbar_height,
- disabledHeight
+ disabledHeight,
)
seekBarView = SeekBar(context)
@@ -116,9 +116,6 @@
// THEN seek bar shows the progress
assertThat(seekBarView.progress).isEqualTo(3000)
assertThat(seekBarView.max).isEqualTo(120000)
-
- val desc = context.getString(R.string.controls_media_seekbar_description, "00:03", "02:00")
- assertThat(seekBarView.contentDescription).isEqualTo(desc)
}
@Test
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/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/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/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
index 764068e..3407cd5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -84,12 +84,12 @@
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
-import java.util.List;
-import java.util.concurrent.Executor;
-
import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;
+import java.util.List;
+import java.util.concurrent.Executor;
+
@RunWith(ParameterizedAndroidJunit4.class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
@@ -410,6 +410,19 @@
}
@Test
+ public void hubOrientationAware_layoutParamsUpdated() {
+ mNotificationShadeWindowController.setKeyguardShowing(false);
+ mNotificationShadeWindowController.setBouncerShowing(false);
+ mNotificationShadeWindowController.setGlanceableHubOrientationAware(true);
+ when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
+ mNotificationShadeWindowController.onConfigChanged(new Configuration());
+
+ verify(mWindowManager, atLeastOnce()).updateViewLayout(any(), mLayoutParameters.capture());
+ assertThat(mLayoutParameters.getValue().screenOrientation)
+ .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_USER);
+ }
+
+ @Test
public void batchApplyWindowLayoutParams_doesNotDispatchEvents() {
mNotificationShadeWindowController.setForceDozeBrightness(true);
verify(mWindowManager).updateViewLayout(any(), any());
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt
index f4a43a4..ddad230 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt
@@ -151,9 +151,17 @@
create: (ClockId) -> ClockController = ::failFactory,
getPickerConfig: (ClockSettings) -> ClockPickerConfig = ::failPickerConfig,
): FakeClockPlugin {
- metadata.add(ClockMetadata(id))
- createCallbacks[id] = create
- pickerConfigs[id] = getPickerConfig
+ return addClock(ClockMetadata(id), create, getPickerConfig)
+ }
+
+ fun addClock(
+ metadata: ClockMetadata,
+ create: (ClockId) -> ClockController = ::failFactory,
+ getPickerConfig: (ClockSettings) -> ClockPickerConfig = ::failPickerConfig,
+ ): FakeClockPlugin {
+ this.metadata.add(metadata)
+ createCallbacks[metadata.clockId] = create
+ pickerConfigs[metadata.clockId] = getPickerConfig
return this
}
}
@@ -203,28 +211,40 @@
val plugin1 = FakeClockPlugin().addClock("clock_1").addClock("clock_2")
val lifecycle1 = FakeLifecycle("1", plugin1)
- val plugin2 = FakeClockPlugin().addClock("clock_3").addClock("clock_4")
+ val plugin2 =
+ FakeClockPlugin()
+ .addClock(ClockMetadata("clock_3", isDeprecated = false))
+ .addClock(ClockMetadata("clock_4", isDeprecated = true))
val lifecycle2 = FakeLifecycle("2", plugin2)
pluginListener.onPluginLoaded(plugin1, mockContext, lifecycle1)
pluginListener.onPluginLoaded(plugin2, mockContext, lifecycle2)
- val list = registry.getClocks()
assertEquals(
- list.toSet(),
setOf(
ClockMetadata(DEFAULT_CLOCK_ID),
ClockMetadata("clock_1"),
ClockMetadata("clock_2"),
ClockMetadata("clock_3"),
- ClockMetadata("clock_4"),
),
+ registry.getClocks().toSet(),
+ )
+
+ assertEquals(
+ setOf(
+ ClockMetadata(DEFAULT_CLOCK_ID),
+ ClockMetadata("clock_1"),
+ ClockMetadata("clock_2"),
+ ClockMetadata("clock_3"),
+ ClockMetadata("clock_4", isDeprecated = true),
+ ),
+ registry.getClocks(includeDeprecated = true).toSet(),
)
}
@Test
fun noPlugins_createDefaultClock() {
val clock = registry.createCurrentClock()
- assertEquals(clock, mockDefaultClock)
+ assertEquals(mockDefaultClock, clock)
}
@Test
@@ -242,18 +262,18 @@
pluginListener.onPluginLoaded(plugin2, mockContext, lifecycle2)
val list = registry.getClocks()
assertEquals(
- list.toSet(),
setOf(
ClockMetadata(DEFAULT_CLOCK_ID),
ClockMetadata("clock_1"),
ClockMetadata("clock_2"),
),
+ list.toSet(),
)
- assertEquals(registry.createExampleClock("clock_1"), mockClock)
- assertEquals(registry.createExampleClock("clock_2"), mockClock)
- assertEquals(registry.getClockPickerConfig("clock_1"), pickerConfig)
- assertEquals(registry.getClockPickerConfig("clock_2"), pickerConfig)
+ assertEquals(mockClock, registry.createExampleClock("clock_1"))
+ assertEquals(mockClock, registry.createExampleClock("clock_2"))
+ assertEquals(pickerConfig, registry.getClockPickerConfig("clock_1"))
+ assertEquals(pickerConfig, registry.getClockPickerConfig("clock_2"))
verify(lifecycle1, never()).unloadPlugin()
verify(lifecycle2, times(2)).unloadPlugin()
}
@@ -305,7 +325,7 @@
pluginListener.onPluginUnloaded(plugin2, lifecycle2)
val clock = registry.createCurrentClock()
- assertEquals(clock, mockDefaultClock)
+ assertEquals(mockDefaultClock, clock)
}
@Test
@@ -482,13 +502,13 @@
// Verify all plugins were correctly loaded into the registry
assertEquals(
- registry.getClocks().toSet(),
setOf(
ClockMetadata("DEFAULT"),
ClockMetadata("clock_2"),
ClockMetadata("clock_3"),
ClockMetadata("clock_4"),
),
+ registry.getClocks().toSet(),
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
index 9eba410..4f30103 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
@@ -108,7 +108,7 @@
verify(mockSmallClockView).setColors(DOZE_COLOR, Color.MAGENTA)
verify(mockLargeClockView).setColors(DOZE_COLOR, Color.MAGENTA)
- clock.initialize(true, 0f, 0f)
+ clock.initialize(true, 0f, 0f, {})
val expectedColor = 0
verify(mockSmallClockView).setColors(DOZE_COLOR, expectedColor)
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/PhysicsPropertyAnimatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimatorTest.kt
index 56cd72e..0bb4737 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimatorTest.kt
@@ -15,19 +15,22 @@
*/
package com.android.systemui.statusbar.notification
+import android.animation.AnimatorTestRule
import android.util.FloatProperty
import android.util.Property
import android.view.View
-import androidx.dynamicanimation.animation.DynamicAnimation
+
import androidx.test.annotation.UiThreadTest
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.internal.dynamicanimation.animation.DynamicAnimation
import com.android.systemui.SysuiTestCase
import com.android.systemui.res.R
import com.android.systemui.statusbar.notification.stack.AnimationProperties
import com.android.systemui.statusbar.notification.stack.ViewState
import org.junit.Assert
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
@@ -50,6 +53,8 @@
return _value
}
}
+ @get:Rule
+ val animatorTestRule = AnimatorTestRule(this)
private val property: PhysicsProperty =
PhysicsProperty(R.id.scale_x_animator_tag, effectiveProperty)
private var finishListener: DynamicAnimation.OnAnimationEndListener? = null
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/ConversationCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
index 2853264..fa185bc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
@@ -18,6 +18,7 @@
import android.app.Flags
import android.app.NotificationChannel
+import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
import android.app.NotificationManager.IMPORTANCE_DEFAULT
import android.app.NotificationManager.IMPORTANCE_HIGH
import android.app.NotificationManager.IMPORTANCE_LOW
@@ -124,6 +125,14 @@
}
@Test
+ fun testPrioritySectioner_doesNotClaim_classifiedConversation() {
+ val sectioner = coordinator.priorityPeopleSectioner
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ }
+ }
+
+ @Test
fun testPromotesImportantConversations() {
assertTrue(promoter.shouldPromoteToTopLevel(makeEntryOfPeopleType(TYPE_IMPORTANT_PERSON)))
assertFalse(promoter.shouldPromoteToTopLevel(makeEntryOfPeopleType(TYPE_FULL_PERSON)))
@@ -166,6 +175,14 @@
}
@Test
+ fun testAlertingSectioner_doesNotClaim_classifiedConversation() {
+ val sectioner = coordinator.peopleAlertingSectioner
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ }
+ }
+
+ @Test
fun testInAlertingPeopleSectionWhenTheImportanceIsAtLeastDefault() {
// GIVEN
val alertingEntry = makeEntryOfPeopleType(TYPE_PERSON) { setImportance(IMPORTANCE_DEFAULT) }
@@ -186,6 +203,15 @@
@Test
@DisableFlags(Flags.FLAG_SORT_SECTION_BY_TIME)
+ fun testSilentSectioner_doesNotClaim_classifiedConversation() {
+ val sectioner = coordinator.peopleSilentSectioner
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ }
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_SORT_SECTION_BY_TIME)
fun testInSilentPeopleSectionWhenTheImportanceIsLowerThanDefault() {
// GIVEN
val silentEntry = makeEntryOfPeopleType(TYPE_PERSON) { setImportance(IMPORTANCE_LOW) }
@@ -280,4 +306,17 @@
assertEquals(type, peopleNotificationIdentifier.getPeopleNotificationType(entry))
return entry
}
+
+ private fun makeClassifiedConversation(channelId: String): NotificationEntry {
+ val channel = NotificationChannel(channelId, channelId, IMPORTANCE_LOW)
+ val entry =
+ NotificationEntryBuilder()
+ .updateRanking {
+ it.setIsConversation(true)
+ it.setShortcutInfo(mock())
+ it.setChannel(channel)
+ }
+ .build()
+ return entry
+ }
}
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/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt
index 961616c..3d1fdee 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt
@@ -22,6 +22,8 @@
import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository
import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.testKosmos
+import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
@@ -32,12 +34,16 @@
@SmallTest
class ActivatableNotificationViewModelTest : SysuiTestCase() {
+ private val kosmos = testKosmos()
+
// fakes
private val a11yRepo = FakeAccessibilityRepository()
// real impls
private val a11yInteractor = AccessibilityInteractor(a11yRepo)
- private val underTest = ActivatableNotificationViewModel(a11yInteractor)
+ private val windowRootViewBlurInteractor = kosmos.windowRootViewBlurInteractor
+ private val underTest = ActivatableNotificationViewModel(a11yInteractor,
+ windowRootViewBlurInteractor)
@Test
fun isTouchable_whenA11yTouchExplorationDisabled() = runTest {
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..cb4642c 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,18 @@
package com.android.systemui.statusbar.notification.stack
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.systemui.Flags
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
@@ -40,6 +46,7 @@
import org.mockito.Mockito.description
import org.mockito.Mockito.eq
import org.mockito.Mockito.verify
+import org.mockito.kotlin.doNothing
private const val VIEW_HEIGHT = 100
private const val FULL_SHADE_APPEAR_TRANSLATION = 300
@@ -50,17 +57,19 @@
@RunWithLooper
class StackStateAnimatorTest : SysuiTestCase() {
+ @get:Rule val setFlagsRule = SetFlagsRule()
@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 =
- ExpandableViewState().apply { height = VIEW_HEIGHT }
+ private lateinit var viewState: ExpandableViewState
private val runnableCaptor: ArgumentCaptor<Runnable> = argumentCaptor()
@Before
fun setUp() {
+ viewState = ExpandableViewState().apply { height = VIEW_HEIGHT }
overrideResource(
R.dimen.go_to_full_shade_appearing_translation,
FULL_SHADE_APPEAR_TRANSLATION,
@@ -69,11 +78,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 +112,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 =
@@ -117,8 +158,35 @@
)
}
+ @DisableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT)
@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)
@@ -147,6 +215,62 @@
}
@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)
+ 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()
+ }
+
+ @EnableFlags(Flags.FLAG_PHYSICAL_NOTIFICATION_MOVEMENT)
+ @Test
+ fun startAnimationForEvents_startsHeadsUpDisappearAnim_physical() {
+ 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),
+ )
+
+ runnableCaptor.value.run() // execute the end runnable
+ verify(view, description("should be called at the end of the disappear animation"))
+ .removeFromTransientContainer()
+ }
+
+ @Test
fun initView_updatesResources() {
// Given: the resource values are initialized in the SSA
assertThat(stackStateAnimator.mGoToFullShadeAppearingTranslation)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt
index ef415c9..6ee1c4d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ViewStateTest.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.stack
+import android.animation.AnimatorTestRule
import android.animation.ValueAnimator
import android.view.View
import androidx.test.annotation.UiThreadTest
@@ -28,6 +29,7 @@
import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.TAG_ANIMATOR_TRANSLATION_Y
import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.Y_TRANSLATION
import org.junit.Assert
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.math.log2
@@ -38,6 +40,8 @@
@UiThreadTest
class ViewStateTest : SysuiTestCase() {
private val viewState = ViewState(true /* usePhysicsForMovement */)
+ @get:Rule
+ val animatorTestRule = AnimatorTestRule(this)
@Suppress("DIVISION_BY_ZERO")
@Test
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/ClockController.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockController.kt
index 32fec32..4c1f645 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockController.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockController.kt
@@ -13,6 +13,7 @@
*/
package com.android.systemui.plugins.clocks
+import android.graphics.RectF
import com.android.systemui.plugins.annotations.ProtectedInterface
import com.android.systemui.plugins.annotations.SimpleProperty
import java.io.PrintWriter
@@ -37,7 +38,12 @@
val events: ClockEvents
/** Initializes various rendering parameters. If never called, provides reasonable defaults. */
- fun initialize(isDarkTheme: Boolean, dozeFraction: Float, foldFraction: Float)
+ fun initialize(
+ isDarkTheme: Boolean,
+ dozeFraction: Float,
+ foldFraction: Float,
+ onBoundsChanged: (RectF) -> Unit,
+ )
/** Optional method for dumping debug information */
fun dump(pw: PrintWriter)
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/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockProviderPlugin.kt
index 7426f06..0ef62a3 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockProviderPlugin.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/clocks/ClockProviderPlugin.kt
@@ -53,5 +53,21 @@
/** Identifies a clock design */
typealias ClockId = String
-/** Some data about a clock design */
-data class ClockMetadata(val clockId: ClockId)
+/** Some metadata about a clock design */
+data class ClockMetadata(
+ /** Id for the clock design. */
+ val clockId: ClockId,
+
+ /**
+ * true if this clock is deprecated and should not be used. The ID may still show up in certain
+ * locations to help migrations, but it will not be selectable by new users.
+ */
+ val isDeprecated: Boolean = false,
+
+ /**
+ * Optional mapping of a legacy clock to a new id. This will map users that already are using
+ * `clockId` to the `replacementTarget` instead. The provider should still support the old id
+ * w/o crashing, but can consider it deprecated and the id reserved.
+ */
+ val replacementTarget: ClockId? = null,
+)
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/src/com/android/systemui/dagger/qualifiers/BroadcastRunning.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/BroadcastRunning.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/BroadcastRunning.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/BroadcastRunning.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/Default.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/Default.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/Default.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/Default.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/DisplayId.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/DisplayId.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/DisplayId.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/DisplayId.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/InstrumentationTest.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/InstrumentationTest.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/InstrumentationTest.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/InstrumentationTest.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/LongRunning.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/LongRunning.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/LongRunning.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/LongRunning.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/NotifInflation.kt
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/NotifInflation.kt
index 231fb2d..52a808d 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
+++ b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/NotifInflation.kt
@@ -21,4 +21,4 @@
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
-annotation class NotifInflation
+public annotation class NotifInflation
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/PerUser.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/PerUser.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/PerUser.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/PerUser.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/RootView.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/RootView.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/RootView.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/RootView.java
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/SystemUser.kt
similarity index 88%
copy from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
copy to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/SystemUser.kt
index 231fb2d..0ea815f 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
+++ b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/SystemUser.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * Copyright (C) 2023 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.
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.android.systemui.dagger.qualifiers
import javax.inject.Qualifier
@@ -21,4 +20,4 @@
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
-annotation class NotifInflation
+public annotation class SystemUser
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/TestHarness.java b/packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/TestHarness.java
similarity index 100%
rename from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/TestHarness.java
rename to packages/SystemUI/pods/com/android/systemui/dagger/qualifiers/TestHarness.java
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-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index 6d44645..24fd860 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -115,6 +115,7 @@
<dimen name="below_clock_padding_end">16dp</dimen>
<dimen name="below_clock_padding_start_icons">28dp</dimen>
<dimen name="smartspace_padding_horizontal">16dp</dimen>
+ <dimen name="smartspace_padding_vertical">12dp</dimen>
<!-- Proportion of the screen height to use to set the maximum height of the bouncer to when
the device is in the DEVICE_POSTURE_HALF_OPENED posture, for the PIN/pattern entry. 0 will
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/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/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 6ff1240..43ea2c3 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1024,6 +1024,12 @@
<string name="hearing_devices_ambient_control_left">Left</string>
<!-- QuickSettings: The text to show the control is for right side device. [CHAR LIMIT=30] -->
<string name="hearing_devices_ambient_control_right">Right</string>
+ <!-- QuickSettings: Content description for unified ambient control slider. [CHAR LIMIT=NONE] -->
+ <string name="hearing_devices_ambient_control_description">Surroundings</string>
+ <!-- QuickSettings: Content description for left ambient control slider. [CHAR LIMIT=NONE] -->
+ <string name="hearing_devices_ambient_control_left_description">Left surroundings</string>
+ <!-- QuickSettings: Content description for left ambient control slider. [CHAR LIMIT=NONE] -->
+ <string name="hearing_devices_ambient_control_right_description">Right surroundings</string>
<!-- QuickSettings: Content description for a button, that expands ambient volume sliders [CHAR_LIMIT=NONE] -->
<string name="hearing_devices_ambient_expand_controls">Expand to left and right separated controls</string>
<!-- QuickSettings: Content description for a button, that collapses ambient volume sliders [CHAR LIMIT=NONE] -->
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 8a6b3af..4431dda 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>
@@ -865,6 +871,7 @@
</style>
<style name="MediaPlayer.SessionAction.Primary" parent="MediaPlayer.SessionAction">
+ <item name="android:tint">@android:color/system_on_primary_dark</item>
<item name="android:background">@drawable/qs_media_round_button_background</item>
<item name="android:backgroundTint">@color/media_player_solid_button_bg</item>
</style>
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/ClockEventController.kt b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
index 1b8282b..9434234 100644
--- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
+++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
@@ -21,6 +21,7 @@
import android.content.Intent
import android.content.IntentFilter
import android.content.res.Resources
+import android.graphics.RectF
import android.os.Trace
import android.provider.Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
import android.provider.Settings.Global.ZEN_MODE_OFF
@@ -78,7 +79,7 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
@@ -147,7 +148,7 @@
val clockStr = clock.toString()
loggers.forEach { it.d({ "New Clock: $str1" }) { str1 = clockStr } }
- clock.initialize(isDarkTheme(), dozeAmount, 0f)
+ clock.initialize(isDarkTheme(), dozeAmount.value, 0f, { onClockBoundsChanged.value = it })
if (!regionSamplingEnabled) {
updateColors()
@@ -240,17 +241,16 @@
private var smallClockFrame: ViewGroup? = null
private var onGlobalLayoutListener: OnGlobalLayoutListener? = null
- private var isDozing = false
- private set
-
private var isCharging = false
- private var dozeAmount = 0f
private var isKeyguardVisible = false
private var isRegistered = false
private var disposableHandle: DisposableHandle? = null
private val regionSamplingEnabled = featureFlags.isEnabled(REGION_SAMPLING)
private var largeClockOnSecondaryDisplay = false
+ val dozeAmount = MutableStateFlow(0f)
+ val onClockBoundsChanged = MutableStateFlow<RectF?>(null)
+
private fun isDarkTheme(): Boolean {
val isLightTheme = TypedValue()
context.theme.resolveAttribute(android.R.attr.isLightTheme, isLightTheme, true)
@@ -306,7 +306,7 @@
var smallTimeListener: TimeListener? = null
var largeTimeListener: TimeListener? = null
val shouldTimeListenerRun: Boolean
- get() = isKeyguardVisible && dozeAmount < DOZE_TICKRATE_THRESHOLD
+ get() = isKeyguardVisible && dozeAmount.value < DOZE_TICKRATE_THRESHOLD
private var weatherData: WeatherData? = null
private var zenData: ZenData? = null
@@ -466,7 +466,6 @@
disposableHandle =
parent.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
- listenForDozing(this)
if (ModesUi.isEnabled) {
listenForDnd(this)
}
@@ -576,17 +575,17 @@
}
private fun handleDoze(doze: Float) {
- dozeAmount = doze
clock?.run {
Trace.beginSection("$TAG#smallClock.animations.doze")
- smallClock.animations.doze(dozeAmount)
+ smallClock.animations.doze(doze)
Trace.endSection()
Trace.beginSection("$TAG#largeClock.animations.doze")
- largeClock.animations.doze(dozeAmount)
+ largeClock.animations.doze(doze)
Trace.endSection()
}
smallTimeListener?.update(doze < DOZE_TICKRATE_THRESHOLD)
largeTimeListener?.update(doze < DOZE_TICKRATE_THRESHOLD)
+ dozeAmount.value = doze
}
@VisibleForTesting
@@ -642,18 +641,6 @@
}
}
- @VisibleForTesting
- internal fun listenForDozing(scope: CoroutineScope): Job {
- return scope.launch {
- combine(keyguardInteractor.dozeAmount, keyguardInteractor.isDozing) {
- localDozeAmount,
- localIsDozing ->
- localDozeAmount > dozeAmount || localIsDozing
- }
- .collect { localIsDozing -> isDozing = localIsDozing }
- }
- }
-
class TimeListener(val clockFace: ClockFaceController, val executor: DelayableExecutor) {
val predrawListener =
ViewTreeObserver.OnPreDrawListener {
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/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index 73dc282..e2f3955 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -172,6 +172,7 @@
private boolean mIsDragging;
private float mStartTouchY = -1;
private boolean mDisappearAnimRunning;
+ private boolean mIsAppearAnimationDelayed;
private SwipeListener mSwipeListener;
private ViewMode mViewMode = new DefaultViewMode();
private boolean mIsInteractable;
@@ -583,6 +584,10 @@
return false;
}
+ boolean isAppearAnimationDelayed() {
+ return mIsAppearAnimationDelayed;
+ }
+
void addMotionEventListener(Gefingerpoken listener) {
mMotionEventListeners.add(listener);
}
@@ -624,6 +629,19 @@
mViewMode.startAppearAnimation(securityMode);
}
+ /**
+ * Set view translationY and alpha as we delay bouncer animation.
+ */
+ public void setupForDelayedAppear() {
+ setTranslationY(0f);
+ setAlpha(0f);
+ setIsAppearAnimationDelayed(true);
+ }
+
+ public void setIsAppearAnimationDelayed(boolean isDelayed) {
+ mIsAppearAnimationDelayed = isDelayed;
+ }
+
private void beginJankInstrument(int cuj) {
KeyguardInputView securityView = mSecurityViewFlipper.getSecurityView();
if (securityView == null) return;
@@ -812,6 +830,7 @@
public void reset() {
mViewMode.reset();
mDisappearAnimRunning = false;
+ mIsAppearAnimationDelayed = false;
}
/**
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index d10fce4..198c1cb 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -18,6 +18,7 @@
import static android.app.StatusBarManager.SESSION_KEYGUARD;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISSIBLE_KEYGUARD;
import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_BIOMETRIC;
@@ -385,6 +386,10 @@
boolean useSplitBouncer = orientation == ORIENTATION_LANDSCAPE;
mSecurityViewFlipperController.updateConstraints(useSplitBouncer);
}
+ if (orientation == ORIENTATION_PORTRAIT) {
+ // If there is any delayed bouncer appear animation it can start now
+ startAppearAnimationIfDelayed();
+ }
}
@Override
@@ -845,6 +850,16 @@
}
}
+ /** Start appear animation which was previously delayed from opening bouncer in landscape. */
+ public void startAppearAnimationIfDelayed() {
+ if (!mView.isAppearAnimationDelayed()) {
+ return;
+ }
+ setAlpha(1f);
+ appear();
+ mView.setIsAppearAnimationDelayed(false);
+ }
+
/** Called when the bouncer changes visibility. */
public void onBouncerVisibilityChanged(boolean isVisible) {
if (!isVisible) {
@@ -1301,4 +1316,13 @@
setAlpha(MathUtils.constrain(1 - scaledFraction, 0f, 1f));
mView.setTranslationY(scaledFraction * mTranslationY);
}
+
+ /** Set up view for delayed appear animation. */
+ public void setupForDelayedAppear() {
+ mView.setupForDelayedAppear();
+ }
+
+ public boolean isLandscapeOrientation() {
+ return mLastOrientation == Configuration.ORIENTATION_LANDSCAPE;
+ }
}
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/AmbientVolumeLayout.java b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeLayout.java
index 5247acc..33c9eb1 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeLayout.java
@@ -327,8 +327,19 @@
slider.addOnChangeListener(mSliderOnChangeListener);
if (side == SIDE_LEFT) {
slider.setTitle(mContext.getString(R.string.hearing_devices_ambient_control_left));
+ slider.setContentDescription(
+ mContext.getString(R.string.hearing_devices_ambient_control_left));
+ slider.setSliderContentDescription(
+ mContext.getString(R.string.hearing_devices_ambient_control_left_description));
} else if (side == SIDE_RIGHT) {
slider.setTitle(mContext.getString(R.string.hearing_devices_ambient_control_right));
+ slider.setContentDescription(
+ mContext.getString(R.string.hearing_devices_ambient_control_right));
+ slider.setSliderContentDescription(
+ mContext.getString(R.string.hearing_devices_ambient_control_right_description));
+ } else {
+ slider.setSliderContentDescription(
+ mContext.getString(R.string.hearing_devices_ambient_control_description));
}
mSideToSliderMap.put(side, slider);
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeSlider.java b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeSlider.java
index 1a068c4..5c0ad3d 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/hearingaid/AmbientVolumeSlider.java
@@ -92,6 +92,11 @@
mSlider = requireViewById(R.id.ambient_volume_slider);
mSlider.addOnSliderTouchListener(mSliderTouchListener);
mSlider.addOnChangeListener(mSliderChangeListener);
+
+ setFocusable(false);
+ setClickable(false);
+ mSlider.setFocusable(false);
+ mSlider.setClickable(false);
}
/**
@@ -178,6 +183,13 @@
return (int) Math.ceil((value - min) / levelGap);
}
+ /** Sets the content description to the ambient volume slider. */
+ public void setSliderContentDescription(CharSequence contentDescription) {
+ if (mSlider != null) {
+ mSlider.setContentDescription(contentDescription);
+ }
+ }
+
/** Interface definition for a callback invoked when a slider's value is changed. */
public interface OnChangeListener {
/** Called when the finger is take off from the slider. */
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/ambient/touch/BouncerSwipeTouchHandler.kt b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
index d8e7a16..97de78c 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.kt
@@ -18,6 +18,7 @@
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
+import android.content.res.Configuration
import android.graphics.Rect
import android.graphics.Region
import android.util.Log
@@ -36,6 +37,7 @@
import com.android.systemui.ambient.touch.scrim.ScrimController
import com.android.systemui.ambient.touch.scrim.ScrimManager
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants
+import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.plugins.ActivityStarter
@@ -46,6 +48,7 @@
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.wm.shell.animation.FlingAnimationUtils
import java.util.Optional
import javax.inject.Inject
@@ -82,6 +85,8 @@
private val sceneInteractor: SceneInteractor,
private val shadeRepository: ShadeRepository,
private val windowRootViewProvider: Optional<Provider<WindowRootView>>,
+ private val keyguardStateController: KeyguardStateController,
+ communalSettingsInteractor: CommunalSettingsInteractor,
) : TouchHandler {
/** An interface for creating ValueAnimators. */
interface ValueAnimatorCreator {
@@ -101,6 +106,8 @@
private var capture: Boolean? = null
private var expanded: Boolean = false
private var touchSession: TouchSession? = null
+ private var isUserTrackingExpansionDisabled: Boolean = false
+ private var isKeyguardScreenRotationAllowed: Boolean = false
private val scrimManagerCallback =
ScrimManager.Callback { controller ->
currentScrimController?.reset()
@@ -121,6 +128,9 @@
distanceX: Float,
distanceY: Float,
): Boolean {
+ val isLandscape =
+ windowRootView.resources.configuration.orientation ==
+ Configuration.ORIENTATION_LANDSCAPE
if (capture == null) {
capture =
if (Flags.dreamOverlayBouncerSwipeDirectionFiltering()) {
@@ -137,7 +147,9 @@
// reset expanding
expanded = false
// Since the user is dragging the bouncer up, set scrimmed to false.
- currentScrimController?.show()
+ if (isKeyguardScreenRotationAllowed || !isLandscape) {
+ currentScrimController?.show(false)
+ }
if (SceneContainerFlag.isEnabled) {
sceneInteractor.onRemoteUserInputStarted("bouncer touch handler")
@@ -172,6 +184,37 @@
return true
}
+ if (touchSession == null) {
+ return true
+ }
+ val screenTravelPercentage =
+ (abs((y - e2.y).toDouble()) / touchSession!!.bounds.height()).toFloat()
+
+ if (communalSettingsInteractor.isV2FlagEnabled()) {
+ if (isUserTrackingExpansionDisabled) return true
+ // scrolling up in landscape orientation but device doesn't allow keyguard
+ // screen rotation
+ if (y > e2.y && !isKeyguardScreenRotationAllowed && isLandscape) {
+ velocityTracker!!.computeCurrentVelocity(1000)
+ currentExpansion = 1 - screenTravelPercentage
+ expanded =
+ shouldExpandBouncer(
+ velocityTracker!!.yVelocity,
+ velocityTracker!!.xVelocity,
+ EXPANSION_FROM_LANDSCAPE_THRESHOLD,
+ currentExpansion,
+ )
+ if (expanded) {
+ // Once scroll past the percentage threshold, show bouncer scrimmed,
+ // so that user won't be required to drag up and then right to keep
+ // bouncer open after screen rotates to portrait.
+ currentScrimController?.show(true)
+ isUserTrackingExpansionDisabled = true
+ }
+ return true
+ }
+ }
+
if (SceneContainerFlag.isEnabled) {
windowRootView.dispatchTouchEvent(e2)
} else {
@@ -182,12 +225,7 @@
// is fully hidden at full expansion (1) and fully visible when fully
// collapsed
// (0).
- touchSession?.apply {
- val screenTravelPercentage =
- (abs((this@outer.y - e2.y).toDouble()) / getBounds().height())
- .toFloat()
- setPanelExpansion(1 - screenTravelPercentage)
- }
+ touchSession?.apply { setPanelExpansion(1 - screenTravelPercentage) }
}
}
@@ -262,6 +300,7 @@
}
scrimManager.addCallback(scrimManagerCallback)
currentScrimController = scrimManager.currentController
+ isKeyguardScreenRotationAllowed = keyguardStateController.isKeyguardScreenRotationAllowed()
shadeRepository.setLegacyShadeTracking(true)
session.registerCallback {
@@ -271,6 +310,7 @@
scrimManager.removeCallback(scrimManagerCallback)
capture = null
touchSession = null
+ isUserTrackingExpansionDisabled = false
if (!Flags.communalBouncerDoNotModifyPluginOpen()) {
notificationShadeWindowController.setForcePluginOpen(false, this)
}
@@ -299,14 +339,25 @@
return
}
+ // We are already in progress of opening bouncer scrimmed
+ if (isUserTrackingExpansionDisabled) {
+ // User is done scrolling, reset
+ isUserTrackingExpansionDisabled = false
+ return
+ }
+
// We must capture the resulting velocities as resetMonitor() will clear these
// values.
velocityTracker!!.computeCurrentVelocity(1000)
val verticalVelocity = velocityTracker!!.yVelocity
- val horizontalVelocity = velocityTracker!!.xVelocity
- val velocityVector =
- hypot(horizontalVelocity.toDouble(), verticalVelocity.toDouble()).toFloat()
- expanded = !flingRevealsOverlay(verticalVelocity, velocityVector)
+ expanded =
+ shouldExpandBouncer(
+ verticalVelocity,
+ velocityTracker!!.xVelocity,
+ FLING_PERCENTAGE_THRESHOLD,
+ currentExpansion,
+ )
+
val expansion =
if (expanded!!) KeyguardBouncerConstants.EXPANSION_VISIBLE
else KeyguardBouncerConstants.EXPANSION_HIDDEN
@@ -339,11 +390,27 @@
return animator
}
- protected fun flingRevealsOverlay(velocity: Float, velocityVector: Float): Boolean {
+ private fun shouldExpandBouncer(
+ verticalVelocity: Float,
+ horizontalVelocity: Float,
+ threshold: Float,
+ expansion: Float,
+ ): Boolean {
+ val velocityVector =
+ hypot(horizontalVelocity.toDouble(), verticalVelocity.toDouble()).toFloat()
+ return !flingRevealsOverlay(verticalVelocity, velocityVector, threshold, expansion)
+ }
+
+ protected fun flingRevealsOverlay(
+ velocity: Float,
+ velocityVector: Float,
+ threshold: Float,
+ expansion: Float,
+ ): Boolean {
// Fully expand the space above the bouncer, if the user has expanded the bouncer less
// than halfway or final velocity was positive, indicating a downward direction.
return if (abs(velocityVector.toDouble()) < flingAnimationUtils.minVelocityPxPerSecond) {
- currentExpansion > FLING_PERCENTAGE_THRESHOLD
+ expansion > threshold
} else {
velocity > 0
}
@@ -390,6 +457,7 @@
companion object {
const val FLING_PERCENTAGE_THRESHOLD = 0.5f
+ const val EXPANSION_FROM_LANDSCAPE_THRESHOLD = 0.95f
private const val TAG = "BouncerSwipeTouchHandler"
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/BouncerScrimController.java b/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/BouncerScrimController.java
index 94c9982..6f2dd79 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/BouncerScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/BouncerScrimController.java
@@ -33,8 +33,8 @@
}
@Override
- public void show() {
- mStatusBarKeyguardViewManager.showPrimaryBouncer(false);
+ public void show(boolean scrimmed) {
+ mStatusBarKeyguardViewManager.showPrimaryBouncer(scrimmed);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/ScrimController.java b/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/ScrimController.java
index 0054352..90cbd25 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/scrim/ScrimController.java
@@ -25,8 +25,9 @@
public interface ScrimController {
/**
* Called at the start of expansion before any expansion amount updates.
+ * @param scrimmed true when the bouncer should show scrimmed, false when user will be dragging.
*/
- default void show() {
+ default void show(boolean scrimmed) {
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt
index bbf9a1901..30b98a6 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt
@@ -137,6 +137,9 @@
)
bind(overlayView!!, overlayViewModel, windowManager.get())
overlayView!!.visibility = View.INVISIBLE
+ overlayView!!.setOnClickListener { v ->
+ v.requireViewById<LottieAnimationView>(R.id.sidefps_animation).toggleAnimation()
+ }
Log.d(TAG, "show(): adding overlayView $overlayView")
windowManager.get().addView(overlayView, overlayViewModel.defaultOverlayViewParams)
}
@@ -234,3 +237,11 @@
resumeAnimation()
}
}
+
+fun LottieAnimationView.toggleAnimation() {
+ if (isAnimating) {
+ pauseAnimation()
+ } else {
+ resumeAnimation()
+ }
+}
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/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
index 75503e8..b26a2c0 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
@@ -17,7 +17,9 @@
package com.android.systemui.bouncer.domain.interactor
import android.app.StatusBarManager.SESSION_KEYGUARD
+import com.android.app.tracing.FlowTracing.traceAsCounter
import com.android.app.tracing.coroutines.asyncTraced as async
+import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.internal.logging.UiEventLogger
import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor
@@ -38,9 +40,12 @@
import com.android.systemui.log.SessionTracker
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.SceneBackInteractor
+import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ShadeDisplayAware
+import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
@@ -49,7 +54,9 @@
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
/** Encapsulates business logic and application state accessing use-cases. */
@@ -65,6 +72,7 @@
private val powerInteractor: PowerInteractor,
private val uiEventLogger: UiEventLogger,
private val sessionTracker: SessionTracker,
+ sceneInteractor: SceneInteractor,
sceneBackInteractor: SceneBackInteractor,
@ShadeDisplayAware private val configurationInteractor: ConfigurationInteractor,
) {
@@ -149,6 +157,31 @@
val dismissDestination: Flow<SceneKey> =
sceneBackInteractor.backScene.map { it ?: Scenes.Lockscreen }
+ /** The amount [0-1] that the Bouncer Overlay has been transitioned to. */
+ val bouncerExpansion: Flow<Float> =
+ if (SceneContainerFlag.isEnabled) {
+ sceneInteractor.transitionState.flatMapLatestConflated { state ->
+ when (state) {
+ is ObservableTransitionState.Idle ->
+ flowOf(if (Overlays.Bouncer in state.currentOverlays) 1f else 0f)
+ is ObservableTransitionState.Transition ->
+ if (state.toContent == Overlays.Bouncer) {
+ state.progress
+ } else if (state.fromContent == Overlays.Bouncer) {
+ state.progress.map { progress -> 1 - progress }
+ } else {
+ state.currentOverlays().map {
+ if (Overlays.Bouncer in it) 1f else 0f
+ }
+ }
+ }
+ }
+ } else {
+ flowOf()
+ }
+ .distinctUntilChanged()
+ .traceAsCounter("bouncer_expansion") { (it * 100f).toInt() }
+
/** Notifies that the user has places down a pointer, not necessarily dragging just yet. */
fun onDown() {
falsingInteractor.avoidGesture()
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
index 7f26831..5d64219 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
@@ -15,6 +15,7 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
+import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
import com.android.systemui.log.BouncerLogger
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
@@ -30,6 +31,8 @@
constructor(
val viewModel: KeyguardBouncerViewModel,
val primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
+ val glanceableHubToPrimaryBouncerTransitionViewModel:
+ GlanceableHubToPrimaryBouncerTransitionViewModel,
val componentFactory: KeyguardBouncerComponent.Factory,
val messageAreaControllerFactory: KeyguardMessageAreaController.Factory,
val bouncerMessageInteractor: BouncerMessageInteractor,
@@ -82,6 +85,7 @@
view,
deps.viewModel,
deps.primaryBouncerToGoneTransitionViewModel,
+ deps.glanceableHubToPrimaryBouncerTransitionViewModel,
deps.componentFactory,
deps.messageAreaControllerFactory,
deps.bouncerMessageInteractor,
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt
index 7d8945a..45f0e13 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt
@@ -33,6 +33,7 @@
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE
import com.android.systemui.bouncer.ui.BouncerViewDelegate
import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel
+import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.log.BouncerLogger
@@ -49,6 +50,8 @@
view: ViewGroup,
viewModel: KeyguardBouncerViewModel,
primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
+ glanceableHubToPrimaryBouncerTransitionViewModel:
+ GlanceableHubToPrimaryBouncerTransitionViewModel,
componentFactory: KeyguardBouncerComponent.Factory,
messageAreaControllerFactory: KeyguardMessageAreaController.Factory,
bouncerMessageInteractor: BouncerMessageInteractor,
@@ -133,7 +136,20 @@
/* turningOff= */ false
)
securityContainerController.setInitialMessage()
- securityContainerController.appear()
+ // Delay bouncer appearing animation when opening it from the
+ // glanceable hub in landscape, until after orientation changes
+ // to portrait. This prevents bouncer from showing in landscape
+ // layout, if bouncer rotation is not allowed.
+ if (
+ glanceableHubToPrimaryBouncerTransitionViewModel
+ .willDelayAppearAnimation(
+ securityContainerController.isLandscapeOrientation
+ )
+ ) {
+ securityContainerController.setupForDelayedAppear()
+ } else {
+ securityContainerController.appear()
+ }
securityContainerController.onResume(
KeyguardSecurityView.SCREEN_ON
)
diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
index e36e855..49b0bb6 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
@@ -29,10 +29,17 @@
import com.android.systemui.communal.shared.model.CommunalScenes.isCommunal
import com.android.systemui.communal.shared.model.CommunalTransitionKeys
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.shared.model.Edge
+import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
+import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB
+import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.NotificationShadeWindowController
+import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import com.android.systemui.util.kotlin.emitOnStart
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
@@ -45,6 +52,7 @@
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.withContext
@@ -60,10 +68,12 @@
private val communalInteractor: CommunalInteractor,
private val communalSettingsInteractor: CommunalSettingsInteractor,
private val communalSceneInteractor: CommunalSceneInteractor,
+ private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
private val keyguardInteractor: KeyguardInteractor,
private val systemSettings: SystemSettings,
private val notificationShadeWindowController: NotificationShadeWindowController,
@Background private val bgScope: CoroutineScope,
+ @Application private val applicationScope: CoroutineScope,
@Main private val mainDispatcher: CoroutineDispatcher,
private val uiEventLogger: UiEventLogger,
) : CoreStartable {
@@ -154,6 +164,25 @@
}
}
}
+
+ if (communalSettingsInteractor.isV2FlagEnabled()) {
+ applicationScope.launch(context = mainDispatcher) {
+ anyOf(
+ communalSceneInteractor.isTransitioningToOrIdleOnCommunal,
+ // when transitioning from hub to dream, allow hub to stay at the current
+ // orientation, as keyguard doesn't allow rotation by default.
+ keyguardTransitionInteractor.isInTransition(
+ edge = Edge.create(from = Scenes.Communal, to = DREAMING),
+ edgeWithoutSceneContainer =
+ Edge.create(from = GLANCEABLE_HUB, to = DREAMING),
+ ),
+ )
+ .distinctUntilChanged()
+ .collectLatest {
+ notificationShadeWindowController.setGlanceableHubOrientationAware(it)
+ }
+ }
+ }
}
private fun cancelHubTimeout() {
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractor.kt
index 3d9e930..fed99d7 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneInteractor.kt
@@ -307,6 +307,21 @@
initialValue = false,
)
+ /** Flow that emits a boolean if transitioning to or idle on communal scene. */
+ val isTransitioningToOrIdleOnCommunal: Flow<Boolean> =
+ transitionState
+ .map {
+ (it is ObservableTransitionState.Idle &&
+ it.currentScene == CommunalScenes.Communal) ||
+ (it is ObservableTransitionState.Transition &&
+ it.toContent == CommunalScenes.Communal)
+ }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false,
+ )
+
private companion object {
const val TAG = "CommunalSceneInteractor"
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModel.kt
deleted file mode 100644
index b531d15..0000000
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModel.kt
+++ /dev/null
@@ -1,124 +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.communal.ui.viewmodel
-
-import android.annotation.SuppressLint
-import android.app.DreamManager
-import android.content.Intent
-import android.provider.Settings
-import androidx.compose.runtime.getValue
-import com.android.internal.logging.UiEventLogger
-import com.android.systemui.communal.domain.interactor.CommunalPrefsInteractor
-import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
-import com.android.systemui.communal.shared.log.CommunalUiEvent
-import com.android.systemui.dagger.qualifiers.Background
-import com.android.systemui.lifecycle.ExclusiveActivatable
-import com.android.systemui.lifecycle.Hydrator
-import com.android.systemui.plugins.ActivityStarter
-import com.android.systemui.statusbar.policy.BatteryController
-import com.android.systemui.util.kotlin.BooleanFlowOperators.allOf
-import com.android.systemui.util.kotlin.BooleanFlowOperators.not
-import com.android.systemui.util.kotlin.isDevicePluggedIn
-import com.android.systemui.util.kotlin.sample
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
-import kotlin.coroutines.CoroutineContext
-import kotlinx.coroutines.awaitCancellation
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.flow.collectLatest
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.receiveAsFlow
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-
-class CommunalToDreamButtonViewModel
-@AssistedInject
-constructor(
- @Background private val backgroundContext: CoroutineContext,
- batteryController: BatteryController,
- private val prefsInteractor: CommunalPrefsInteractor,
- private val settingsInteractor: CommunalSettingsInteractor,
- private val activityStarter: ActivityStarter,
- private val dreamManager: DreamManager,
- private val uiEventLogger: UiEventLogger,
-) : ExclusiveActivatable() {
-
- private val hydrator = Hydrator("CommunalToDreamButtonViewModel.hydrator")
- private val _requests = Channel<Unit>(Channel.BUFFERED)
-
- /** Whether we should show a button on hub to switch to dream. */
- val shouldShowDreamButtonOnHub: Boolean by
- hydrator.hydratedStateOf(
- traceName = "shouldShowDreamButtonOnHub",
- initialValue = false,
- source = batteryController.isDevicePluggedIn().distinctUntilChanged(),
- )
-
- /** Return whether to show the dream button tooltip. */
- val shouldShowTooltip: Boolean by
- hydrator.hydratedStateOf(
- traceName = "shouldShowTooltip",
- initialValue = false,
- source =
- allOf(
- not(prefsInteractor.isDreamButtonTooltipDismissed),
- prefsInteractor.isHubOnboardingDismissed,
- ),
- )
-
- /** Set the dream button tooltip to be dismissed. */
- fun setDreamButtonTooltipDismissed() {
- prefsInteractor.setDreamButtonTooltipDismissed()
- }
-
- /** Handle a tap on the "show dream" button. */
- fun onShowDreamButtonTap() {
- uiEventLogger.log(CommunalUiEvent.COMMUNAL_HUB_SHOW_DREAM_BUTTON_TAP)
- _requests.trySend(Unit)
- }
-
- @SuppressLint("MissingPermission")
- override suspend fun onActivated(): Nothing = coroutineScope {
- launch {
- _requests
- .receiveAsFlow()
- .sample(settingsInteractor.isScreensaverEnabled)
- .collectLatest { enabled ->
- withContext(backgroundContext) {
- if (enabled) {
- dreamManager.startDream()
- } else {
- activityStarter.postStartActivityDismissingKeyguard(
- Intent(Settings.ACTION_DREAM_SETTINGS),
- 0,
- )
- }
- }
- }
- }
-
- launch { hydrator.activate() }
-
- awaitCancellation()
- }
-
- @AssistedFactory
- interface Factory {
- fun create(): CommunalToDreamButtonViewModel
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/AdditionalStartable.java b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/AdditionalStartable.java
deleted file mode 100644
index e69de29..0000000
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/AdditionalStartable.java
+++ /dev/null
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt
deleted file mode 100644
index 6878a52..0000000
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/SystemUser.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2023 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.dagger.qualifiers
-
-import javax.inject.Qualifier
-
-@Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class SystemUser
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/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/grid/ui/compose/SpannedGrids.kt b/packages/SystemUI/src/com/android/systemui/grid/ui/compose/SpannedGrids.kt
index 96ef03c..e06c228 100644
--- a/packages/SystemUI/src/com/android/systemui/grid/ui/compose/SpannedGrids.kt
+++ b/packages/SystemUI/src/com/android/systemui/grid/ui/compose/SpannedGrids.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.android.systemui.grid.ui.compose
+import androidx.collection.IntIntPair
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
@@ -24,7 +24,6 @@
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.Layout
-import androidx.compose.ui.layout.Placeable
import androidx.compose.ui.semantics.CollectionInfo
import androidx.compose.ui.semantics.CollectionItemInfo
import androidx.compose.ui.semantics.collectionInfo
@@ -34,6 +33,8 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.fastForEachIndexed
+import androidx.compose.ui.util.fastMapIndexed
import kotlin.math.max
/**
@@ -65,7 +66,11 @@
spans: List<Int>,
modifier: Modifier = Modifier,
keys: (spanIndex: Int) -> Any = { it },
- composables: @Composable BoxScope.(spanIndex: Int) -> Unit,
+ composables:
+ @Composable
+ BoxScope.(
+ spanIndex: Int, row: Int, isFirstInColumn: Boolean, isLastInColumn: Boolean,
+ ) -> Unit,
) {
SpannedGrid(
primarySpaces = rows,
@@ -80,7 +85,7 @@
}
/**
- * Horizontal (non lazy) grid that supports [spans] for its elements.
+ * Vertical (non lazy) grid that supports [spans] for its elements.
*
* The elements will be laid down horizontally first, and then by rows. So assuming LTR layout, it
* will be (for a span list `[2, 1, 2, 1, 1, 1, 1, 1]` and 4 columns):
@@ -107,7 +112,9 @@
spans: List<Int>,
modifier: Modifier = Modifier,
keys: (spanIndex: Int) -> Any = { it },
- composables: @Composable BoxScope.(spanIndex: Int) -> Unit,
+ composables:
+ @Composable
+ BoxScope.(spanIndex: Int, column: Int, isFirstInRow: Boolean, isLastInRow: Boolean) -> Unit,
) {
SpannedGrid(
primarySpaces = columns,
@@ -130,7 +137,9 @@
isVertical: Boolean,
modifier: Modifier = Modifier,
keys: (spanIndex: Int) -> Any = { it },
- composables: @Composable BoxScope.(spanIndex: Int) -> Unit,
+ composables:
+ @Composable
+ BoxScope.(spanIndex: Int, secondaryAxis: Int, isFirst: Boolean, isLast: Boolean) -> Unit,
) {
val crossAxisArrangement = Arrangement.spacedBy(crossAxisSpacing)
spans.forEachIndexed { index, span ->
@@ -139,7 +148,6 @@
"expected rance of [1, $primarySpaces]"
}
}
-
if (isVertical) {
check(crossAxisSpacing >= 0.dp) { "Negative columnSpacing $crossAxisSpacing" }
check(mainAxisSpacing >= 0.dp) { "Negative rowSpacing $mainAxisSpacing" }
@@ -147,29 +155,30 @@
check(mainAxisSpacing >= 0.dp) { "Negative columnSpacing $mainAxisSpacing" }
check(crossAxisSpacing >= 0.dp) { "Negative rowSpacing $crossAxisSpacing" }
}
-
- val totalMainAxisGroups: Int =
+ // List of primary axis index to secondary axis index
+ // This is keyed to the size of the spans list for performance reasons as we don't expect the
+ // spans value to change outside of edit mode.
+ val positions = remember(spans.size) { Array(spans.size) { IntIntPair(0, 0) } }
+ val totalMainAxisGroups =
remember(primarySpaces, spans) {
- var currentAccumulated = 0
- var groups = 1
- spans.forEach { span ->
- if (currentAccumulated + span <= primarySpaces) {
- currentAccumulated += span
- } else {
- groups += 1
- currentAccumulated = span
+ var mainAxisGroup = 0
+ var currentSlot = 0
+ spans.fastForEachIndexed { index, span ->
+ if (currentSlot + span > primarySpaces) {
+ currentSlot = 0
+ mainAxisGroup += 1
}
+ positions[index] = IntIntPair(mainAxisGroup, currentSlot)
+ currentSlot += span
}
- groups
+ mainAxisGroup + 1
}
-
val slotPositionsAndSizesCache = remember {
object {
var sizes = IntArray(0)
var positions = IntArray(0)
}
}
-
Layout(
{
(0 until spans.size).map { spanIndex ->
@@ -184,7 +193,13 @@
}
}
) {
- composables(spanIndex)
+ val position = positions[spanIndex]
+ composables(
+ spanIndex,
+ position.second,
+ position.second == 0,
+ positions.getOrNull(spanIndex + 1)?.first != position.first,
+ )
}
}
}
@@ -205,7 +220,6 @@
slotPositionsAndSizesCache.sizes,
)
val cellSizesInCrossAxis = slotPositionsAndSizesCache.sizes
-
// with is needed because of the double receiver (Density, Arrangement).
with(crossAxisArrangement) {
arrange(
@@ -216,68 +230,73 @@
)
}
val startPositions = slotPositionsAndSizesCache.positions
-
val mainAxisSpacingPx = mainAxisSpacing.roundToPx()
val mainAxisTotalGaps = (totalMainAxisGroups - 1) * mainAxisSpacingPx
- val mainAxisSize = if (isVertical) constraints.maxHeight else constraints.maxWidth
+ val mainAxisMaxSize = if (isVertical) constraints.maxHeight else constraints.maxWidth
val mainAxisElementConstraint =
- if (mainAxisSize == Constraints.Infinity) {
+ if (mainAxisMaxSize == Constraints.Infinity) {
Constraints.Infinity
} else {
- max(0, (mainAxisSize - mainAxisTotalGaps) / totalMainAxisGroups)
+ max(0, (mainAxisMaxSize - mainAxisTotalGaps) / totalMainAxisGroups)
}
- val mainAxisSizes = IntArray(totalMainAxisGroups) { 0 }
-
- var currentSlot = 0
- var mainAxisGroup = 0
+ var mainAxisTotalSize = mainAxisTotalGaps
+ var currentMainAxis = 0
+ var currentMainAxisMax = 0
val placeables =
- measurables.mapIndexed { index, measurable ->
+ measurables.fastMapIndexed { index, measurable ->
val span = spans[index]
- if (currentSlot + span > primarySpaces) {
- currentSlot = 0
- mainAxisGroup += 1
- }
+ val position = positions[index]
val crossAxisConstraint =
- calculateWidth(cellSizesInCrossAxis, startPositions, currentSlot, span)
- PlaceResult(
- measurable.measure(
- makeConstraint(
- isVertical,
- mainAxisElementConstraint,
- crossAxisConstraint,
- )
- ),
- currentSlot,
- mainAxisGroup,
+ calculateWidth(cellSizesInCrossAxis, startPositions, position.second, span)
+
+ measurable
+ .measure(
+ makeConstraint(isVertical, mainAxisElementConstraint, crossAxisConstraint)
)
.also {
- currentSlot += span
- mainAxisSizes[mainAxisGroup] =
- max(
- mainAxisSizes[mainAxisGroup],
- if (isVertical) it.placeable.height else it.placeable.width,
- )
+ val placeableSize = if (isVertical) it.height else it.width
+ if (position.first != currentMainAxis) {
+ // New row -- Add the max size to the total and reset the max
+ mainAxisTotalSize += currentMainAxisMax
+ currentMainAxisMax = placeableSize
+ currentMainAxis = position.first
+ } else {
+ currentMainAxisMax = max(currentMainAxisMax, placeableSize)
+ }
}
}
+ mainAxisTotalSize += currentMainAxisMax
- val mainAxisTotalSize = mainAxisTotalGaps + mainAxisSizes.sum()
- val mainAxisStartingPoints =
- mainAxisSizes.runningFold(0) { acc, value -> acc + value + mainAxisSpacingPx }
val height = if (isVertical) mainAxisTotalSize else crossAxisSize
val width = if (isVertical) crossAxisSize else mainAxisTotalSize
layout(width, height) {
- placeables.forEach { (placeable, slot, mainAxisGroup) ->
+ var previousMainAxis = 0
+ var currentMainAxisPosition = 0
+ var currentMainAxisMax = 0
+ placeables.forEachIndexed { index, placeable ->
+ val slot = positions[index].second
+ val mainAxisSize = if (isVertical) placeable.height else placeable.width
+
+ if (positions[index].first != previousMainAxis) {
+ // Move up a row + padding
+ currentMainAxisPosition += currentMainAxisMax + mainAxisSpacingPx
+ currentMainAxisMax = mainAxisSize
+ previousMainAxis = positions[index].first
+ } else {
+ currentMainAxisMax = max(currentMainAxisMax, mainAxisSize)
+ }
+
val x =
if (isVertical) {
startPositions[slot]
} else {
- mainAxisStartingPoints[mainAxisGroup]
+ currentMainAxisPosition
}
val y =
if (isVertical) {
- mainAxisStartingPoints[mainAxisGroup]
+ currentMainAxisPosition
} else {
startPositions[slot]
}
@@ -321,9 +340,3 @@
outArray[index] = slotSize + if (index < remainingPixels) 1 else 0
}
}
-
-private data class PlaceResult(
- val placeable: Placeable,
- val slotIndex: Int,
- val mainAxisGroup: Int,
-)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index efa9c21..b4b3053 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 =
@@ -2489,6 +2489,7 @@
Log.e(TAG,
"doKeyguard: already showing, but re-showing because we're interactive or "
+ "were in the middle of hiding.");
+ notifyLockNowCallback();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
index 63cf4f7..ab0efed 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
@@ -85,7 +85,7 @@
val previewClock: Flow<ClockController> = keyguardClockRepository.previewClock
- val clockEventController: ClockEventController by keyguardClockRepository::clockEventController
+ val clockEventController: ClockEventController = keyguardClockRepository.clockEventController
var clock: ClockController? by keyguardClockRepository.clockEventController::clock
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..e81d535 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,96 @@
)
}
}
+
+ if (com.android.systemui.shared.Flags.clockReactiveSmartspaceLayout()) {
+ val xBuffer =
+ keyguardRootView.context.resources.getDimensionPixelSize(
+ R.dimen.smartspace_padding_horizontal
+ )
+ val yBuffer =
+ keyguardRootView.context.resources.getDimensionPixelSize(
+ R.dimen.smartspace_padding_vertical
+ )
+
+ val smallViewIds =
+ listOf(sharedR.id.date_smartspace_view, sharedR.id.weather_smartspace_view)
+
+ val largeViewIds =
+ listOf(
+ sharedR.id.date_smartspace_view_large,
+ sharedR.id.weather_smartspace_view_large,
+ )
+
+ launch("$TAG#smartspaceViewModel.burnInLayerVisibility") {
+ combine(
+ keyguardRootViewModel.burnInLayerVisibility,
+ clockViewModel.isLargeClockVisible,
+ ::Pair,
+ )
+ .collect { (visibility, isLargeClock) ->
+ if (isLargeClock) {
+ // hide small clock date/weather
+ for (viewId in smallViewIds) {
+ keyguardRootView.findViewById<View>(viewId)?.let {
+ it.visibility = View.GONE
+ }
+ }
+ }
+ }
+ }
+
+ launch("$TAG#clockEventController.onClockBoundsChanged") {
+ // Whenever the doze amount changes, the clock may update it's view bounds.
+ // We need to update our layout position as a result. We could do this via
+ // `requestLayout`, but that's quite expensive when enclosed in since this
+ // recomputes the entire ConstraintLayout, so instead we do it manually. We
+ // would use translationX/Y for this, but that's used by burnin.
+ combine(
+ clockViewModel.isLargeClockVisible,
+ clockViewModel.clockEventController.onClockBoundsChanged,
+ ::Pair,
+ )
+ .collect { (isLargeClock, clockBounds) ->
+ for (id in (if (isLargeClock) smallViewIds else largeViewIds)) {
+ keyguardRootView.findViewById<View>(id)?.let {
+ it.visibility = View.GONE
+ }
+ }
+
+ if (clockBounds == null) return@collect
+ if (isLargeClock) {
+ val largeDateHeight =
+ keyguardRootView
+ .findViewById<View>(
+ sharedR.id.date_smartspace_view_large
+ )
+ ?.height ?: 0
+ for (id in largeViewIds) {
+ keyguardRootView.findViewById<View>(id)?.let { view ->
+ val viewHeight = view.height
+ val offset = (largeDateHeight - viewHeight) / 2
+ view.top =
+ (clockBounds.bottom + yBuffer + offset).toInt()
+ view.bottom = view.top + viewHeight
+ }
+ }
+ } else {
+ for (id in smallViewIds) {
+ keyguardRootView.findViewById<View>(id)?.let { view ->
+ val viewWidth = view.width
+ if (view.isLayoutRtl()) {
+ view.right = (clockBounds.left - xBuffer).toInt()
+ view.left = view.right - viewWidth
+ } else {
+ view.left = (clockBounds.right + xBuffer).toInt()
+ view.right = view.left + viewWidth
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -125,6 +217,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 +239,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..d0b5f74 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,224 @@
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,
+ context.resources.getDimensionPixelSize(R.dimen.smartspace_padding_vertical),
+ )
- 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,
+ context.resources.getDimensionPixelSize(
+ R.dimen.smartspace_padding_horizontal
+ ),
+ )
+ 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 +397,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/GlanceableHubToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModel.kt
index 4001054..c088900 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModel.kt
@@ -17,33 +17,39 @@
package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.Flags
+import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.shared.model.CommunalBackgroundType
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.FromGlanceableHubTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
+import com.android.systemui.statusbar.policy.KeyguardStateController
import javax.inject.Inject
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flatMapLatest
+@OptIn(ExperimentalCoroutinesApi::class)
@SysUISingleton
class GlanceableHubToPrimaryBouncerTransitionViewModel
@Inject
constructor(
private val blurConfig: BlurConfig,
animationFlow: KeyguardTransitionAnimationFlow,
- communalSettingsInteractor: CommunalSettingsInteractor,
+ private val communalSettingsInteractor: CommunalSettingsInteractor,
+ private val communalSceneInteractor: CommunalSceneInteractor,
+ private val keyguardStateController: KeyguardStateController,
) : PrimaryBouncerTransition {
private val transitionAnimation =
animationFlow
.setup(
- duration = FromLockscreenTransitionInteractor.TO_PRIMARY_BOUNCER_DURATION,
+ duration = FromGlanceableHubTransitionInteractor.TO_BOUNCER_DURATION,
edge = Edge.INVALID,
)
.setupWithoutSceneContainer(edge = Edge.create(GLANCEABLE_HUB, PRIMARY_BOUNCER))
@@ -59,6 +65,13 @@
transitionAnimation.immediatelyTransitionTo(blurConfig.maxBlurRadiusPx)
}
+ /** Whether to delay the animation to fade in bouncer elements. */
+ fun willDelayAppearAnimation(isLandscape: Boolean): Boolean =
+ communalSettingsInteractor.isV2FlagEnabled() &&
+ communalSceneInteractor.isIdleOnCommunal.value &&
+ !keyguardStateController.isKeyguardScreenRotationAllowed() &&
+ isLandscape
+
override val notificationBlurRadius: Flow<Float> =
transitionAnimation.immediatelyTransitionTo(0.0f)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
index cf5cc26..dcbf7b5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
@@ -19,6 +19,7 @@
import android.content.Context
import android.content.res.Resources
import androidx.constraintlayout.helper.widget.Layer
+import com.android.keyguard.ClockEventController
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.customization.R as customR
import com.android.systemui.dagger.SysUISingleton
@@ -68,6 +69,7 @@
initialValue = true,
)
+ val clockEventController: ClockEventController = keyguardClockInteractor.clockEventController
val currentClock = keyguardClockInteractor.currentClock
val hasCustomWeatherDataDisplay =
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 34f7c4d..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
@@ -127,10 +127,9 @@
}
holder.seekBar.setMax(data.duration)
- val totalTimeString =
- DateUtils.formatElapsedTime(data.duration / DateUtils.SECOND_IN_MILLIS)
+ val totalTimeDescription = data.durationDescription
if (data.scrubbing) {
- holder.scrubbingTotalTimeView.text = totalTimeString
+ holder.scrubbingTotalTimeView.text = formatTimeLabel(data.duration)
}
data.elapsedTime?.let {
@@ -148,20 +147,25 @@
}
}
- val elapsedTimeString = DateUtils.formatElapsedTime(it / DateUtils.SECOND_IN_MILLIS)
+ val elapsedTimeDescription = data.elapsedTimeDescription
if (data.scrubbing) {
- holder.scrubbingElapsedTimeView.text = elapsedTimeString
+ holder.scrubbingElapsedTimeView.text = formatTimeLabel(it)
}
holder.seekBar.contentDescription =
holder.seekBar.context.getString(
R.string.controls_media_seekbar_description,
- elapsedTimeString,
- totalTimeString
+ elapsedTimeDescription,
+ totalTimeDescription,
)
}
}
+ /** Returns a time string suitable for display, e.g. "12:34" */
+ private fun formatTimeLabel(milliseconds: Int): CharSequence {
+ return DateUtils.formatElapsedTime(milliseconds / DateUtils.SECOND_IN_MILLIS)
+ }
+
@VisibleForTesting
open fun buildResetAnimator(targetTime: Int): Animator {
val animator =
@@ -169,7 +173,7 @@
holder.seekBar,
"progress",
holder.seekBar.progress,
- targetTime + RESET_ANIMATION_DURATION_MS
+ targetTime + RESET_ANIMATION_DURATION_MS,
)
animator.setAutoCancel(true)
animator.duration = RESET_ANIMATION_DURATION_MS.toLong()
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
index 9b443f5..5d62c02 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
@@ -90,15 +90,16 @@
fun logCarouselVisible() = buffer.log(TAG, LogLevel.DEBUG, {}, { "showing carousel" })
- fun logMediaHostVisibility(location: Int, visible: Boolean) {
+ fun logMediaHostVisibility(location: Int, visible: Boolean, oldState: Boolean) {
buffer.log(
TAG,
LogLevel.DEBUG,
{
int1 = location
bool1 = visible
+ bool2 = oldState
},
- { "media host visibility changed location=$location, visible:$visible" },
+ { "media host visibility changed location=$location, visible:$visible, was:$oldState" },
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
index c689408..69006c6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
@@ -1129,10 +1129,11 @@
traceSection("MediaHierarchyManager#updateHostAttachment") {
if (SceneContainerFlag.isEnabled) {
// No need to manage transition states - just update the desired location directly
- logger.logMediaHostAttachment(desiredLocation)
+ val host = getHost(desiredLocation)
+ logger.logMediaHostAttachment(desiredLocation, host?.visible)
mediaCarouselController.onDesiredLocationChanged(
desiredLocation = desiredLocation,
- desiredHostState = getHost(desiredLocation),
+ desiredHostState = host,
animate = false,
)
return
@@ -1169,7 +1170,8 @@
// that and directly set the mediaFrame's bounds within the premeasured host.
targetHost.addView(mediaFrame)
}
- logger.logMediaHostAttachment(currentAttachmentLocation)
+ val host = getHost(currentAttachmentLocation)
+ logger.logMediaHostAttachment(currentAttachmentLocation, host?.visible)
if (isCrossFadeAnimatorRunning) {
// When cross-fading with an animation, we only notify the media carousel of the
// location change, once the view is reattached to the new place and not
@@ -1313,6 +1315,7 @@
isHomeScreenShadeVisibleToUser() ||
isGlanceableHubVisibleToUser()
val mediaVisible = qsExpanded || hasActiveMediaOrRecommendation
+ logger.logUserVisibilityChange(shadeVisible, mediaVisible)
mediaCarouselController.mediaCarouselScrollHandler.visibleToUser =
shadeVisible && mediaVisible
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
index 1514db3..089d16b 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
@@ -36,7 +36,7 @@
int1 = width
int2 = height
},
- { "size ($str1): $int1 x $int2" }
+ { "size ($str1): $int1 x $int2" },
)
}
@@ -49,11 +49,31 @@
int1 = startLocation
int2 = endLocation
},
- { "location ($str1): $int1 -> $int2" }
+ { "location ($str1): $int1 -> $int2" },
)
}
- fun logMediaHostAttachment(host: Int) {
- buffer.log(TAG, LogLevel.DEBUG, { int1 = host }, { "Host (updateHostAttachment): $int1" })
+ fun logMediaHostAttachment(host: Int, visible: Boolean?) {
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ {
+ int1 = host
+ str1 = visible.toString()
+ },
+ { "Host (updateHostAttachment): $int1 visible $str1" },
+ )
+ }
+
+ fun logUserVisibilityChange(shadeVisible: Boolean, mediaVisible: Boolean) {
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ {
+ bool1 = shadeVisible
+ bool2 = mediaVisible
+ },
+ { "User visibility shade: $shadeVisible media: $mediaVisible" },
+ )
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaHost.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaHost.kt
index 11251cd..a518349 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaHost.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaHost.kt
@@ -208,6 +208,7 @@
* the visibility has changed
*/
fun updateViewVisibility() {
+ val oldState = state.visible
state.visible =
if (mediaCarouselController.isLockedAndHidden()) {
false
@@ -217,9 +218,9 @@
mediaDataManager.hasAnyMediaOrRecommendation()
}
val newVisibility = if (visible) View.VISIBLE else View.GONE
- if (newVisibility != hostView.visibility) {
+ if (oldState != state.visible || newVisibility != hostView.visibility) {
hostView.visibility = newVisibility
- debugLogger.logMediaHostVisibility(location, visible)
+ debugLogger.logMediaHostVisibility(location, visible, oldState)
visibleChangedListeners.forEach { it.invoke(visible) }
}
}
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/panels/ui/compose/BounceableInfo.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/BounceableInfo.kt
index eb6f979..b80e6b4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/BounceableInfo.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/BounceableInfo.kt
@@ -35,11 +35,16 @@
index: Int,
column: Int,
columns: Int,
+ isFirstInRow: Boolean,
+ isLastInRow: Boolean,
): BounceableInfo {
- // Only look for neighbor bounceables if they are on the same row
+ // A tile may be the last in the row without being on the last column
val onLastColumn = sizedTile.onLastColumn(column, columns)
- val previousTile = getOrNull(index - 1)?.takeIf { column != 0 }
- val nextTile = getOrNull(index + 1)?.takeIf { !onLastColumn }
+
+ // Only look for neighbor bounceables if they are on the same row
+ val previousTile = getOrNull(index - 1)?.takeIf { !isFirstInRow }
+ val nextTile = getOrNull(index + 1)?.takeIf { !isLastInRow }
+
return BounceableInfo(this[index], previousTile, nextTile, !onLastColumn)
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/QuickQuickSettings.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/QuickQuickSettings.kt
index 495870f..cdc03bb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/QuickQuickSettings.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/QuickQuickSettings.kt
@@ -57,7 +57,6 @@
onDispose { tiles.forEach { it.stopListening(token) } }
}
val columns = viewModel.columns
- var cellIndex = 0
Box(modifier = modifier) {
GridAnchor()
VerticalSpannedGrid(
@@ -67,17 +66,23 @@
spans = spans,
modifier = Modifier.sysuiResTag("qqs_tile_layout"),
keys = { sizedTiles[it].tile.spec },
- ) { spanIndex ->
+ ) { spanIndex, column, isFirstInColumn, isLastInColumn ->
val it = sizedTiles[spanIndex]
- val column = cellIndex % columns
- cellIndex += it.width
Element(it.tile.spec.toElementKey(spanIndex), Modifier) {
Tile(
tile = it.tile,
iconOnly = it.isIcon,
squishiness = { squishiness },
coroutineScope = scope,
- bounceableInfo = bounceables.bounceableInfo(it, spanIndex, column, columns),
+ bounceableInfo =
+ bounceables.bounceableInfo(
+ it,
+ index = spanIndex,
+ column = column,
+ columns = columns,
+ isFirstInRow = isFirstInColumn,
+ isLastInRow = isLastInColumn,
+ ),
tileHapticsViewModelFactoryProvider =
viewModel.tileHapticsViewModelFactoryProvider,
// There should be no QuickQuickSettings when the details view is enabled.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
index dfee4976..0503049 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/InfiniteGridLayout.kt
@@ -85,8 +85,6 @@
remember(sizedTiles) { List(sizedTiles.size) { BounceableTileViewModel() } }
val squishiness by viewModel.squishinessViewModel.squishiness.collectAsStateWithLifecycle()
val scope = rememberCoroutineScope()
- var cellIndex = 0
-
val spans by remember(sizedTiles) { derivedStateOf { sizedTiles.fastMap { it.width } } }
VerticalSpannedGrid(
@@ -95,10 +93,9 @@
rowSpacing = dimensionResource(R.dimen.qs_tile_margin_vertical),
spans = spans,
keys = { sizedTiles[it].tile.spec },
- ) { spanIndex ->
+ ) { spanIndex, column, isFirstInColumn, isLastInColumn ->
val it = sizedTiles[spanIndex]
- val column = cellIndex % columns
- cellIndex += it.width
+
Element(it.tile.spec.toElementKey(spanIndex), Modifier) {
Tile(
tile = it.tile,
@@ -106,7 +103,15 @@
squishiness = { squishiness },
tileHapticsViewModelFactoryProvider = tileHapticsViewModelFactoryProvider,
coroutineScope = scope,
- bounceableInfo = bounceables.bounceableInfo(it, spanIndex, column, columns),
+ bounceableInfo =
+ bounceables.bounceableInfo(
+ it,
+ index = spanIndex,
+ column = column,
+ columns = columns,
+ isFirstInRow = isFirstInColumn,
+ isLastInRow = isLastInColumn,
+ ),
detailsViewModel = detailsViewModel,
)
}
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/base/viewmodel/QSTileViewModelImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt
index 9bdec43..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
@@ -97,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 ->
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 eeb8c85..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
@@ -42,6 +42,9 @@
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 527c542..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,6 +155,10 @@
qsTileViewModel.onUserChanged(UserHandle.of(currentUser))
}
+ override fun getCurrentTileUser(): Int {
+ return qsTileViewModel.currentTileUser
+ }
+
override fun getDetailsViewModel(): TileDetailsViewModel? {
return qsTileViewModel.tileDetailsViewModel
}
@@ -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/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index e4cd7ea..305444f 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -451,6 +451,8 @@
} else {
mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
}
+ } else if (state.glanceableHubOrientationAware) {
+ mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
} else {
mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
@@ -627,6 +629,7 @@
state.shadeOrQsExpanded,
state.notificationShadeFocusable,
state.glanceableHubShowing,
+ state.glanceableHubOrientationAware,
state.bouncerShowing,
state.keyguardFadingAway,
state.keyguardGoingAway,
@@ -763,6 +766,12 @@
}
@Override
+ public void setGlanceableHubOrientationAware(boolean isOrientationAware) {
+ mCurrentState.glanceableHubOrientationAware = isOrientationAware;
+ apply(mCurrentState);
+ }
+
+ @Override
public void setBackdropShowing(boolean showing) {
mCurrentState.mediaBackdropShowing = showing;
apply(mCurrentState);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
index 6a4b52a..a1eac74 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
@@ -36,6 +36,7 @@
@JvmField var notificationShadeFocusable: Boolean = false,
@JvmField var bouncerShowing: Boolean = false,
@JvmField var glanceableHubShowing: Boolean = false,
+ @JvmField var glanceableHubOrientationAware: Boolean = false,
@JvmField var keyguardFadingAway: Boolean = false,
@JvmField var keyguardGoingAway: Boolean = false,
@JvmField var qsExpanded: Boolean = false,
@@ -81,6 +82,7 @@
notificationShadeFocusable.toString(),
bouncerShowing.toString(),
glanceableHubShowing.toString(),
+ glanceableHubOrientationAware.toString(),
keyguardFadingAway.toString(),
keyguardGoingAway.toString(),
qsExpanded.toString(),
@@ -122,6 +124,7 @@
panelExpanded: Boolean,
notificationShadeFocusable: Boolean,
glanceableHubShowing: Boolean,
+ glanceableHubOrientationAware: Boolean,
bouncerShowing: Boolean,
keyguardFadingAway: Boolean,
keyguardGoingAway: Boolean,
@@ -153,6 +156,7 @@
this.shadeOrQsExpanded = panelExpanded
this.notificationShadeFocusable = notificationShadeFocusable
this.glanceableHubShowing = glanceableHubShowing
+ this.glanceableHubOrientationAware = glanceableHubOrientationAware
this.bouncerShowing = bouncerShowing
this.keyguardFadingAway = keyguardFadingAway
this.keyguardGoingAway = keyguardGoingAway
@@ -202,6 +206,7 @@
"panelExpanded",
"notificationShadeFocusable",
"glanceableHubShowing",
+ "glanceableHubOrientationAware",
"bouncerShowing",
"keyguardFadingAway",
"keyguardGoingAway",
@@ -223,7 +228,7 @@
"dozing",
"scrimsVisibility",
"backgroundBlurRadius",
- "communalVisible"
+ "communalVisible",
)
}
}
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/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt
index 246177e..8114685 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt
@@ -334,7 +334,7 @@
} else if (state.fromContent == overlay) {
state.progress.map { progress -> 1 - progress }
} else {
- flowOf(0f)
+ state.currentOverlays().map { if (overlay in it) 1f else 0f }
}
}
}
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/NotificationGroupingUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
index 4bb12e5..c2e355d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
@@ -57,6 +57,12 @@
private static final VisibilityApplicator VISIBILITY_APPLICATOR = new VisibilityApplicator();
private static final VisibilityApplicator APP_NAME_APPLICATOR = new AppNameApplicator();
private static final ResultApplicator LEFT_ICON_APPLICATOR = new LeftIconApplicator();
+ private static final DataExtractor ICON_EXTRACTOR = new DataExtractor() {
+ @Override
+ public Object extractData(ExpandableNotificationRow row) {
+ return row.getEntry().getSbn().getNotification();
+ }
+ };
private final ExpandableNotificationRow mRow;
private final ArrayList<Processor> mProcessors = new ArrayList<>();
@@ -66,6 +72,7 @@
mRow = row;
final IconComparator iconVisibilityComparator = new IconComparator() {
+ @Override
public boolean compare(View parent, View child, Object parentData,
Object childData) {
if (Flags.notificationsRedesignAppIcons() && mRow.isShowingAppIcon()) {
@@ -77,6 +84,7 @@
}
};
final IconComparator greyComparator = new IconComparator() {
+ @Override
public boolean compare(View parent, View child, Object parentData,
Object childData) {
if (Flags.notificationsRedesignAppIcons() && mRow.isShowingAppIcon()) {
@@ -103,26 +111,31 @@
// To hide the icons if they are the same and the color is the same
mProcessors.add(new Processor(mRow,
com.android.internal.R.id.icon,
+ ICON_EXTRACTOR,
iconVisibilityComparator,
VISIBILITY_APPLICATOR));
// To grey out the icons when they are not the same, or they have the same color
mProcessors.add(new Processor(mRow,
com.android.internal.R.id.status_bar_latest_event_content,
+ ICON_EXTRACTOR,
greyComparator,
greyApplicator));
// To show the large icon on the left side instead if all the small icons are the same
mProcessors.add(new Processor(mRow,
com.android.internal.R.id.status_bar_latest_event_content,
+ ICON_EXTRACTOR,
iconVisibilityComparator,
LEFT_ICON_APPLICATOR));
// To only show the work profile icon in the group header
mProcessors.add(new Processor(mRow,
com.android.internal.R.id.profile_badge,
+ null /* Extractor */,
BADGE_COMPARATOR,
VISIBILITY_APPLICATOR));
// To hide the app name in group children
mProcessors.add(new Processor(mRow,
com.android.internal.R.id.app_name_text,
+ null,
APP_NAME_COMPARATOR,
APP_NAME_APPLICATOR));
// To hide the header text if it's the same
@@ -242,20 +255,23 @@
private static class Processor {
private final int mId;
+ private final DataExtractor mExtractor;
private final ViewComparator mComparator;
private final ResultApplicator mApplicator;
private final ExpandableNotificationRow mParentRow;
private boolean mApply;
private View mParentView;
+ private Object mParentData;
public static Processor forTextView(ExpandableNotificationRow row, int id) {
- return new Processor(row, id, TEXT_VIEW_COMPARATOR, VISIBILITY_APPLICATOR);
+ return new Processor(row, id, null, TEXT_VIEW_COMPARATOR, VISIBILITY_APPLICATOR);
}
- Processor(ExpandableNotificationRow row, int id,
+ Processor(ExpandableNotificationRow row, int id, DataExtractor extractor,
ViewComparator comparator,
ResultApplicator applicator) {
mId = id;
+ mExtractor = extractor;
mApplicator = applicator;
mComparator = comparator;
mParentRow = row;
@@ -265,6 +281,7 @@
NotificationViewWrapper wrapper = mParentRow.getNotificationViewWrapper();
View header = wrapper == null ? null : wrapper.getNotificationHeader();
mParentView = header == null ? null : header.findViewById(mId);
+ mParentData = mExtractor == null ? null : mExtractor.extractData(mParentRow);
mApply = !mComparator.isEmpty(mParentView);
}
@@ -282,7 +299,9 @@
// when for example showing an undo notification
return;
}
- mApply = mComparator.compare(mParentView, ownView);
+ Object childData = mExtractor == null ? null : mExtractor.extractData(row);
+ mApply = mComparator.compare(mParentView, ownView,
+ mParentData, childData);
}
public void apply(ExpandableNotificationRow row) {
@@ -314,9 +333,11 @@
/**
* @param parent the view with the given id in the group header
* @param child the view with the given id in the child notification
+ * @param parentData optional data for the parent
+ * @param childData optional data for the child
* @return whether to views are the same
*/
- boolean compare(View parent, View child);
+ boolean compare(View parent, View child, Object parentData, Object childData);
boolean isEmpty(View view);
}
@@ -327,7 +348,7 @@
private static class BadgeComparator implements ViewComparator {
@Override
- public boolean compare(View parent, View child) {
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
return parent.getVisibility() != View.GONE;
}
@@ -345,7 +366,7 @@
private static class TextViewComparator implements ViewComparator {
@Override
- public boolean compare(View parent, View child) {
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
TextView parentView = (TextView) parent;
CharSequence parentText = parentView == null ? "" : parentView.getText();
TextView childView = (TextView) child;
@@ -361,7 +382,7 @@
private abstract static class IconComparator implements ViewComparator {
@Override
- public boolean compare(View parent, View child) {
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
return false;
}
@@ -421,14 +442,14 @@
private static class AppNameComparator extends TextViewComparator {
@Override
- public boolean compare(View parent, View child) {
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
if (isEmpty(child)) {
// In headerless notifications the AppName view exists but is usually GONE (and not
// populated). We need to treat this case as equal to the header in order to
// deduplicate the view.
return true;
}
- return super.compare(parent, child);
+ return super.compare(parent, child, parentData, childData);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
index 85fad42..50cf015 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
@@ -89,6 +89,9 @@
/** Sets the state of whether the glanceable hub is showing or not. */
default void setGlanceableHubShowing(boolean showing) {}
+ /** Sets the state of whether the glanceable hub can change with user's orientation or not. */
+ default void setGlanceableHubOrientationAware(boolean isOrientationAware) {}
+
/** Sets the state of whether the backdrop is showing or not. */
default void setBackdropShowing(boolean showing) {}
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/PhysicsPropertyAnimator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimator.kt
index 74faf25..0a24d7a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PhysicsPropertyAnimator.kt
@@ -15,12 +15,12 @@
*/
package com.android.systemui.statusbar.notification
+import android.util.FloatProperty
import android.util.Property
import android.view.View
-import androidx.dynamicanimation.animation.DynamicAnimation
-import androidx.dynamicanimation.animation.FloatPropertyCompat
-import androidx.dynamicanimation.animation.SpringAnimation
-import androidx.dynamicanimation.animation.SpringForce
+import com.android.internal.dynamicanimation.animation.DynamicAnimation
+import com.android.internal.dynamicanimation.animation.SpringAnimation
+import com.android.internal.dynamicanimation.animation.SpringForce
import com.android.systemui.res.R
import com.android.systemui.statusbar.notification.PhysicsPropertyAnimator.Companion.createDefaultSpring
import com.android.systemui.statusbar.notification.stack.AnimationProperties
@@ -33,8 +33,8 @@
*/
data class PhysicsProperty(val tag: Int, val property: Property<View, Float>) {
val offsetProperty =
- object : FloatPropertyCompat<View>(property.name) {
- override fun getValue(view: View): Float {
+ object : FloatProperty<View>(property.name) {
+ override fun get(view: View): Float {
return property.get(view)
}
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/ConversationCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
index 248b528..28923b0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.collection.coordinator
+import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
@@ -89,6 +90,7 @@
object : NotifSectioner("Priority People", BUCKET_PRIORITY_PEOPLE) {
override fun isInSection(entry: PipelineEntry): Boolean {
return getPeopleType(entry) == TYPE_IMPORTANT_PERSON
+ && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
}
@@ -96,10 +98,12 @@
val peopleAlertingSectioner = object : NotifSectioner("People(alerting)", BUCKET_PEOPLE) {
override fun isInSection(entry: PipelineEntry): Boolean {
if (SortBySectionTimeFlag.isEnabled) {
- return highPriorityProvider.isHighPriorityConversation(entry)
- || isConversation(entry)
+ return (highPriorityProvider.isHighPriorityConversation(entry)
+ || isConversation(entry))
+ && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
} else {
return highPriorityProvider.isHighPriorityConversation(entry)
+ && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
}
@@ -111,11 +115,12 @@
}
val peopleSilentSectioner = object : NotifSectioner("People(silent)", BUCKET_PEOPLE) {
- // Because the peopleAlertingSectioner is above this one, it will claim all conversations that are alerting.
- // All remaining conversations must be silent.
+ // Because the peopleAlertingSectioner is above this one, it will claim all conversations
+ // that are alerting. All remaining conversations must be silent.
override fun isInSection(entry: PipelineEntry): Boolean {
SortBySectionTimeFlag.assertInLegacyMode()
return isConversation(entry)
+ && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
override fun getComparator(): NotifComparator {
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/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/promoted/AODPromotedNotification.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
index 7959e99..2a01a14 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
@@ -20,6 +20,7 @@
import android.app.Flags.notificationsRedesignTemplates
import android.app.Notification
import android.graphics.PorterDuff
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
@@ -80,9 +81,13 @@
val content = viewModel.content ?: return
val audiblyAlertedIconVisible = viewModel.audiblyAlertedIconVisible
- key(content.identity) {
- val layoutResource = content.layoutResource ?: return
+ val layoutResource = content.layoutResource
+ if (layoutResource == null) {
+ Log.w(TAG, "not displaying promoted notif with ineligible style on AOD")
+ return
+ }
+ key(content.identity) {
val sidePaddings = dimensionResource(systemuiR.dimen.notification_side_paddings)
val sidePaddingValues = PaddingValues(horizontal = sidePaddings, vertical = 0.dp)
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 a081ad5..6837cb2 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
@@ -119,6 +119,7 @@
protected Point mTargetPoint;
private boolean mDismissed;
private boolean mRefocusOnDismiss;
+ protected boolean mIsBlurSupported;
public ActivatableNotificationView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -128,12 +129,13 @@
}
private void updateColors() {
- if (notificationRowTransparency()) {
+ if (usesTransparentBackground()) {
mNormalColor = SurfaceEffectColors.surfaceEffect1(getContext());
} else {
mNormalColor = mContext.getColor(
com.android.internal.R.color.materialColorSurfaceContainerHigh);
}
+ setBackgroundToNormalColor();
mTintedRippleColor = mContext.getColor(
R.color.notification_ripple_tinted_color);
mNormalRippleColor = mContext.getColor(
@@ -144,6 +146,12 @@
mOverrideAmount = 0.0f;
}
+ private void setBackgroundToNormalColor() {
+ if (mBackgroundNormal != null) {
+ mBackgroundNormal.setNormalColor(mNormalColor);
+ }
+ }
+
/**
* Reload background colors from resources and invalidate views.
*/
@@ -173,6 +181,7 @@
mBackgroundNormal = findViewById(R.id.backgroundNormal);
mFakeShadow = findViewById(R.id.fake_shadow);
mShadowHidden = mFakeShadow.getVisibility() != VISIBLE;
+ setBackgroundToNormalColor();
initBackground();
updateBackgroundTint();
updateOutlineAlpha();
@@ -326,6 +335,21 @@
mBackgroundNormal.setBottomAmountClips(!isChildInGroup());
}
+ public void setIsBlurSupported(boolean isBlurSupported) {
+ if (!notificationRowTransparency()) {
+ return;
+ }
+ boolean usedTransparentBackground = usesTransparentBackground();
+ mIsBlurSupported = isBlurSupported;
+ if (usedTransparentBackground != usesTransparentBackground()) {
+ updateBackgroundColors();
+ }
+ }
+
+ protected boolean usesTransparentBackground() {
+ return mIsBlurSupported && notificationRowTransparency();
+ }
+
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
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..3ef1fd2 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
@@ -20,8 +20,8 @@
import static android.app.Notification.Action.SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
-import static com.android.systemui.Flags.notificationsPinnedHunInShade;
import static com.android.systemui.Flags.notificationRowTransparency;
+import static com.android.systemui.Flags.notificationsPinnedHunInShade;
import static com.android.systemui.flags.Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE;
import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.PARENT_DISMISSED;
@@ -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();
}
/**
@@ -1676,11 +1678,17 @@
if (view != null) {
view.setBackgroundTintColor(color);
}
- if (notificationRowTransparency()
- && (mBackgroundNormal != null)
- && (mEntry != null)) {
- mBackgroundNormal.setBgIsColorized(
- mEntry.getSbn().getNotification().isColorized());
+ if (notificationRowTransparency() && mBackgroundNormal != null) {
+ if (NotificationBundleUi.isEnabled()) {
+ mBackgroundNormal.setBgIsColorized(
+ usesTransparentBackground() && mEntryAdapter.isColorized());
+ } else {
+ if (mEntry != null) {
+ mBackgroundNormal.setBgIsColorized(
+ usesTransparentBackground()
+ && mEntry.getSbn().getNotification().isColorized());
+ }
+ }
}
}
@@ -2204,7 +2212,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 +2380,11 @@
return traceTag;
}
- return traceTag + "(" + getEntry().getNotificationStyle() + ")";
+ if (NotificationBundleUi.isEnabled()) {
+ return traceTag + "(" + getEntryAdapter().getStyle() + ")";
+ } else {
+ return traceTag + "(" + getEntry().getNotificationStyle() + ")";
+ }
}
@Override
@@ -3010,6 +3022,7 @@
mUserLocked = userLocked;
mPrivateLayout.setUserExpanding(userLocked);
+ mPublicLayout.setUserExpanding(userLocked);
// This is intentionally not guarded with mIsSummaryWithChildren since we might have had
// children but not anymore.
if (mChildrenContainer != null) {
@@ -3066,6 +3079,7 @@
mChildrenContainer.setOnKeyguard(onKeyguard);
}
}
+ updateBackgroundOpacity();
}
}
@@ -3695,8 +3709,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 +4507,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 c0bc132..e1219e8 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;
@@ -72,8 +73,9 @@
private int mDrawableAlpha = 255;
private final ColorStateList mLightColoredStatefulColors;
private final ColorStateList mDarkColoredStatefulColors;
- private final int mNormalColor;
+ private int mNormalColor;
private boolean mBgIsColorized = false;
+ private boolean mForceOpaque = false;
private final int convexR = 9;
private final int concaveR = 22;
@@ -87,15 +89,13 @@
R.color.notification_state_color_light);
mDarkColoredStatefulColors = getResources().getColorStateList(
R.color.notification_state_color_dark);
- if (notificationRowTransparency()) {
- mNormalColor = SurfaceEffectColors.surfaceEffect1(getContext());
- } else {
- mNormalColor = mContext.getColor(
- com.android.internal.R.color.materialColorSurfaceContainerHigh);
- }
mFocusOverlayStroke = getResources().getDimension(R.dimen.notification_focus_stroke_width);
}
+ public void setNormalColor(int color) {
+ mNormalColor = color;
+ }
+
@Override
public void onTargetVisibilityChanged(boolean targetVisible) {
if (NotificationAddXOnHoverToDismiss.isUnexpectedlyInLegacyMode()) {
@@ -156,6 +156,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 +325,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(getContext()),
+ 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/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/ui/viewbinder/ActivatableNotificationViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt
index f0b5c36..8984f2c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt
@@ -50,6 +50,15 @@
view.registerListenersWhileAttached(touchHandler)
}
}
+ view.repeatWhenAttached {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ viewModel.isBlurSupported.collect { supported ->
+ view.setIsBlurSupported(supported)
+ }
+ }
+ }
+ }
}
private suspend fun ActivatableNotificationView.registerListenersWhileAttached(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt
index f46d424..9a86ffb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.row.ui.viewmodel
import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
+import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import dagger.Module
import dagger.Provides
import kotlinx.coroutines.flow.Flow
@@ -26,25 +27,34 @@
interface ActivatableNotificationViewModel : ExpandableOutlineViewModel {
/** Does the view react to touches? */
val isTouchable: Flow<Boolean>
+ val isBlurSupported: Flow<Boolean>
companion object {
operator fun invoke(
a11yInteractor: AccessibilityInteractor,
- ): ActivatableNotificationViewModel = ActivatableNotificationViewModelImpl(a11yInteractor)
+ windowRootViewBlurInteractor: WindowRootViewBlurInteractor
+ ): ActivatableNotificationViewModel =
+ ActivatableNotificationViewModelImpl(a11yInteractor, windowRootViewBlurInteractor)
}
}
private class ActivatableNotificationViewModelImpl(
a11yInteractor: AccessibilityInteractor,
+ windowRootViewBlurInteractor: WindowRootViewBlurInteractor,
) : ActivatableNotificationViewModel {
override val isTouchable: Flow<Boolean> =
// If a11y touch exploration is enabled, then the activatable view should ignore touches
a11yInteractor.isTouchExplorationEnabled.map { !it }
+ override val isBlurSupported: Flow<Boolean> =
+ windowRootViewBlurInteractor.isBlurCurrentlySupported
}
@Module
object ActivatableNotificationViewModelModule {
@Provides
- fun provideViewModel(interactor: AccessibilityInteractor) =
- ActivatableNotificationViewModel(interactor)
+ fun provideViewModel(
+ a11yInteractor: AccessibilityInteractor,
+ windowRootViewBlurInteractor: WindowRootViewBlurInteractor
+ ) =
+ ActivatableNotificationViewModel(a11yInteractor, windowRootViewBlurInteractor)
}
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/AnimationProperties.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
index 3d60092..4d01cbd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
@@ -23,7 +23,7 @@
import android.view.View;
import android.view.animation.Interpolator;
-import androidx.dynamicanimation.animation.DynamicAnimation;
+import com.android.internal.dynamicanimation.animation.DynamicAnimation;
import java.util.function.Consumer;
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..1a17b8e 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;
@@ -1211,6 +1226,14 @@
}
@Override
+ public void setOccluded(boolean isOccluded) {
+ if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
+ return;
+ }
+ this.setVisibility(isOccluded ? View.INVISIBLE : View.VISIBLE);
+ }
+
+ @Override
public void setScrollState(@NonNull ShadeScrollState scrollState) {
if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
return;
@@ -2134,7 +2157,7 @@
}
}
- public ViewGroup getViewParentForNotification(NotificationEntry entry) {
+ public ViewGroup getViewParentForNotification() {
return this;
}
@@ -3582,10 +3605,6 @@
mGoToFullShadeNeedsAnimation = false;
}
- protected StackScrollAlgorithm createStackScrollAlgorithm(Context context) {
- return new StackScrollAlgorithm(context, this);
- }
-
/**
* @return Whether a y coordinate is inside the content.
*/
@@ -5111,9 +5130,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 +6449,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..19abfa8 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,18 +27,20 @@
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;
-import androidx.dynamicanimation.animation.DynamicAnimation;
-
import com.android.app.animation.Interpolators;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.dynamicanimation.animation.DynamicAnimation;
import com.android.systemui.res.R;
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 +85,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 +109,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 +552,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 +736,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 +826,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/notification/stack/ViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java
index 2ef6f36..29dbeb2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java
@@ -30,10 +30,9 @@
import android.view.View;
import android.view.animation.Interpolator;
-import androidx.dynamicanimation.animation.DynamicAnimation;
-import androidx.dynamicanimation.animation.SpringAnimation;
-
import com.android.app.animation.Interpolators;
+import com.android.internal.dynamicanimation.animation.DynamicAnimation;
+import com.android.internal.dynamicanimation.animation.SpringAnimation;
import com.android.systemui.Dumpable;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.notification.AnimatableProperty;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
index a7305f7..9c855e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
@@ -49,6 +49,9 @@
/** Max alpha for this view */
fun setMaxAlpha(alpha: Float)
+ /** Set whether this view is occluded by something else. */
+ fun setOccluded(isOccluded: Boolean)
+
/** Sets a clipping shape, which defines the drawable area of this view. */
fun setClippingShape(shape: ShadeScrimShape?)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
index a4e39cb..653344a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
@@ -86,6 +86,8 @@
.collectTraced { view.setClippingShape(it) }
}
+ launch { viewModel.isOccluded.collectTraced { view.setOccluded(it) } }
+
launch { viewModel.maxAlpha.collectTraced { view.setMaxAlpha(it) } }
launch { viewModel.shadeScrollState.collect { view.setScrollState(it) } }
launch {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
index 1dbaf2f..a277597 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
@@ -24,7 +24,9 @@
import com.android.compose.animation.scene.ObservableTransitionState.Idle
import com.android.compose.animation.scene.ObservableTransitionState.Transition
import com.android.compose.animation.scene.ObservableTransitionState.Transition.ChangeScene
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
+import com.android.systemui.bouncer.domain.interactor.BouncerInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.lifecycle.ExclusiveActivatable
@@ -70,6 +72,7 @@
private val stackAppearanceInteractor: NotificationStackAppearanceInteractor,
shadeInteractor: ShadeInteractor,
shadeModeInteractor: ShadeModeInteractor,
+ bouncerInteractor: BouncerInteractor,
private val remoteInputInteractor: RemoteInputInteractor,
private val sceneInteractor: SceneInteractor,
// TODO(b/336364825) Remove Lazy when SceneContainerFlag is released -
@@ -131,12 +134,15 @@
private fun expandFractionDuringOverlayTransition(
transition: Transition,
currentScene: SceneKey,
+ currentOverlays: Set<OverlayKey>,
shadeExpansion: Float,
): Float {
return if (currentScene == Scenes.Lockscreen) {
1f
} else if (transition.isTransitioningFromOrTo(Overlays.NotificationsShade)) {
shadeExpansion
+ } else if (Overlays.NotificationsShade in currentOverlays) {
+ 1f
} else {
0f
}
@@ -161,12 +167,13 @@
shadeInteractor.qsExpansion,
shadeModeInteractor.shadeMode,
sceneInteractor.transitionState,
- ) { shadeExpansion, qsExpansion, _, transitionState ->
+ sceneInteractor.currentOverlays,
+ ) { shadeExpansion, qsExpansion, _, transitionState, currentOverlays ->
when (transitionState) {
is Idle ->
if (
expandedInScene(transitionState.currentScene) ||
- Overlays.NotificationsShade in transitionState.currentOverlays
+ Overlays.NotificationsShade in currentOverlays
) {
1f
} else {
@@ -182,12 +189,14 @@
expandFractionDuringOverlayTransition(
transition = transitionState,
currentScene = transitionState.currentScene,
+ currentOverlays = currentOverlays,
shadeExpansion = shadeExpansion,
)
is Transition.ReplaceOverlay ->
expandFractionDuringOverlayTransition(
transition = transitionState,
currentScene = transitionState.currentScene,
+ currentOverlays = currentOverlays,
shadeExpansion = shadeExpansion,
)
}
@@ -198,6 +207,12 @@
val qsExpandFraction: Flow<Float> =
shadeInteractor.qsExpansion.dumpWhileCollecting("qsExpandFraction")
+ val isOccluded: Flow<Boolean> =
+ bouncerInteractor.bouncerExpansion
+ .map { it == 1f }
+ .distinctUntilChanged()
+ .dumpWhileCollecting("isOccluded")
+
/** Blur radius to be applied to Notifications. */
fun blurRadius(maxBlurRadius: Flow<Int>) =
combine(blurFraction, maxBlurRadius) { fraction, maxRadius -> fraction * maxRadius }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
index 33cc62c..9d55e1d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
@@ -21,6 +21,7 @@
import androidx.annotation.VisibleForTesting
import com.android.app.tracing.coroutines.flow.flowName
import com.android.systemui.Flags.glanceableHubV2
+import com.android.systemui.bouncer.domain.interactor.BouncerInteractor
import com.android.systemui.common.shared.model.NotificationContainerBounds
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
@@ -106,7 +107,6 @@
import kotlinx.coroutines.flow.combineTransform
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
-import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
@@ -132,6 +132,7 @@
private val keyguardInteractor: KeyguardInteractor,
private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
private val shadeInteractor: ShadeInteractor,
+ private val bouncerInteractor: BouncerInteractor,
shadeModeInteractor: ShadeModeInteractor,
notificationStackAppearanceInteractor: NotificationStackAppearanceInteractor,
private val alternateBouncerToGoneTransitionViewModel:
@@ -516,8 +517,13 @@
combineTransform(
shadeInteractor.shadeExpansion,
shadeInteractor.qsExpansion,
- ) { shadeExpansion, qsExpansion ->
- if (qsExpansion == 1f) {
+ bouncerInteractor.bouncerExpansion,
+ ) { shadeExpansion, qsExpansion, bouncerExpansion ->
+ if (bouncerExpansion == 1f) {
+ emit(0f)
+ } else if (bouncerExpansion > 0f) {
+ emit(1 - bouncerExpansion)
+ } else if (qsExpansion == 1f) {
// Ensure HUNs will be visible in QS shade (at least while
// unlocked)
emit(1f)
@@ -526,19 +532,36 @@
emit(1f - qsExpansion)
}
}
- Split -> isAnyExpanded.filter { it }.map { 1f }
+ Split ->
+ combineTransform(isAnyExpanded, bouncerInteractor.bouncerExpansion) {
+ isAnyExpanded,
+ bouncerExpansion ->
+ if (bouncerExpansion == 1f) {
+ emit(0f)
+ } else if (bouncerExpansion > 0f) {
+ emit(1 - bouncerExpansion)
+ } else if (isAnyExpanded) {
+ emit(1f)
+ }
+ }
Dual ->
combineTransform(
shadeModeInteractor.isShadeLayoutWide,
headsUpNotificationInteractor.get().isHeadsUpOrAnimatingAway,
shadeInteractor.shadeExpansion,
shadeInteractor.qsExpansion,
+ bouncerInteractor.bouncerExpansion,
) {
isShadeLayoutWide,
isHeadsUpOrAnimatingAway,
shadeExpansion,
- qsExpansion ->
- if (isShadeLayoutWide) {
+ qsExpansion,
+ bouncerExpansion ->
+ if (bouncerExpansion == 1f) {
+ emit(0f)
+ } else if (bouncerExpansion > 0f) {
+ emit(1 - bouncerExpansion)
+ } else if (isShadeLayoutWide) {
if (shadeExpansion > 0f) {
emit(1f)
}
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 8b0f7c4..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
@@ -155,8 +155,7 @@
},
)
},
- accessibilityParams =
- AccessibilityParams(label = "", currentStateDescription = "", disabledMessage = ""),
+ accessibilityParams = AccessibilityParams(label = sliderStateModel.label),
modifier =
modifier.pointerInput(Unit) {
coroutineScope {
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/ui/slider/Slider.kt b/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt
index d3562e2..720d550 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/ui/slider/Slider.kt
@@ -250,8 +250,8 @@
data class AccessibilityParams(
val label: String,
- val currentStateDescription: String?,
- val disabledMessage: String?,
+ val currentStateDescription: String? = null,
+ val disabledMessage: String? = null,
)
sealed interface Haptics {
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt b/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
index 33e1929..952d40e 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
@@ -17,8 +17,13 @@
package com.android.systemui.wallpapers
import android.app.Flags
+import android.content.res.Configuration.UI_MODE_NIGHT_MASK
+import android.content.res.Configuration.UI_MODE_NIGHT_YES
import android.graphics.Canvas
+import android.graphics.Color
import android.graphics.Paint
+import android.graphics.PorterDuff
+import android.graphics.PorterDuffXfermode
import android.graphics.RadialGradient
import android.graphics.Shader
import android.service.wallpaper.WallpaperService
@@ -74,9 +79,9 @@
.toFloat()
val totalHeight = destRectF.height() + (offsetPx * 2)
val leftCenterX = -offsetPx
- val leftCenterY = -offsetPx
+ val leftCenterY = totalHeight - offsetPx
val rightCenterX = offsetPx + destRectF.width()
- val rightCenterY = totalHeight - offsetPx
+ val rightCenterY = -offsetPx
val radius = (destRectF.width() / 2) + offsetPx
canvas.drawCircle(
@@ -112,6 +117,28 @@
)
},
)
+
+ val isDarkMode =
+ context.resources.configuration.uiMode and UI_MODE_NIGHT_MASK ==
+ UI_MODE_NIGHT_YES
+ val maskColor =
+ ColorUtils.setAlphaComponent(
+ if (isDarkMode) Color.BLACK else Color.WHITE,
+ /* alpha= */ 87, // 0.34f * 255
+ )
+ val maskPaint =
+ Paint().apply {
+ xfermode =
+ PorterDuffXfermode(
+ if (isDarkMode) {
+ PorterDuff.Mode.DARKEN
+ } else {
+ PorterDuff.Mode.LIGHTEN
+ }
+ )
+ color = maskColor
+ }
+ canvas.drawRect(destRectF, maskPaint)
} catch (exception: IllegalStateException) {
Log.d(TAG, "Fail to draw in the canvas", exception)
} finally {
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/keyguard/ClockEventControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
index f822ee9..f18d73d 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
@@ -194,7 +194,7 @@
@Test
fun clockSet_validateInitialization() {
- verify(clock).initialize(any(), anyFloat(), anyFloat())
+ verify(clock).initialize(any(), anyFloat(), anyFloat(), any())
}
@Test
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/shade/ShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
index f3af794f..1269b23 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
@@ -390,30 +390,12 @@
fun testControllersCreatedAndInitialized() {
verify(variableDateViewController).init()
- verify(batteryMeterViewController).init()
- verify(batteryMeterViewController).ignoreTunerUpdates()
-
val inOrder = Mockito.inOrder(mShadeCarrierGroupControllerBuilder)
inOrder.verify(mShadeCarrierGroupControllerBuilder).setShadeCarrierGroup(carrierGroup)
inOrder.verify(mShadeCarrierGroupControllerBuilder).build()
}
@Test
- fun batteryModeControllerCalledWhenQsExpandedFractionChanges() {
- whenever(qsBatteryModeController.getBatteryMode(Mockito.same(null), eq(0f)))
- .thenReturn(BatteryMeterView.MODE_ON)
- whenever(qsBatteryModeController.getBatteryMode(Mockito.same(null), eq(1f)))
- .thenReturn(BatteryMeterView.MODE_ESTIMATE)
- shadeHeaderController.qsVisible = true
-
- val times = 10
- repeat(times) { shadeHeaderController.qsExpandedFraction = it / (times - 1).toFloat() }
-
- verify(batteryMeterView).setPercentShowMode(BatteryMeterView.MODE_ON)
- verify(batteryMeterView).setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
- }
-
- @Test
fun testClockPivotLtr() {
val width = 200
whenever(clock.width).thenReturn(width)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt
index 3c4aecc..f8b35a1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt
@@ -29,6 +29,7 @@
import com.android.systemui.dump.DumpManager
import com.android.systemui.privacy.OngoingPrivacyChip
import com.android.systemui.statusbar.BatteryStatusChip
+import com.android.systemui.statusbar.core.NewStatusBarIcons
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.AnimatingIn
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.AnimatingOut
@@ -118,11 +119,11 @@
}
@Test
- fun testBatteryStatusEvent_standardAnimationLifecycle() = runTest {
+ fun testStatusEvent_standardAnimationLifecycle() = runTest {
// Instantiate class under test with TestScope from runTest
- initializeSystemStatusAnimationScheduler(testScope = this)
+ initializeSystemStatusAnimationScheduler(this)
- val batteryChip = createAndScheduleFakeBatteryEvent()
+ val eventChip = createAndScheduleFakeEvent()
// assert that animation is queued
assertEquals(AnimationQueued, systemStatusAnimationScheduler.animationState.value)
@@ -131,8 +132,7 @@
advanceTimeBy(DEBOUNCE_DELAY + 1)
// status chip starts animating in after debounce delay
assertEquals(AnimatingIn, systemStatusAnimationScheduler.animationState.value)
- assertEquals(0f, batteryChip.contentView.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
verify(listener, times(1)).onSystemEventAnimationBegin()
// skip appear animation
@@ -140,23 +140,20 @@
advanceTimeBy(APPEAR_ANIMATION_DURATION)
// assert that status chip is visible
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
- assertEquals(1f, batteryChip.contentView.alpha)
- assertEquals(1f, batteryChip.view.alpha)
+ assertEquals(1f, eventChip.view.alpha)
// skip status chip display time
advanceTimeBy(DISPLAY_LENGTH + 1)
// assert that it is still visible but switched to the AnimatingOut state
assertEquals(AnimatingOut, systemStatusAnimationScheduler.animationState.value)
- assertEquals(1f, batteryChip.contentView.alpha)
- assertEquals(1f, batteryChip.view.alpha)
+ assertEquals(1f, eventChip.view.alpha)
verify(listener, times(1)).onSystemEventAnimationFinish(false)
// skip disappear animation
animatorTestRule.advanceTimeBy(DISAPPEAR_ANIMATION_DURATION)
// assert that it is not visible anymore
assertEquals(Idle, systemStatusAnimationScheduler.animationState.value)
- assertEquals(0f, batteryChip.contentView.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
}
/** Regression test for b/294104969. */
@@ -226,8 +223,8 @@
initializeSystemStatusAnimationScheduler(testScope = this)
// create and schedule low priority event
- val batteryChip = createAndScheduleFakeBatteryEvent()
- batteryChip.view.alpha = 0f
+ val eventChip = createAndScheduleFakeEvent()
+ eventChip.view.alpha = 0f
// assert that animation is queued
assertEquals(AnimationQueued, systemStatusAnimationScheduler.animationState.value)
@@ -244,7 +241,7 @@
// high priority status chip is visible while low priority status chip is not visible
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
assertEquals(1f, privacyChip.view.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
}
@Test
@@ -253,14 +250,14 @@
initializeSystemStatusAnimationScheduler(testScope = this)
// create and schedule low priority event
- val batteryChip = createAndScheduleFakeBatteryEvent()
+ val eventChip = createAndScheduleFakeEvent()
// fast forward to RunningChipAnim state
fastForwardAnimationToState(RunningChipAnim)
// assert that chip is displayed
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
- assertEquals(1f, batteryChip.view.alpha)
+ assertEquals(1f, eventChip.view.alpha)
// create and schedule high priority event
val privacyChip = createAndScheduleFakePrivacyEvent()
@@ -284,7 +281,7 @@
// high priority status chip is visible while low priority status chip is not visible
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
assertEquals(1f, privacyChip.view.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
}
@Test
@@ -293,7 +290,7 @@
initializeSystemStatusAnimationScheduler(testScope = this)
// create and schedule low priority event
- val batteryChip = createAndScheduleFakeBatteryEvent()
+ val eventChip = createAndScheduleFakeEvent()
// skip debounce delay
advanceTimeBy(DEBOUNCE_DELAY + 1)
@@ -331,7 +328,7 @@
// high priority status chip is visible while low priority status chip is not visible
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
assertEquals(1f, privacyChip.view.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
}
@Test
@@ -343,8 +340,8 @@
val privacyChip = createAndScheduleFakePrivacyEvent()
// create and schedule low priority event
- val batteryChip = createAndScheduleFakeBatteryEvent()
- batteryChip.view.alpha = 0f
+ val eventChip = createAndScheduleFakeEvent()
+ eventChip.view.alpha = 0f
// skip debounce delay and appear animation
advanceTimeBy(DEBOUNCE_DELAY + APPEAR_ANIMATION_DURATION + 1)
@@ -353,7 +350,7 @@
// high priority status chip is visible while low priority status chip is not visible
assertEquals(RunningChipAnim, systemStatusAnimationScheduler.animationState.value)
assertEquals(1f, privacyChip.view.alpha)
- assertEquals(0f, batteryChip.view.alpha)
+ assertEquals(0f, eventChip.view.alpha)
}
@Test
@@ -649,12 +646,17 @@
systemStatusAnimationScheduler.onStatusEvent(fakeEvent)
}
- private fun createAndScheduleFakeBatteryEvent(): BatteryStatusChip {
- val batteryChip = BatteryStatusChip(mContext)
- val fakeBatteryEvent =
- FakeStatusEvent(viewCreator = { batteryChip }, priority = 50, forceVisible = false)
- systemStatusAnimationScheduler.onStatusEvent(fakeBatteryEvent)
- return batteryChip
+ private fun createAndScheduleFakeEvent(): BackgroundAnimatableView {
+ val eventChip =
+ if (NewStatusBarIcons.isEnabled) {
+ BGImageView(mContext)
+ } else {
+ BatteryStatusChip(mContext)
+ }
+ val fakeStatusEvent =
+ FakeStatusEvent(viewCreator = { eventChip }, priority = 50, forceVisible = false)
+ systemStatusAnimationScheduler.onStatusEvent(fakeStatusEvent)
+ return eventChip
}
private fun initializeSystemStatusAnimationScheduler(
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/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/tests/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
index 804e7d63..6ae6fe6 100644
--- a/packages/SystemUI/tests/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/wallpapers/GradientColorWallpaperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
index b4fbaad..5f34420 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
@@ -18,7 +18,6 @@
import android.app.Flags
import android.content.Context
-import android.content.res.Resources
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
@@ -43,6 +42,7 @@
import org.mockito.Mockito.spy
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
+import org.mockito.kotlin.doReturn
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyZeroInteractions
@@ -61,23 +61,20 @@
@Mock private lateinit var mockContext: Context
- @Mock private lateinit var mockResources: Resources
-
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
+ val spyResources = spy(context.resources)
+
whenever(surfaceHolder.surface).thenReturn(surface)
whenever(surfaceHolder.surfaceFrame).thenReturn(surfaceFrame)
whenever(surface.lockHardwareCanvas()).thenReturn(canvas)
whenever(mockContext.getColor(anyInt())).thenReturn(1)
- whenever(mockContext.resources).thenReturn(mockResources)
- whenever(
- mockResources.getDimensionPixelOffset(
- eq(R.dimen.gradient_color_wallpaper_center_offset)
- )
- )
- .thenReturn(OFFSET_PX)
+ whenever(mockContext.resources).thenReturn(spyResources)
+ doReturn(OFFSET_PX)
+ .`when`(spyResources)
+ .getDimensionPixelOffset(eq(R.dimen.gradient_color_wallpaper_center_offset))
}
private fun createGradientColorWallpaperEngine(): Engine {
@@ -106,7 +103,8 @@
engine.onSurfaceRedrawNeeded(surfaceHolder)
- verify(canvas).drawRect(any<RectF>(), any<Paint>())
+ // One rect for the background, one rect for the foreground mask.
+ verify(canvas, times(2)).drawRect(any<RectF>(), any<Paint>())
verify(canvas, times(2)).drawCircle(anyFloat(), anyFloat(), anyFloat(), any<Paint>())
}
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/bouncer/domain/interactor/BouncerInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt
index d27ecce..94d27f7 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractorKosmos.kt
@@ -28,6 +28,7 @@
import com.android.systemui.log.sessionTracker
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneBackInteractor
+import com.android.systemui.scene.domain.interactor.sceneInteractor
val Kosmos.bouncerInteractor by Fixture {
BouncerInteractor(
@@ -39,6 +40,7 @@
powerInteractor = powerInteractor,
uiEventLogger = uiEventLogger,
sessionTracker = sessionTracker,
+ sceneInteractor = sceneInteractor,
sceneBackInteractor = sceneBackInteractor,
configurationInteractor = configurationInteractor,
)
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelKosmos.kt
deleted file mode 100644
index 43d3eb7..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/ui/viewmodel/CommunalToDreamButtonViewModelKosmos.kt
+++ /dev/null
@@ -1,39 +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.communal.ui.viewmodel
-
-import android.service.dream.dreamManager
-import com.android.internal.logging.uiEventLogger
-import com.android.systemui.communal.domain.interactor.communalPrefsInteractor
-import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.kosmos.testDispatcher
-import com.android.systemui.plugins.activityStarter
-import com.android.systemui.statusbar.policy.batteryController
-
-val Kosmos.communalToDreamButtonViewModel by
- Kosmos.Fixture {
- CommunalToDreamButtonViewModel(
- backgroundContext = testDispatcher,
- batteryController = batteryController,
- prefsInteractor = communalPrefsInteractor,
- settingsInteractor = communalSettingsInteractor,
- activityStarter = activityStarter,
- dreamManager = dreamManager,
- uiEventLogger = uiEventLogger,
- )
- }
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/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelKosmos.kt
index b233d3f..c6f55f0 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GlanceableHubToPrimaryBouncerTransitionViewModelKosmos.kt
@@ -16,16 +16,20 @@
package com.android.systemui.keyguard.ui.viewmodel
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.blurConfig
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.statusbar.policy.keyguardStateController
val Kosmos.glanceableHubToPrimaryBouncerTransitionViewModel by Fixture {
GlanceableHubToPrimaryBouncerTransitionViewModel(
animationFlow = keyguardTransitionAnimationFlow,
blurConfig = blurConfig,
communalSettingsInteractor = communalSettingsInteractor,
+ communalSceneInteractor = communalSceneInteractor,
+ keyguardStateController = keyguardStateController,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
index 02cf1f5..dff9f3a 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
@@ -29,6 +29,7 @@
import com.android.systemui.communal.data.repository.fakeCommunalSceneRepository
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.communal.ui.viewmodel.communalTransitionViewModel
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
@@ -87,6 +88,7 @@
import com.android.systemui.statusbar.policy.configurationController
import com.android.systemui.statusbar.policy.data.repository.fakeDeviceProvisioningRepository
import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor
+import com.android.systemui.statusbar.policy.keyguardStateController
import com.android.systemui.statusbar.ui.viewmodel.keyguardStatusBarViewModel
import com.android.systemui.util.time.systemClock
import com.android.systemui.volume.domain.interactor.volumeDialogInteractor
@@ -126,6 +128,7 @@
val keyguardInteractor by lazy { kosmos.keyguardInteractor }
val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository }
val keyguardTransitionInteractor by lazy { kosmos.keyguardTransitionInteractor }
+ val keyguardStateController by lazy { kosmos.keyguardStateController }
val keyguardStatusBarViewModel by lazy { kosmos.keyguardStatusBarViewModel }
val powerRepository by lazy { kosmos.fakePowerRepository }
val clock by lazy { kosmos.systemClock }
@@ -147,6 +150,7 @@
val deviceUnlockedInteractor by lazy { kosmos.deviceUnlockedInteractor }
val communalInteractor by lazy { kosmos.communalInteractor }
val communalSceneInteractor by lazy { kosmos.communalSceneInteractor }
+ val communalSettingsInteractor by lazy { kosmos.communalSettingsInteractor }
val sceneContainerPlugin by lazy { kosmos.sceneContainerPlugin }
val deviceProvisioningInteractor by lazy { kosmos.deviceProvisioningInteractor }
val fakeDeviceProvisioningRepository by lazy { kosmos.fakeDeviceProvisioningRepository }
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/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/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt
similarity index 66%
copy from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt
index 231fb2d..085d386 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/VisibilityLocationProviderKosmos.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * 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.
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package com.android.systemui.dagger.qualifiers
+package com.android.systemui.statusbar.notification
-import javax.inject.Qualifier
+import com.android.systemui.kosmos.Kosmos
+import org.mockito.kotlin.mock
-@Qualifier
-@MustBeDocumented
-@Retention(AnnotationRetention.RUNTIME)
-annotation class NotifInflation
+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/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt
similarity index 63%
copy from packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt
index 231fb2d..6645cdc 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/NotifInflation.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorLoggerKosmos.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * 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.
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dagger.qualifiers
+package com.android.systemui.statusbar.notification.collection.coordinator
-import javax.inject.Qualifier
+import com.android.systemui.kosmos.Kosmos
+import org.mockito.kotlin.mock
-@Qualifier
-@MustBeDocumented
-@Retention(AnnotationRetention.RUNTIME)
-annotation class NotifInflation
+val Kosmos.visualStabilityCoordinatorLogger: VisualStabilityCoordinatorLogger by
+ Kosmos.Fixture { mock() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt
index 2523975..7ccbdb7 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt
@@ -19,9 +19,11 @@
import com.android.systemui.accessibility.domain.interactor.accessibilityInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor
val Kosmos.activatableNotificationViewModel by Fixture {
ActivatableNotificationViewModel.invoke(
a11yInteractor = accessibilityInteractor,
+ windowRootViewBlurInteractor = windowRootViewBlurInteractor,
)
}
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/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
index 167b11d..87ce501 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.stack.ui.viewmodel
+import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
import com.android.systemui.dump.dumpManager
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
@@ -32,6 +33,7 @@
stackAppearanceInteractor = notificationStackAppearanceInteractor,
shadeInteractor = shadeInteractor,
shadeModeInteractor = shadeModeInteractor,
+ bouncerInteractor = bouncerInteractor,
remoteInputInteractor = remoteInputInteractor,
sceneInteractor = sceneInteractor,
keyguardInteractor = { keyguardInteractor },
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
index 17ef208..85fe3d9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.stack.ui.viewmodel
import android.content.applicationContext
+import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
import com.android.systemui.common.ui.domain.interactor.configurationInteractor
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.dump.dumpManager
@@ -74,6 +75,7 @@
keyguardInteractor = keyguardInteractor,
keyguardTransitionInteractor = keyguardTransitionInteractor,
shadeInteractor = shadeInteractor,
+ bouncerInteractor = bouncerInteractor,
shadeModeInteractor = shadeModeInteractor,
notificationStackAppearanceInteractor = notificationStackAppearanceInteractor,
alternateBouncerToGoneTransitionViewModel = alternateBouncerToGoneTransitionViewModel,
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..169f887 100644
--- a/proto/src/metrics_constants/OWNERS
+++ b/proto/src/metrics_constants/OWNERS
@@ -1,4 +1,2 @@
cwren@android.com
-yanglu@google.com
yaochen@google.com
-yro@google.com
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/tools/hoststubgen/src/com/android/hoststubgen/asm/AsmUtils.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/asm/AsmUtils.kt
index 735635c..b41ce0f 100644
--- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/asm/AsmUtils.kt
+++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/asm/AsmUtils.kt
@@ -268,18 +268,45 @@
}
/**
+ * Write bytecode to pop the 2 uninitialized instances out of the stack
+ * after performing constructor redirection.
+ */
+fun adjustStackForConstructorRedirection(writer: MethodVisitor) {
+ // Stack: { uninitialized, uninitialized, obj }
+ writer.visitInsn(Opcodes.SWAP)
+ // Stack: { uninitialized, obj, uninitialized }
+ writer.visitInsn(Opcodes.POP)
+ // Stack: { uninitialized, obj }
+ writer.visitInsn(Opcodes.SWAP)
+ // Stack: { obj, uninitialized }
+ writer.visitInsn(Opcodes.POP)
+ // Stack: { obj }
+
+ // We end up with only the desired object on the stack
+}
+
+/**
* Given a method descriptor, insert an [argType] as the first argument to it.
*/
fun prependArgTypeToMethodDescriptor(methodDescriptor: String, classInternalName: String): String {
val returnType = Type.getReturnType(methodDescriptor)
val argTypes = Type.getArgumentTypes(methodDescriptor).toMutableList()
- argTypes.add(0, Type.getType("L" + classInternalName + ";"))
+ argTypes.add(0, Type.getType("L$classInternalName;"))
return Type.getMethodDescriptor(returnType, *argTypes.toTypedArray())
}
/**
+ * Given a method descriptor, change the return type to [classInternalName].
+ */
+fun changeMethodDescriptorReturnType(methodDescriptor: String, classInternalName: String): String {
+ val argTypes = Type.getArgumentTypes(methodDescriptor)
+ val returnType = Type.getType("L$classInternalName;")
+ return Type.getMethodDescriptor(returnType, *argTypes)
+}
+
+/**
* Return the "visibility" modifier from an `access` integer.
*
* (see https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.1-200-E.1)
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/TextFileFilterPolicyParser.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt
index d0c97c0..dd353e9 100644
--- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt
+++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt
@@ -100,7 +100,6 @@
methodName: String,
methodDesc: String,
replaceSpec: TextFilePolicyMethodReplaceFilter.MethodCallReplaceSpec,
- policy: FilterPolicyWithReason,
)
}
@@ -286,9 +285,10 @@
methodName: String,
methodDesc: String,
replaceSpec: TextFilePolicyMethodReplaceFilter.MethodCallReplaceSpec,
- policy: FilterPolicyWithReason,
) {
- imf.setPolicyForMethod(className, methodName, methodDesc, policy)
+ // Keep the source method, because the target method may call it.
+ imf.setPolicyForMethod(className, methodName, methodDesc,
+ FilterPolicy.Keep.withReason(FILTER_REASON))
methodReplaceSpec.add(replaceSpec)
}
}
@@ -642,7 +642,6 @@
methodName,
signature,
spec,
- policyWithReason,
)
} else {
// It's an in-class replace.
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/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt
index 70e7d46..b8a3576 100644
--- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt
+++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt
@@ -17,7 +17,10 @@
import com.android.hoststubgen.asm.CLASS_INITIALIZER_DESC
import com.android.hoststubgen.asm.CLASS_INITIALIZER_NAME
+import com.android.hoststubgen.asm.CTOR_NAME
import com.android.hoststubgen.asm.ClassNodes
+import com.android.hoststubgen.asm.adjustStackForConstructorRedirection
+import com.android.hoststubgen.asm.changeMethodDescriptorReturnType
import com.android.hoststubgen.asm.prependArgTypeToMethodDescriptor
import com.android.hoststubgen.asm.writeByteCodeToPushArguments
import com.android.hoststubgen.asm.writeByteCodeToReturn
@@ -33,6 +36,7 @@
import org.objectweb.asm.MethodVisitor
import org.objectweb.asm.Opcodes
import org.objectweb.asm.Opcodes.INVOKEINTERFACE
+import org.objectweb.asm.Opcodes.INVOKESPECIAL
import org.objectweb.asm.Opcodes.INVOKESTATIC
import org.objectweb.asm.Opcodes.INVOKEVIRTUAL
import org.objectweb.asm.Type
@@ -376,53 +380,90 @@
val callerMethodName: String,
next: MethodVisitor?,
) : MethodVisitor(OPCODE_VERSION, next) {
- override fun visitMethodInsn(
+
+ private fun doReplace(
opcode: Int,
- owner: String?,
- name: String?,
- descriptor: String?,
- isInterface: Boolean,
- ) {
+ owner: String,
+ name: String,
+ descriptor: String,
+ ): Boolean {
when (opcode) {
INVOKESTATIC, INVOKEVIRTUAL, INVOKEINTERFACE -> {}
- else -> {
- // Don't touch other opcodes.
- super.visitMethodInsn(opcode, owner, name, descriptor, isInterface)
- return
- }
+ // We only support INVOKESPECIAL when replacing constructors.
+ INVOKESPECIAL -> if (name != CTOR_NAME) return false
+ // Don't touch other opcodes.
+ else -> return false
}
+
val to = filter.getMethodCallReplaceTo(
- currentClassName, callerMethodName, owner!!, name!!, descriptor!!
+ currentClassName, callerMethodName, owner, name, descriptor
)
if (to == null
// Don't replace if the target is the callsite.
|| (to.className == currentClassName && to.methodName == callerMethodName)
) {
- super.visitMethodInsn(opcode, owner, name, descriptor, isInterface)
- return
+ return false
}
- // Replace the method call with a (static) call to the target method.
- // If it's a non-static call, the target method's first argument will receive "this".
- // (Because of that, we don't need to manipulate the stack. Just replace the
- // method call.)
+ if (opcode != INVOKESPECIAL) {
+ // It's either a static method call or virtual method call.
+ // Either way, we don't manipulate the stack and send the original arguments
+ // as is to the target method.
+ //
+ // If the call is a virtual call (INVOKEVIRTUAL or INVOKEINTERFACE), then
+ // the first argument in the stack is the "this" object, so the target
+ // method must have an extra argument as the first argument to receive it.
+ // We update the method descriptor with prependArgTypeToMethodDescriptor()
+ // to absorb this difference.
- val toDesc = if (opcode == INVOKESTATIC) {
- // Static call to static call, no need to change the desc.
- descriptor
+ val toDesc = if (opcode == INVOKESTATIC) {
+ descriptor
+ } else {
+ prependArgTypeToMethodDescriptor(descriptor, owner)
+ }
+
+ mv.visitMethodInsn(
+ INVOKESTATIC,
+ to.className,
+ to.methodName,
+ toDesc,
+ false
+ )
} else {
- // Need to prepend the "this" type to the descriptor.
- prependArgTypeToMethodDescriptor(descriptor, owner)
+ // Because an object initializer does not return a value, the newly created
+ // but uninitialized object will be dup-ed at the bottom of the stack.
+ // We first call the target method to consume the constructor arguments at the top.
+
+ val toDesc = changeMethodDescriptorReturnType(descriptor, owner)
+
+ // Before stack: { uninitialized, uninitialized, args... }
+ mv.visitMethodInsn(
+ INVOKESTATIC,
+ to.className,
+ to.methodName,
+ toDesc,
+ false
+ )
+ // After stack: { uninitialized, uninitialized, obj }
+
+ // Next we pop the 2 uninitialized instances out of the stack.
+ adjustStackForConstructorRedirection(mv)
}
- mv.visitMethodInsn(
- INVOKESTATIC,
- to.className,
- to.methodName,
- toDesc,
- false
- )
+ return true
+ }
+
+ override fun visitMethodInsn(
+ opcode: Int,
+ owner: String,
+ name: String,
+ descriptor: String,
+ isInterface: Boolean,
+ ) {
+ if (!doReplace(opcode, owner, name, descriptor)) {
+ super.visitMethodInsn(opcode, owner, name, descriptor, isInterface)
+ }
}
}
}
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..2b942a9 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
@@ -1883,6 +1883,42 @@
InnerClasses:
public static #x= #x of #x; // Nested=class com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested of class com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 65
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 1, attributes: 3
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 0 10 1 i I
+}
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -1891,7 +1927,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 3
+ interfaces: 0, fields: 0, methods: 4, attributes: 3
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo();
@@ -1937,10 +1973,28 @@
Start Length Slot Name Signature
0 4 0 a I
0 4 1 b I
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 11 0 i I
}
SourceFile: "TinyFrameworkMethodCallReplace.java"
NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.class
Compiled from "TinyFrameworkMethodCallReplace.java"
@@ -1950,7 +2004,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 5, attributes: 5
+ interfaces: 0, fields: 0, methods: 6, attributes: 5
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace();
@@ -2008,6 +2062,21 @@
x: ireturn
LineNumberTable:
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=3, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 9 0 i I
+
private static int originalAdd(int, int);
descriptor: (II)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
@@ -2046,6 +2115,7 @@
android.hosttest.annotation.HostSideTestWholeClassKeep
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
BootstrapMethods:
x: #x REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
@@ -2053,8 +2123,9 @@
#x REF_invokeStatic com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.lambda$nonStaticMethodCallReplaceTester$0:(Ljava/util/concurrent/atomic/AtomicBoolean;)V
#x ()V
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
- public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
+ public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -3198,7 +3269,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 +3300,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 +3329,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 +3365,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..d493ad1 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
@@ -2002,6 +2002,51 @@
#x ()Ljava/lang/Integer;
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 65
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 1, attributes: 4
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 0 10 1 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+}
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -2010,7 +2055,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 4
+ interfaces: 0, fields: 0, methods: 4, attributes: 4
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo();
@@ -2065,9 +2110,30 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 11 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
- public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
SourceFile: "TinyFrameworkMethodCallReplace.java"
RuntimeVisibleAnnotations:
x: #x()
@@ -2081,7 +2147,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 4, attributes: 6
+ interfaces: 0, fields: 0, methods: 6, attributes: 6
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace();
@@ -2148,6 +2214,48 @@
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=3, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.newConstructorTester:(I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ x: swap
+ x: pop
+ x: swap
+ x: pop
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 13 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static int originalAdd(int, int);
+ descriptor: (II)I
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: iload_0
+ x: iload_1
+ x: iadd
+ x: iconst_1
+ x: isub
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 6 0 a I
+ 0 6 1 b I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
private static void lambda$nonStaticMethodCallReplaceTester$0(java.util.concurrent.atomic.AtomicBoolean);
descriptor: (Ljava/util/concurrent/atomic/AtomicBoolean;)V
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
@@ -2167,6 +2275,7 @@
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
SourceFile: "TinyFrameworkMethodCallReplace.java"
@@ -2184,6 +2293,7 @@
#x ()V
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -3392,7 +3502,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 +3539,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 +3996,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 +4020,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 +4037,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..8978a7a 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
@@ -2413,6 +2413,66 @@
#x ()Ljava/lang/Integer;
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 65
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 2, attributes: 4
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static {};
+ descriptor: ()V
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=2, locals=0, args_size=0
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ 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
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=4, locals=2, args_size=2
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: ldc #x // String <init>
+ x: ldc #x // String (I)V
+ 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: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 11 10 1 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+}
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -2421,7 +2481,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 4, attributes: 4
+ interfaces: 0, fields: 0, methods: 5, attributes: 4
Constant pool:
{
private static {};
@@ -2501,8 +2561,34 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ x: ldc #x // String newConstructorTester
+ x: ldc #x // String (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 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: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 11 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
SourceFile: "TinyFrameworkMethodCallReplace.java"
RuntimeVisibleAnnotations:
@@ -2517,7 +2603,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 5, attributes: 6
+ interfaces: 0, fields: 0, methods: 7, attributes: 6
Constant pool:
{
private static {};
@@ -2609,18 +2695,70 @@
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ x: ldc #x // String constructorReplaceTester
+ x: ldc #x // String (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 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: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.newConstructorTester:(I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ x: swap
+ x: pop
+ x: swap
+ x: pop
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 13 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static int originalAdd(int, int);
+ descriptor: (II)I
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=4, locals=2, args_size=2
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ x: ldc #x // String originalAdd
+ x: ldc #x // String (II)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: iload_1
+ x: iadd
+ x: iconst_1
+ x: isub
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 6 0 a I
+ 11 6 1 b I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
private static void lambda$nonStaticMethodCallReplaceTester$0(java.util.concurrent.atomic.AtomicBoolean);
descriptor: (Ljava/util/concurrent/atomic/AtomicBoolean;)V
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=4, locals=1, args_size=1
x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
- x: ldc #x // String lambda$nonStaticMethodCallReplaceTester$0
- x: ldc #x // String (Ljava/util/concurrent/atomic/AtomicBoolean;)V
+ x: ldc #x // String lambda$nonStaticMethodCallReplaceTester$0
+ x: ldc #x // String (Ljava/util/concurrent/atomic/AtomicBoolean;)V
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: aload_0
- x: invokestatic #x // Method java/lang/Thread.currentThread:()Ljava/lang/Thread;
+ x: invokestatic #x // Method java/lang/Thread.currentThread:()Ljava/lang/Thread;
x: invokevirtual #x // Method java/lang/Thread.isDaemon:()Z
x: invokevirtual #x // Method java/util/concurrent/atomic/AtomicBoolean.set:(Z)V
x: return
@@ -2633,6 +2771,7 @@
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
SourceFile: "TinyFrameworkMethodCallReplace.java"
@@ -2650,6 +2789,7 @@
#x ()V
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -4241,7 +4381,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 +4438,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 +5111,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 +5126,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 +5136,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 +5150,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 +5161,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 +5172,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..406c611 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
@@ -1883,6 +1883,42 @@
InnerClasses:
public static #x= #x of #x; // Nested=class com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested of class com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 61
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 1, attributes: 3
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 0 10 1 i I
+}
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -1891,7 +1927,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 3
+ interfaces: 0, fields: 0, methods: 4, attributes: 3
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo();
@@ -1937,10 +1973,28 @@
Start Length Slot Name Signature
0 4 0 a I
0 4 1 b I
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 11 0 i I
}
SourceFile: "TinyFrameworkMethodCallReplace.java"
NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.class
Compiled from "TinyFrameworkMethodCallReplace.java"
@@ -1950,7 +2004,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 5, attributes: 5
+ interfaces: 0, fields: 0, methods: 6, attributes: 5
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace();
@@ -2008,6 +2062,21 @@
x: ireturn
LineNumberTable:
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=3, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 9 0 i I
+
private static int originalAdd(int, int);
descriptor: (II)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
@@ -2046,6 +2115,7 @@
android.hosttest.annotation.HostSideTestWholeClassKeep
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
BootstrapMethods:
x: #x REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
@@ -2053,8 +2123,9 @@
#x REF_invokeStatic com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.lambda$nonStaticMethodCallReplaceTester$0:(Ljava/util/concurrent/atomic/AtomicBoolean;)V
#x ()V
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
- public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
+ public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -3219,7 +3290,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 +3321,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 +3350,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 +3386,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..6a8e488 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
@@ -2002,6 +2002,51 @@
#x ()Ljava/lang/Integer;
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 61
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 1, attributes: 4
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 0 10 1 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+}
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -2010,7 +2055,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 3, attributes: 4
+ interfaces: 0, fields: 0, methods: 4, attributes: 4
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo();
@@ -2065,9 +2110,30 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 11 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
- public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
SourceFile: "TinyFrameworkMethodCallReplace.java"
RuntimeVisibleAnnotations:
x: #x()
@@ -2081,7 +2147,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 4, attributes: 6
+ interfaces: 0, fields: 0, methods: 6, attributes: 6
Constant pool:
{
public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace();
@@ -2148,6 +2214,48 @@
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=3, locals=1, args_size=1
+ x: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.newConstructorTester:(I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ x: swap
+ x: pop
+ x: swap
+ x: pop
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 13 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static int originalAdd(int, int);
+ descriptor: (II)I
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=2, locals=2, args_size=2
+ x: iload_0
+ x: iload_1
+ x: iadd
+ x: iconst_1
+ x: isub
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 0 6 0 a I
+ 0 6 1 b I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
private static void lambda$nonStaticMethodCallReplaceTester$0(java.util.concurrent.atomic.AtomicBoolean);
descriptor: (Ljava/util/concurrent/atomic/AtomicBoolean;)V
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
@@ -2167,6 +2275,7 @@
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
SourceFile: "TinyFrameworkMethodCallReplace.java"
@@ -2184,6 +2293,7 @@
#x ()V
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -3422,7 +3532,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 +3569,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 +4026,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 +4050,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 +4067,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..d8e7632 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
@@ -2413,6 +2413,66 @@
#x ()Ljava/lang/Integer;
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkLambdas$Nested
+## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester.class
+ Compiled from "TinyFrameworkMethodCallReplace.java"
+public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester
+ minor version: 0
+ major version: 61
+ flags: (0x0021) ACC_PUBLIC, ACC_SUPER
+ this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ super_class: #x // java/lang/Object
+ interfaces: 0, fields: 1, methods: 2, attributes: 4
+Constant pool:
+{
+ public int i;
+ descriptor: I
+ flags: (0x0001) ACC_PUBLIC
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static {};
+ descriptor: ()V
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=2, locals=0, args_size=0
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ 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
+
+ public com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester(int);
+ descriptor: (I)V
+ flags: (0x0001) ACC_PUBLIC
+ Code:
+ stack=4, locals=2, args_size=2
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: ldc #x // String <init>
+ x: ldc #x // String (I)V
+ 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: aload_0
+ x: invokespecial #x // Method java/lang/Object."<init>":()V
+ x: aload_0
+ x: iload_1
+ x: putfield #x // Field i:I
+ x: return
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 10 0 this Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 11 10 1 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+}
+InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+SourceFile: "TinyFrameworkMethodCallReplace.java"
+RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+NestHost: class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.class
Compiled from "TinyFrameworkMethodCallReplace.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo
@@ -2421,7 +2481,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 4, attributes: 4
+ interfaces: 0, fields: 0, methods: 5, attributes: 4
Constant pool:
{
private static {};
@@ -2501,8 +2561,34 @@
RuntimeVisibleAnnotations:
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester newConstructorTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ x: ldc #x // String newConstructorTester
+ x: ldc #x // String (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 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: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: iconst_1
+ x: iadd
+ x: invokespecial #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester."<init>":(I)V
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 11 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
SourceFile: "TinyFrameworkMethodCallReplace.java"
RuntimeVisibleAnnotations:
@@ -2517,7 +2603,7 @@
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #x // com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
super_class: #x // java/lang/Object
- interfaces: 0, fields: 0, methods: 5, attributes: 6
+ interfaces: 0, fields: 0, methods: 7, attributes: 6
Constant pool:
{
private static {};
@@ -2609,18 +2695,70 @@
x: #x()
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+ public static com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester constructorReplaceTester(int);
+ descriptor: (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ flags: (0x0009) ACC_PUBLIC, ACC_STATIC
+ Code:
+ stack=4, locals=1, args_size=1
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ x: ldc #x // String constructorReplaceTester
+ x: ldc #x // String (I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ 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: new #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
+ x: dup
+ x: iload_0
+ x: invokestatic #x // Method com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo.newConstructorTester:(I)Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester;
+ x: swap
+ x: pop
+ x: swap
+ x: pop
+ x: areturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 13 0 i I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
+ private static int originalAdd(int, int);
+ descriptor: (II)I
+ flags: (0x000a) ACC_PRIVATE, ACC_STATIC
+ Code:
+ stack=4, locals=2, args_size=2
+ x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
+ x: ldc #x // String originalAdd
+ x: ldc #x // String (II)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: iload_1
+ x: iadd
+ x: iconst_1
+ x: isub
+ x: ireturn
+ LineNumberTable:
+ LocalVariableTable:
+ Start Length Slot Name Signature
+ 11 6 0 a I
+ 11 6 1 b I
+ RuntimeVisibleAnnotations:
+ x: #x()
+ com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
+
private static void lambda$nonStaticMethodCallReplaceTester$0(java.util.concurrent.atomic.AtomicBoolean);
descriptor: (Ljava/util/concurrent/atomic/AtomicBoolean;)V
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=4, locals=1, args_size=1
x: ldc #x // class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
- x: ldc #x // String lambda$nonStaticMethodCallReplaceTester$0
- x: ldc #x // String (Ljava/util/concurrent/atomic/AtomicBoolean;)V
+ x: ldc #x // String lambda$nonStaticMethodCallReplaceTester$0
+ x: ldc #x // String (Ljava/util/concurrent/atomic/AtomicBoolean;)V
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: aload_0
- x: invokestatic #x // Method java/lang/Thread.currentThread:()Ljava/lang/Thread;
+ x: invokestatic #x // Method java/lang/Thread.currentThread:()Ljava/lang/Thread;
x: invokevirtual #x // Method java/lang/Thread.isDaemon:()Z
x: invokevirtual #x // Method java/util/concurrent/atomic/AtomicBoolean.set:(Z)V
x: return
@@ -2633,6 +2771,7 @@
com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep
}
InnerClasses:
+ public static #x= #x of #x; // ConstructorTester=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static #x= #x of #x; // ReplaceTo=class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo of class com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace
public static final #x= #x of #x; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
SourceFile: "TinyFrameworkMethodCallReplace.java"
@@ -2650,6 +2789,7 @@
#x ()V
NestMembers:
com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ReplaceTo
+ com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace$ConstructorTester
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkNative.class
Compiled from "TinyFrameworkNative.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkNative
@@ -4271,7 +4411,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 +4468,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 +5141,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 +5156,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 +5166,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 +5180,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 +5191,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 +5202,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/policy-override-tiny-framework.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt
index 1f64a3c..cbaad2e 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt
@@ -68,6 +68,10 @@
class java.lang.Thread keep
method start ()V @com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo.startThread
+# Used to test constructor replacement.
+class com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ConstructorTester keepclass
+ method <init> (I)V @com.android.hoststubgen.test.tinyframework.TinyFrameworkMethodCallReplace$ReplaceTo.newConstructorTester
+
# "rename" takes a type internal name, so '/'s is used as a separator.
# The leading / in the prefix is not needed (it'll be stripped), but it's added to make
diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.java b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.java
index 57c69a3..d850be8 100644
--- a/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.java
+++ b/ravenwood/tools/hoststubgen/test-tiny-framework/tiny-framework/src/com/android/hoststubgen/test/tinyframework/TinyFrameworkMethodCallReplace.java
@@ -41,10 +41,23 @@
return originalAdd(1, 2);
}
+ public static ConstructorTester constructorReplaceTester(int i) {
+ // This object construction will be replaced with ReplaceTo.newConstructorTester().
+ return new ConstructorTester(i);
+ }
+
private static int originalAdd(int a, int b) {
return a + b - 1; // Original is broken.
}
+ public static class ConstructorTester {
+ public int i;
+
+ public ConstructorTester(int i) {
+ this.i = i;
+ }
+ }
+
public static class ReplaceTo {
public static void startThread(Thread thread) {
thread.setDaemon(true);
@@ -54,5 +67,9 @@
public static int add(int a, int b) {
return a + b;
}
+
+ public static ConstructorTester newConstructorTester(int i) {
+ return new ConstructorTester(i + 1);
+ }
}
}
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..89fcd30 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);
@@ -318,4 +323,10 @@
assertThat(TinyFrameworkMethodCallReplace.staticMethodCallReplaceTester())
.isEqualTo(3);
}
+
+ @Test
+ public void testConstructorCallReplace() throws Exception {
+ assertThat(TinyFrameworkMethodCallReplace.constructorReplaceTester(5).i)
+ .isEqualTo(6);
+ }
}
diff --git a/ravenwood/tools/ravenhelper/src/com/android/platform/test/ravenwood/ravenhelper/policytoannot/PtaProcessor.kt b/ravenwood/tools/ravenhelper/src/com/android/platform/test/ravenwood/ravenhelper/policytoannot/PtaProcessor.kt
index b6089ea..a7f481a 100644
--- a/ravenwood/tools/ravenhelper/src/com/android/platform/test/ravenwood/ravenhelper/policytoannot/PtaProcessor.kt
+++ b/ravenwood/tools/ravenhelper/src/com/android/platform/test/ravenwood/ravenhelper/policytoannot/PtaProcessor.kt
@@ -449,7 +449,6 @@
methodName: String,
methodDesc: String,
replaceSpec: TextFilePolicyMethodReplaceFilter.MethodCallReplaceSpec,
- policy: FilterPolicyWithReason
) {
// This can't be converted to an annotation.
classHasMember = 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/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
index bb3c710..0f6f86b 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
@@ -103,12 +103,16 @@
@Override
public void toggleAutoclickPause(boolean paused) {
if (paused) {
- if (mClickScheduler != null) {
- mClickScheduler.cancel();
- }
- if (mAutoclickIndicatorScheduler != null) {
- mAutoclickIndicatorScheduler.cancel();
- }
+ cancelPendingClick();
+ }
+ }
+
+ @Override
+ public void onHoverChange(boolean hovered) {
+ // Cancel all pending clicks when the mouse moves outside the panel while
+ // autoclick is still paused.
+ if (!hovered && isPaused()) {
+ cancelPendingClick();
}
}
};
@@ -226,8 +230,17 @@
}
private boolean isPaused() {
- // TODO (b/397460424): Unpause when hovering over panel.
- return Flags.enableAutoclickIndicator() && mAutoclickTypePanel.isPaused();
+ return Flags.enableAutoclickIndicator() && mAutoclickTypePanel.isPaused()
+ && !mAutoclickTypePanel.isHovered();
+ }
+
+ private void cancelPendingClick() {
+ if (mClickScheduler != null) {
+ mClickScheduler.cancel();
+ }
+ if (mAutoclickIndicatorScheduler != null) {
+ mAutoclickIndicatorScheduler.cancel();
+ }
}
@VisibleForTesting
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickLinearLayout.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickLinearLayout.java
new file mode 100644
index 0000000..fe8adf7
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickLinearLayout.java
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+package com.android.server.accessibility.autoclick;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.LinearLayout;
+
+/**
+ * A custom LinearLayout that provides enhanced hover event handling.
+ * This class overrides hover methods to track hover events for the entire panel ViewGroup,
+ * including the descendant buttons. This allows for consistent hover behavior and feedback
+ * across the entire layout.
+ */
+public class AutoclickLinearLayout extends LinearLayout {
+ public interface OnHoverChangedListener {
+ /**
+ * Called when the hover state of the AutoclickLinearLayout changes.
+ *
+ * @param hovered {@code true} if the view is now hovered, {@code false} otherwise.
+ */
+ void onHoverChanged(boolean hovered);
+ }
+
+ private OnHoverChangedListener mListener;
+
+ public AutoclickLinearLayout(Context context) {
+ super(context);
+ }
+
+ public AutoclickLinearLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public AutoclickLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public AutoclickLinearLayout(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public void setOnHoverChangedListener(OnHoverChangedListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public boolean onInterceptHoverEvent(MotionEvent event) {
+ int action = event.getActionMasked();
+ setHovered(action == MotionEvent.ACTION_HOVER_ENTER
+ || action == MotionEvent.ACTION_HOVER_MOVE);
+
+ return false;
+ }
+
+ @Override
+ public void onHoverChanged(boolean hovered) {
+ super.onHoverChanged(hovered);
+
+ if (mListener != null) {
+ mListener.onHoverChanged(hovered);
+ }
+ }
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
index ab4b3b1..57bbb4a 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
@@ -110,11 +110,18 @@
* @param paused {@code true} to pause autoclick, {@code false} to resume.
*/
void toggleAutoclickPause(boolean paused);
+
+ /**
+ * Called when the hovered state of the panel changes.
+ *
+ * @param hovered {@code true} if the panel is now hovered, {@code false} otherwise.
+ */
+ void onHoverChange(boolean hovered);
}
private final Context mContext;
- private final View mContentView;
+ private final AutoclickLinearLayout mContentView;
private final WindowManager mWindowManager;
@@ -164,8 +171,9 @@
R.drawable.accessibility_autoclick_resume);
mContentView =
- LayoutInflater.from(context)
+ (AutoclickLinearLayout) LayoutInflater.from(context)
.inflate(R.layout.accessibility_autoclick_type_panel, null);
+ mContentView.setOnHoverChangedListener(mClickPanelController::onHoverChange);
mLeftClickButton =
mContentView.findViewById(R.id.accessibility_autoclick_left_click_layout);
mRightClickButton =
@@ -339,6 +347,10 @@
return mPaused;
}
+ public boolean isHovered() {
+ return mContentView.isHovered();
+ }
+
/** Toggles the panel expanded or collapsed state. */
private void togglePanelExpansion(@AutoclickType int clickType) {
final LinearLayout button = getButtonFromClickType(clickType);
@@ -520,7 +532,7 @@
@VisibleForTesting
@NonNull
- View getContentViewForTesting() {
+ AutoclickLinearLayout getContentViewForTesting() {
return mContentView;
}
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/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..5395d2a 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
@@ -2616,6 +2625,13 @@
}
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
r.foregroundNoti = notification;
+ if (r.isForeground && foregroundServiceType != previousFgsType) {
+ // An already foreground service is being started with a different fgs type
+ // which results in the type changing without typical startForeground
+ // logging.
+ Slog.w(TAG_SERVICE, "FGS type change for " + r.shortInstanceName
+ + " from " + previousFgsType + " to " + foregroundServiceType);
+ }
mAm.mProcessStateController.setForegroundServiceType(r, foregroundServiceType);
if (!r.isForeground) {
final ServiceMap smap = getServiceMapLocked(r.userId);
@@ -9182,7 +9198,9 @@
} else {
synchronized (mAm.mPidsSelfLocked) {
callerApp = mAm.mPidsSelfLocked.get(callingPid);
- caller = callerApp.getThread();
+ if (callerApp != null) {
+ caller = callerApp.getThread();
+ }
}
}
if (callerApp == null) {
@@ -9341,20 +9359,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 +9418,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/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/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index c8b8909..f7d7ed5 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -3006,7 +3006,7 @@
UidState uidState = getUidStateLocked(uid, false);
if (uidState != null) {
int rawUidMode = mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), code);
+ uidState.uid, getPersistentDeviceIdForOp(virtualDeviceId, code), code);
if (rawUidMode != AppOpsManager.opToDefaultMode(code)) {
return raw ? rawUidMode :
@@ -3069,7 +3069,7 @@
int switchCode = AppOpsManager.opToSwitch(code);
int rawUidMode = mAppOpsCheckingService.getUidMode(uid,
- getPersistentId(virtualDeviceId), switchCode);
+ getPersistentDeviceIdForOp(virtualDeviceId, switchCode), switchCode);
if (rawUidMode != AppOpsManager.opToDefaultMode(switchCode)) {
return raw ? rawUidMode : evaluateForegroundMode(uid, switchCode, rawUidMode);
@@ -3396,7 +3396,7 @@
}
final Op op = getOpLocked(ops, code, uid, true);
final AttributedOp attributedOp = op.getOrCreateAttribution(op, attributionTag,
- getPersistentId(virtualDeviceId));
+ getPersistentDeviceIdForOp(virtualDeviceId, code));
if (attributedOp.isRunning()) {
Slog.w(TAG, "Noting op not finished: uid " + uid + " pkg " + packageName + " code "
+ code + " startTime of in progress event="
@@ -3418,15 +3418,15 @@
// If there is a non-default per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- } else if (mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), switchCode)
+ } else if (mAppOpsCheckingService.getUidMode(uidState.uid,
+ getPersistentDeviceIdForOp(virtualDeviceId, switchCode), switchCode)
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode =
uidState.evalMode(
code,
mAppOpsCheckingService.getUidMode(
uidState.uid,
- getPersistentId(virtualDeviceId),
+ getPersistentDeviceIdForOp(virtualDeviceId, switchCode),
switchCode));
if (uidMode != AppOpsManager.MODE_ALLOWED) {
if (DEBUG) Slog.d(TAG, "noteOperation: uid reject #" + uidMode + " for code "
@@ -3478,7 +3478,8 @@
virtualDeviceId, flags, AppOpsManager.MODE_ALLOWED);
attributedOp.accessed(proxyUid, proxyPackageName, proxyAttributionTag,
- getPersistentId(proxyVirtualDeviceId), uidState.getState(), flags, notedCount);
+ getPersistentDeviceIdForOp(proxyVirtualDeviceId, code), uidState.getState(),
+ flags, notedCount);
if (shouldCollectAsyncNotedOp) {
collectAsyncNotedOp(uid, packageName, code, attributionTag, flags, message,
@@ -4045,7 +4046,7 @@
}
final Op op = getOpLocked(ops, code, uid, true);
final AttributedOp attributedOp = op.getOrCreateAttribution(op, attributionTag,
- getPersistentId(virtualDeviceId));
+ getPersistentDeviceIdForOp(virtualDeviceId, code));
final UidState uidState = ops.uidState;
isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag,
virtualDeviceId, pvr.bypass, false);
@@ -4058,8 +4059,9 @@
// If there is a non-default per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
} else if ((rawUidMode =
- mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), switchCode))
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid, getPersistentDeviceIdForOp(virtualDeviceId, switchCode),
+ switchCode))
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode = uidState.evalMode(code, rawUidMode);
if (!shouldStartForMode(uidMode, startIfModeDefault)) {
@@ -4107,11 +4109,13 @@
try {
if (isRestricted) {
attributedOp.createPaused(clientId, virtualDeviceId, proxyUid, proxyPackageName,
- proxyAttributionTag, getPersistentId(proxyVirtualDeviceId),
+ proxyAttributionTag,
+ getPersistentDeviceIdForOp(proxyVirtualDeviceId, code),
uidState.getState(), flags, attributionFlags, attributionChainId);
} else {
attributedOp.started(clientId, virtualDeviceId, proxyUid, proxyPackageName,
- proxyAttributionTag, getPersistentId(proxyVirtualDeviceId),
+ proxyAttributionTag,
+ getPersistentDeviceIdForOp(proxyVirtualDeviceId, code),
uidState.getState(), flags, attributionFlags, attributionChainId);
startType = START_TYPE_STARTED;
}
@@ -4179,15 +4183,15 @@
final int switchCode = AppOpsManager.opToSwitch(code);
// If there is a non-default mode per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- if (mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), switchCode)
+ if (mAppOpsCheckingService.getUidMode(uidState.uid,
+ getPersistentDeviceIdForOp(virtualDeviceId, switchCode), switchCode)
!= AppOpsManager.opToDefaultMode(switchCode)) {
final int uidMode =
uidState.evalMode(
code,
mAppOpsCheckingService.getUidMode(
uidState.uid,
- getPersistentId(virtualDeviceId),
+ getPersistentDeviceIdForOp(virtualDeviceId, switchCode),
switchCode));
if (!shouldStartForMode(uidMode, startIfModeDefault)) {
if (DEBUG) {
@@ -4350,7 +4354,8 @@
return;
}
final AttributedOp attributedOp =
- op.mDeviceAttributedOps.getOrDefault(getPersistentId(virtualDeviceId),
+ op.mDeviceAttributedOps.getOrDefault(
+ getPersistentDeviceIdForOp(virtualDeviceId, code),
new ArrayMap<>()).get(attributionTag);
if (attributedOp == null) {
Slog.e(TAG, "Attribution not found: uid=" + uid + " pkg=" + packageName + "("
@@ -4641,7 +4646,8 @@
return true;
}
if (mVirtualDeviceManagerInternal == null) {
- return true;
+ Slog.w(TAG, "VirtualDeviceManagerInternal is null when device Id is non-default");
+ return false;
}
if (mVirtualDeviceManagerInternal.isValidVirtualDeviceId(virtualDeviceId)) {
mKnownDeviceIds.put(virtualDeviceId,
@@ -7310,7 +7316,13 @@
return packageNames;
}
- @NonNull private String getPersistentId(int virtualDeviceId) {
+ // For ops associated with device aware permissions, if virtual device id is non-default, we
+ // will return string version of that id provided the virtual device has corresponding camera or
+ // audio policy.
+ @NonNull private String getPersistentDeviceIdForOp(int virtualDeviceId, int op) {
+ virtualDeviceId = PermissionManager.resolveDeviceIdForPermissionCheck(mContext,
+ virtualDeviceId, AppOpsManager.opToPermission(op));
+
if (virtualDeviceId == Context.DEVICE_ID_DEFAULT) {
return PERSISTENT_DEVICE_ID_DEFAULT;
}
@@ -7319,6 +7331,7 @@
}
String persistentId =
mVirtualDeviceManagerInternal.getPersistentIdForDevice(virtualDeviceId);
+
if (persistentId == null) {
persistentId = mKnownDeviceIds.get(virtualDeviceId);
}
diff --git a/services/core/java/com/android/server/appop/DiscreteOpsRegistry.java b/services/core/java/com/android/server/appop/DiscreteOpsRegistry.java
index 84402c8..12c35ae 100644
--- a/services/core/java/com/android/server/appop/DiscreteOpsRegistry.java
+++ b/services/core/java/com/android/server/appop/DiscreteOpsRegistry.java
@@ -177,6 +177,8 @@
*/
abstract void writeAndClearOldAccessHistory();
+ void shutdown() {}
+
/** Remove all discrete op events. */
abstract void clearHistory();
diff --git a/services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java b/services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java
index 604cb30..dc11be9 100644
--- a/services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java
+++ b/services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java
@@ -57,13 +57,18 @@
public class DiscreteOpsSqlRegistry extends DiscreteOpsRegistry {
private static final String TAG = "DiscreteOpsSqlRegistry";
+ private static final long DB_WRITE_INTERVAL = Duration.ofMinutes(10).toMillis();
+ private static final long EXPIRED_ENTRY_DELETION_INTERVAL = Duration.ofHours(6).toMillis();
+
+ // Event type handled by SqliteWriteHandler
+ private static final int WRITE_DATABASE_RECURRING = 1;
+ private static final int DELETE_EXPIRED_ENTRIES = 2;
+ private static final int WRITE_DATABASE_CACHE_FULL = 3;
+
private final Context mContext;
private final DiscreteOpsDbHelper mDiscreteOpsDbHelper;
private final SqliteWriteHandler mSqliteWriteHandler;
private final DiscreteOpCache mDiscreteOpCache = new DiscreteOpCache(512);
- private static final long THREE_HOURS = Duration.ofHours(3).toMillis();
- private static final int WRITE_CACHE_EVICTED_OP_EVENTS = 1;
- private static final int DELETE_OLD_OP_EVENTS = 2;
// Attribution chain id is used to identify an attribution source chain, This is
// set for startOp only. PermissionManagerService resets this ID on device restart, so
// we use previously persisted chain id as offset, and add it to chain id received from
@@ -83,6 +88,9 @@
mSqliteWriteHandler = new SqliteWriteHandler(thread.getLooper());
mDiscreteOpsDbHelper = new DiscreteOpsDbHelper(context, databaseFile);
mChainIdOffset = mDiscreteOpsDbHelper.getLargestAttributionChainId();
+ mSqliteWriteHandler.sendEmptyMessageDelayed(WRITE_DATABASE_RECURRING, DB_WRITE_INTERVAL);
+ mSqliteWriteHandler.sendEmptyMessageDelayed(DELETE_EXPIRED_ENTRIES,
+ EXPIRED_ENTRY_DELETION_INTERVAL);
}
@Override
@@ -117,15 +125,14 @@
}
@Override
- void writeAndClearOldAccessHistory() {
- // Let the sql impl also follow the same disk write frequencies as xml,
- // controlled by AppOpsService.
+ void shutdown() {
+ mSqliteWriteHandler.removeAllPendingMessages();
mDiscreteOpsDbHelper.insertDiscreteOps(mDiscreteOpCache.getAllEventsAndClear());
- if (!mSqliteWriteHandler.hasMessages(DELETE_OLD_OP_EVENTS)) {
- if (mSqliteWriteHandler.sendEmptyMessageDelayed(DELETE_OLD_OP_EVENTS, THREE_HOURS)) {
- Slog.w(TAG, "DELETE_OLD_OP_EVENTS is not queued");
- }
- }
+ }
+
+ @Override
+ void writeAndClearOldAccessHistory() {
+ // no-op
}
@Override
@@ -175,7 +182,7 @@
@Nullable String attributionTagFilter, int opFlagsFilter,
Set<String> attributionExemptPkgs) {
// flush the cache into database before read.
- writeAndClearOldAccessHistory();
+ mDiscreteOpsDbHelper.insertDiscreteOps(mDiscreteOpCache.getAllEventsAndClear());
boolean assembleChains = attributionExemptPkgs != null;
IntArray opCodes = getAppOpCodes(filter, opNamesFilter);
beginTimeMillis = Math.max(beginTimeMillis, Instant.now().minus(sDiscreteHistoryCutoff,
@@ -363,20 +370,59 @@
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case WRITE_CACHE_EVICTED_OP_EVENTS:
- List<DiscreteOp> opEvents = (List<DiscreteOp>) msg.obj;
- mDiscreteOpsDbHelper.insertDiscreteOps(opEvents);
- break;
- case DELETE_OLD_OP_EVENTS:
+ case WRITE_DATABASE_RECURRING -> {
+ try {
+ List<DiscreteOp> evictedEvents;
+ synchronized (mDiscreteOpCache) {
+ evictedEvents = mDiscreteOpCache.evict();
+ }
+ mDiscreteOpsDbHelper.insertDiscreteOps(evictedEvents);
+ } finally {
+ mSqliteWriteHandler.sendEmptyMessageDelayed(WRITE_DATABASE_RECURRING,
+ DB_WRITE_INTERVAL);
+ // Schedule a cleanup to truncate older (before cutoff time) entries.
+ if (!mSqliteWriteHandler.hasMessages(DELETE_EXPIRED_ENTRIES)) {
+ mSqliteWriteHandler.sendEmptyMessageDelayed(DELETE_EXPIRED_ENTRIES,
+ EXPIRED_ENTRY_DELETION_INTERVAL);
+ }
+ }
+ }
+ case DELETE_EXPIRED_ENTRIES -> {
long cutOffTimeStamp = System.currentTimeMillis() - sDiscreteHistoryCutoff;
mDiscreteOpsDbHelper.execSQL(
DiscreteOpsTable.DELETE_TABLE_DATA_BEFORE_ACCESS_TIME,
new Object[]{cutOffTimeStamp});
- break;
- default:
- throw new IllegalStateException("Unexpected value: " + msg.what);
+ }
+ case WRITE_DATABASE_CACHE_FULL -> {
+ try {
+ List<DiscreteOp> evictedEvents;
+ synchronized (mDiscreteOpCache) {
+ evictedEvents = mDiscreteOpCache.evict();
+ // if nothing to evict, just write the whole cache to database.
+ if (evictedEvents.isEmpty()
+ && mDiscreteOpCache.size() >= mDiscreteOpCache.capacity()) {
+ evictedEvents.addAll(mDiscreteOpCache.mCache);
+ mDiscreteOpCache.clear();
+ }
+ }
+ mDiscreteOpsDbHelper.insertDiscreteOps(evictedEvents);
+ } finally {
+ // Just in case initial message is not scheduled.
+ if (!mSqliteWriteHandler.hasMessages(WRITE_DATABASE_RECURRING)) {
+ mSqliteWriteHandler.sendEmptyMessageDelayed(WRITE_DATABASE_RECURRING,
+ DB_WRITE_INTERVAL);
+ }
+ }
+ }
+ default -> throw new IllegalStateException("Unexpected value: " + msg.what);
}
}
+
+ void removeAllPendingMessages() {
+ removeMessages(WRITE_DATABASE_RECURRING);
+ removeMessages(DELETE_EXPIRED_ENTRIES);
+ removeMessages(WRITE_DATABASE_CACHE_FULL);
+ }
}
/**
@@ -390,6 +436,7 @@
* 4) During shutdown.
*/
class DiscreteOpCache {
+ private static final String TAG = "DiscreteOpCache";
private final int mCapacity;
private final ArraySet<DiscreteOp> mCache;
@@ -404,23 +451,9 @@
return;
}
mCache.add(opEvent);
+
if (mCache.size() >= mCapacity) {
- if (DEBUG_LOG) {
- Slog.i(TAG, "Current discrete ops cache size: " + mCache.size());
- }
- List<DiscreteOp> evictedEvents = evict();
- if (DEBUG_LOG) {
- Slog.i(TAG, "Evicted discrete ops size: " + evictedEvents.size());
- }
- // if nothing to evict, just write the whole cache to disk
- if (evictedEvents.isEmpty()) {
- Slog.w(TAG, "No discrete ops event is evicted, write cache to db.");
- evictedEvents.addAll(mCache);
- mCache.clear();
- }
- Message msg = mSqliteWriteHandler.obtainMessage(
- WRITE_CACHE_EVICTED_OP_EVENTS, evictedEvents);
- mSqliteWriteHandler.sendMessage(msg);
+ mSqliteWriteHandler.sendEmptyMessage(WRITE_DATABASE_CACHE_FULL);
}
}
}
@@ -461,6 +494,14 @@
}
}
+ int size() {
+ return mCache.size();
+ }
+
+ int capacity() {
+ return mCapacity;
+ }
+
/**
* Remove all entries from the cache.
*/
diff --git a/services/core/java/com/android/server/appop/HistoricalRegistry.java b/services/core/java/com/android/server/appop/HistoricalRegistry.java
index 928a4b2..d267e0d 100644
--- a/services/core/java/com/android/server/appop/HistoricalRegistry.java
+++ b/services/core/java/com/android/server/appop/HistoricalRegistry.java
@@ -750,6 +750,7 @@
}
// Do not call persistPendingHistory inside the memory lock, due to possible deadlock
persistPendingHistory();
+ mDiscreteRegistry.shutdown();
}
void persistPendingHistory() {
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/display/mode/ModeChangeObserver.java b/services/core/java/com/android/server/display/mode/ModeChangeObserver.java
index bbc13cc..2751835 100644
--- a/services/core/java/com/android/server/display/mode/ModeChangeObserver.java
+++ b/services/core/java/com/android/server/display/mode/ModeChangeObserver.java
@@ -23,8 +23,6 @@
import android.view.DisplayAddress;
import android.view.DisplayEventReceiver;
-import com.android.internal.annotations.KeepForWeakReference;
-
import java.util.HashSet;
import java.util.Set;
@@ -35,7 +33,6 @@
private final DisplayModeDirector.Injector mInjector;
@SuppressWarnings("unused")
- @KeepForWeakReference
private DisplayEventReceiver mModeChangeListener;
private final SparseArray<Set<Integer>> mRejectedModesByDisplay = new SparseArray<>();
private Looper mLooper;
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/notification/GroupHelper.java b/services/core/java/com/android/server/notification/GroupHelper.java
index 02f817e..6e5308e 100644
--- a/services/core/java/com/android/server/notification/GroupHelper.java
+++ b/services/core/java/com/android/server/notification/GroupHelper.java
@@ -35,6 +35,7 @@
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -130,8 +131,10 @@
mUngroupedAbuseNotifications = new ArrayMap<>();
// Contains the list of group summaries that were canceled when "singleton groups" were
- // force grouped. Used to remove the original group's children when an app cancels the
- // already removed summary. Key is userId|packageName|g:OriginalGroupName
+ // force grouped. Key is userId|packageName|g:OriginalGroupName. Used to:
+ // 1) remove the original group's children when an app cancels the already removed summary.
+ // 2) perform the same side effects that would happen if the group is removed because
+ // all its force-regrouped children are removed (e.g. firing its deleteIntent).
@GuardedBy("mAggregatedNotifications")
private final ArrayMap<FullyQualifiedGroupKey, CachedSummary>
mCanceledSummaries = new ArrayMap<>();
@@ -278,7 +281,11 @@
public void onNotificationRemoved(NotificationRecord record) {
try {
if (notificationForceGrouping()) {
- onNotificationRemoved(record, new ArrayList<>());
+ Slog.wtf(TAG,
+ "This overload of onNotificationRemoved() should not be called if "
+ + "notification_force_grouping is enabled!",
+ new Exception("call stack"));
+ onNotificationRemoved(record, new ArrayList<>(), false);
} else {
final StatusBarNotification sbn = record.getSbn();
maybeUngroup(sbn, true, sbn.getUserId());
@@ -926,10 +933,12 @@
*
* @param record the removed notification
* @param notificationList the full notification list from NotificationManagerService
+ * @param sendingDelete whether the removed notification is being removed in a way that sends
+ * its {@code deleteIntent}
*/
@FlaggedApi(android.service.notification.Flags.FLAG_NOTIFICATION_FORCE_GROUPING)
protected void onNotificationRemoved(final NotificationRecord record,
- final List<NotificationRecord> notificationList) {
+ final List<NotificationRecord> notificationList, boolean sendingDelete) {
final StatusBarNotification sbn = record.getSbn();
final String pkgName = sbn.getPackageName();
final int userId = record.getUserId();
@@ -973,9 +982,11 @@
}
// Try to cleanup cached summaries if notification was canceled (not snoozed)
+ // If the notification was cancelled by an action that fires its delete intent,
+ // also fire it for the cached summary.
if (record.isCanceled) {
maybeClearCanceledSummariesCache(pkgName, userId,
- record.getNotification().getGroup(), notificationList);
+ record.getNotification().getGroup(), notificationList, sendingDelete);
}
}
}
@@ -1759,13 +1770,18 @@
private void cacheCanceledSummary(NotificationRecord record) {
final FullyQualifiedGroupKey groupKey = new FullyQualifiedGroupKey(record.getUserId(),
record.getSbn().getPackageName(), record.getNotification().getGroup());
- mCanceledSummaries.put(groupKey, new CachedSummary(record.getSbn().getId(),
- record.getSbn().getTag(), record.getNotification().getGroup(), record.getKey()));
+ mCanceledSummaries.put(groupKey, new CachedSummary(
+ record.getSbn().getId(),
+ record.getSbn().getTag(),
+ record.getNotification().getGroup(),
+ record.getKey(),
+ record.getNotification().deleteIntent));
}
@GuardedBy("mAggregatedNotifications")
private void maybeClearCanceledSummariesCache(String pkgName, int userId,
- String groupName, List<NotificationRecord> notificationList) {
+ String groupName, List<NotificationRecord> notificationList,
+ boolean sendSummaryDelete) {
final FullyQualifiedGroupKey findKey = new FullyQualifiedGroupKey(userId, pkgName,
groupName);
CachedSummary summary = mCanceledSummaries.get(findKey);
@@ -1786,6 +1802,9 @@
}
if (!stillHasChildren) {
removeCachedSummary(pkgName, userId, summary);
+ if (sendSummaryDelete && summary.deleteIntent != null) {
+ mCallback.sendAppProvidedSummaryDeleteIntent(pkgName, summary.deleteIntent);
+ }
}
}
}
@@ -1965,7 +1984,8 @@
}
}
- record CachedSummary(int id, String tag, String originalGroupKey, String key) {}
+ record CachedSummary(int id, String tag, String originalGroupKey, String key,
+ @Nullable PendingIntent deleteIntent) { }
protected static class NotificationAttributes {
public final int flags;
@@ -2035,6 +2055,15 @@
// New callbacks for API abuse grouping
void removeAppProvidedSummary(String key);
+ /**
+ * Send a cached summary's deleteIntent, when the last of its original children is removed.
+ *
+ * <p>While technically the group summary was "canceled" much earlier (because it was the
+ * summary of a sparse group and its children got reparented), the posting package expected
+ * the summary's deleteIntent to fire when the summary is auto-dismissed.
+ */
+ void sendAppProvidedSummaryDeleteIntent(String pkg, PendingIntent deleteIntent);
+
void removeNotificationFromCanceledGroup(int userId, String pkg, String groupKey,
int cancelReason);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 6fddfb5..60371d7 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -3211,6 +3211,11 @@
}
@Override
+ public void sendAppProvidedSummaryDeleteIntent(String pkg, PendingIntent deleteIntent) {
+ sendDeleteIntent(deleteIntent, pkg);
+ }
+
+ @Override
public void removeNotificationFromCanceledGroup(int userId, String pkg,
String groupKey, int cancelReason) {
synchronized (mNotificationLock) {
@@ -9898,7 +9903,8 @@
if (notificationForceGrouping()) {
mHandler.post(() -> {
synchronized (mNotificationLock) {
- mGroupHelper.onNotificationRemoved(r, mNotificationList);
+ mGroupHelper.onNotificationRemoved(r, mNotificationList,
+ /* sendingDelete= */ false);
}
});
} else {
@@ -10826,20 +10832,7 @@
// tell the app
if (sendDelete) {
- final PendingIntent deleteIntent = r.getNotification().deleteIntent;
- if (deleteIntent != null) {
- try {
- // make sure deleteIntent cannot be used to start activities from background
- LocalServices.getService(ActivityManagerInternal.class)
- .clearPendingIntentAllowBgActivityStarts(deleteIntent.getTarget(),
- ALLOWLIST_TOKEN);
- deleteIntent.send();
- } catch (PendingIntent.CanceledException ex) {
- // do nothing - there's no relevant way to recover, and
- // no reason to let this propagate
- Slog.w(TAG, "canceled PendingIntent for " + r.getSbn().getPackageName(), ex);
- }
- }
+ sendDeleteIntent(r.getNotification().deleteIntent, r.getSbn().getPackageName());
}
// Only cancel these if this notification actually got to be posted.
@@ -10854,7 +10847,7 @@
mHandler.removeCallbacksAndEqualMessages(r.getKey());
mHandler.post(() -> {
synchronized (NotificationManagerService.this.mNotificationLock) {
- mGroupHelper.onNotificationRemoved(r, mNotificationList);
+ mGroupHelper.onNotificationRemoved(r, mNotificationList, sendDelete);
}
});
@@ -10952,6 +10945,21 @@
}
}
+ private static void sendDeleteIntent(@Nullable PendingIntent deleteIntent, String fromPkg) {
+ if (deleteIntent != null) {
+ try {
+ // make sure deleteIntent cannot be used to start activities from background
+ LocalServices.getService(ActivityManagerInternal.class)
+ .clearPendingIntentAllowBgActivityStarts(deleteIntent.getTarget(),
+ ALLOWLIST_TOKEN);
+ deleteIntent.send();
+ } catch (PendingIntent.CanceledException ex) {
+ // There's no relevant way to recover, and no reason to let this propagate
+ Slog.w(TAG, "canceled PendingIntent for " + fromPkg, ex);
+ }
+ }
+ }
+
@VisibleForTesting
void updateUriPermissions(@Nullable NotificationRecord newRecord,
@Nullable NotificationRecord oldRecord, String targetPkg, int targetUserId) {
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/BackgroundInstallControlService.java b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
index 463989a..60d028b 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
@@ -390,10 +390,11 @@
.max(Comparator.comparingLong(PackageInstaller.SessionInfo::getCreatedMillis));
}
- // ADB sets installerPackageName to null, this creates a loophole to bypass BIC which will be
- // addressed with b/265203007
private boolean installedByAdb(String initiatingPackageName) {
- if(PackageManagerServiceUtils.isInstalledByAdb(initiatingPackageName)) {
+ // GTS tests needs to adopt shell identity to install apps.
+ if(!SystemProperties.get("gts.transparency.bg-install-apps").isEmpty()) {
+ Slog.d(TAG, "handlePackageAdd: is GTS tests, skipping ADB check");
+ } else if(PackageManagerServiceUtils.isInstalledByAdb(initiatingPackageName)) {
Slog.d(TAG, "handlePackageAdd: is installed by ADB, skipping");
return true;
}
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index f96846c..acdc79f 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1067,6 +1067,9 @@
void doPostDexopt(List<ReconciledPackage> reconciledPackages,
List<InstallRequest> requests, Map<String, Boolean> createdAppId,
MoveInfo moveInfo, long acquireTime) {
+ for (InstallRequest request : requests) {
+ request.onWaitDexoptFinished();
+ }
boolean success = false;
try {
if (commitInstallPackages(reconciledPackages)) {
@@ -1218,6 +1221,7 @@
CompletableFuture<Void> future =
DexOptHelper.performDexoptIfNeededAsync(request, mDexManager);
completableFutures.add(future);
+ request.onWaitDexoptStarted();
}
if (!completableFutures.isEmpty()) {
diff --git a/services/core/java/com/android/server/pm/InstallRequest.java b/services/core/java/com/android/server/pm/InstallRequest.java
index fbf5db5..7349204 100644
--- a/services/core/java/com/android/server/pm/InstallRequest.java
+++ b/services/core/java/com/android/server/pm/InstallRequest.java
@@ -1028,6 +1028,18 @@
}
}
+ public void onWaitDexoptStarted() {
+ if (mPackageMetrics != null) {
+ mPackageMetrics.onStepStarted(PackageMetrics.STEP_WAIT_DEXOPT);
+ }
+ }
+
+ public void onWaitDexoptFinished() {
+ if (mPackageMetrics != null) {
+ mPackageMetrics.onStepFinished(PackageMetrics.STEP_WAIT_DEXOPT);
+ }
+ }
+
public void onDexoptFinished(DexoptResult dexoptResult) {
// Only report external profile warnings when installing from adb. The goal is to warn app
// developers if they have provided bad external profiles, so it's not beneficial to report
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/PackageMetrics.java b/services/core/java/com/android/server/pm/PackageMetrics.java
index 994ee42..22da3b2 100644
--- a/services/core/java/com/android/server/pm/PackageMetrics.java
+++ b/services/core/java/com/android/server/pm/PackageMetrics.java
@@ -73,6 +73,7 @@
public static final int STEP_DEXOPT = 5;
public static final int STEP_FREEZE_INSTALL = 6;
public static final int STEP_RESTORE = 7;
+ public static final int STEP_WAIT_DEXOPT = 8;
@IntDef(prefix = {"STEP_"}, value = {
STEP_PREPARE,
@@ -81,7 +82,8 @@
STEP_COMMIT,
STEP_DEXOPT,
STEP_FREEZE_INSTALL,
- STEP_RESTORE
+ STEP_RESTORE,
+ STEP_WAIT_DEXOPT
})
@Retention(RetentionPolicy.SOURCE)
public @interface StepInt {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 5a6d7a2..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)) {
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/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/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 12f5534..58534b9 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -712,13 +712,17 @@
if (!isMagnifierActivated) {
return;
}
- // All opening/closing situations.
+ // All opening/closing/recents transitions
+ boolean notify = (flags & TRANSIT_FLAG_IS_RECENTS) != 0;
switch (type) {
case WindowManager.TRANSIT_OPEN:
case WindowManager.TRANSIT_TO_FRONT:
case WindowManager.TRANSIT_CLOSE:
case WindowManager.TRANSIT_TO_BACK:
- mUserContextChangedNotifier.onWMTransition(type, flags);
+ notify = true;
+ }
+ if (notify) {
+ mUserContextChangedNotifier.onWMTransition(type, flags);
}
}
@@ -1088,8 +1092,7 @@
// causing the notifying, or the recents/home window is removed, then we won't need the
// delayed notification anymore.
void onWMTransition(@TransitionType int type, @TransitionFlags int flags) {
- if (type == WindowManager.TRANSIT_TO_FRONT
- && (flags & TRANSIT_FLAG_IS_RECENTS) != 0) {
+ if ((flags & TRANSIT_FLAG_IS_RECENTS) != 0) {
// Delay the recents to front transition notification then send after if needed.
mHasDelayedNotificationForRecentsToFrontTransition = true;
} else {
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 57b82c3..d452d76 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6005,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/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 247264f..bdde5fe 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -58,6 +58,7 @@
import static android.security.Flags.preventIntentRedirectAbortOrThrowException;
import static android.security.Flags.preventIntentRedirectShowToast;
import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.TRANSIT_FLAG_AVOID_MOVE_TO_FRONT;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
@@ -1841,6 +1842,9 @@
// no-user-leaving implies not entering PiP.
transition.setCanPipOnFinish(false /* canPipOnFinish */);
}
+ if (avoidMoveToFront() && transition != null) {
+ transition.addFlag(TRANSIT_FLAG_AVOID_MOVE_TO_FRONT);
+ }
if (isIndependentLaunch && transition != null) {
transitionController.requestStartTransition(transition,
mTargetTask == null ? started.getTask() : mTargetTask,
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 f51e60c..36686fc 100644
--- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
+++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
@@ -312,7 +312,6 @@
private final @ActivityManager.ProcessState int mCallingUidProcState;
private final boolean mIsCallingUidPersistentSystemProcess;
final BackgroundStartPrivileges mBalAllowedByPiSender;
- final BackgroundStartPrivileges mBalAllowedByPiCreatorWithHardening;
final BackgroundStartPrivileges mBalAllowedByPiCreator;
private final String mRealCallingPackage;
private final int mRealCallingUid;
@@ -379,22 +378,14 @@
if (mAutoOptInCaller) {
// grant BAL privileges unless explicitly opted out
- mBalAllowedByPiCreatorWithHardening = mBalAllowedByPiCreator =
+ mBalAllowedByPiCreator =
callerBackgroundActivityStartMode == MODE_BACKGROUND_ACTIVITY_START_DENIED
? BackgroundStartPrivileges.NONE
: BackgroundStartPrivileges.ALLOW_BAL;
} else {
// for PendingIntents we restrict BAL based on target_sdk
- mBalAllowedByPiCreatorWithHardening = getBackgroundStartPrivilegesAllowedByCreator(
+ mBalAllowedByPiCreator = getBackgroundStartPrivilegesAllowedByCreator(
callingUid, callingPackage, checkedOptions);
- final BackgroundStartPrivileges mBalAllowedByPiCreatorWithoutHardening =
- callerBackgroundActivityStartMode
- == MODE_BACKGROUND_ACTIVITY_START_DENIED
- ? BackgroundStartPrivileges.NONE
- : BackgroundStartPrivileges.ALLOW_BAL;
- mBalAllowedByPiCreator = balRequireOptInByPendingIntentCreator()
- ? mBalAllowedByPiCreatorWithHardening
- : mBalAllowedByPiCreatorWithoutHardening;
}
if (mAutoOptInReason != null) {
@@ -585,9 +576,8 @@
if (mCallerApp != null) {
sb.append("; inVisibleTask: ").append(mCallerApp.hasActivityInVisibleTask());
}
- sb.append("; balAllowedByPiCreator: ").append(mBalAllowedByPiCreator);
- sb.append("; balAllowedByPiCreatorWithHardening: ")
- .append(mBalAllowedByPiCreatorWithHardening);
+ sb.append("; balAllowedByPiCreator: ")
+ .append(mBalAllowedByPiCreator);
if (mResultForCaller != null) {
sb.append("; resultIfPiCreatorAllowsBal: ")
.append(balCodeToString(mResultForCaller.mCode));
@@ -638,14 +628,13 @@
}
static class BalVerdict {
- static final BalVerdict BLOCK = new BalVerdict(BAL_BLOCK, false, "Blocked");
+ static final BalVerdict BLOCK = new BalVerdict(BAL_BLOCK, "Blocked");
static final BalVerdict ALLOW_BY_DEFAULT =
- new BalVerdict(BAL_ALLOW_DEFAULT, false, "Default");
+ new BalVerdict(BAL_ALLOW_DEFAULT, "Default");
// Careful using this - it will bypass all ASM checks.
static final BalVerdict ALLOW_PRIVILEGED =
- new BalVerdict(BAL_ALLOW_ALLOWLISTED_UID, false, "PRIVILEGED");
+ new BalVerdict(BAL_ALLOW_ALLOWLISTED_UID, "PRIVILEGED");
private final @BalCode int mCode;
- private final boolean mBackground;
private final String mMessage;
private String mProcessInfo;
// indicates BAL would be blocked because only creator of the PI has the privilege to allow
@@ -654,8 +643,7 @@
/** indicates that this verdict is based on the real calling UID and not the calling UID */
private boolean mBasedOnRealCaller;
- BalVerdict(@BalCode int balCode, boolean background, String message) {
- this.mBackground = background;
+ BalVerdict(@BalCode int balCode, String message) {
this.mCode = balCode;
this.mMessage = message;
}
@@ -708,16 +696,7 @@
builder.append(" [realCaller]");
}
if (DEBUG_ACTIVITY_STARTS) {
- builder.append(" (");
- if (mBackground) {
- builder.append("Background ");
- }
- builder.append("Activity start ");
- if (mCode == BAL_BLOCK) {
- builder.append("denied");
- } else {
- builder.append("allowed: ").append(mMessage);
- }
+ builder.append(" (").append(mMessage);
if (mProcessInfo != null) {
builder.append(" ");
builder.append(mProcessInfo);
@@ -795,7 +774,6 @@
// to realCallingUid when calculating resultForRealCaller below.
if (getService().hasActiveVisibleWindow(realCallingSdkSandboxUidToAppUid)) {
state.setResultForRealCaller(new BalVerdict(BAL_ALLOW_SDK_SANDBOX,
- /*background*/ false,
"uid in SDK sandbox has visible (non-toast) window"));
return allowBasedOnRealCaller(state);
}
@@ -1059,8 +1037,7 @@
|| state.mAppSwitchState == APP_SWITCH_FG_ONLY
|| isHomeApp(state.mCallingUid, state.mCallingPackage);
if (appSwitchAllowedOrFg && state.mCallingUidHasVisibleActivity) {
- return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW,
- /*background*/ false, "callingUid has visible window");
+ return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "callingUid has visible window");
}
return BalVerdict.BLOCK;
};
@@ -1068,7 +1045,7 @@
private final BalExemptionCheck mCheckCallerNonAppVisible = state -> {
if (state.mCallingUidHasNonAppVisibleWindow) {
return new BalVerdict(BAL_ALLOW_NON_APP_VISIBLE_WINDOW,
- /*background*/ false, "callingUid has non-app visible window "
+ "callingUid has non-app visible window "
+ getService().mActiveUids.getNonAppVisibleWindowDetails(state.mCallingUid));
}
return BalVerdict.BLOCK;
@@ -1080,9 +1057,7 @@
if (state.mCallingUid == Process.ROOT_UID
|| callingAppId == Process.SYSTEM_UID
|| callingAppId == Process.NFC_UID) {
- return new BalVerdict(
- BAL_ALLOW_ALLOWLISTED_UID, /*background*/ false,
- "Important callingUid");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_UID, "Important callingUid");
}
return BalVerdict.BLOCK;
};
@@ -1090,9 +1065,7 @@
private final BalExemptionCheck mCheckCallerIsAllowlistedComponent = state -> {
// Always allow home application to start activities.
if (isHomeApp(state.mCallingUid, state.mCallingPackage)) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ false,
- "Home app");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Home app");
}
final int callingAppId = UserHandle.getAppId(state.mCallingUid);
@@ -1100,37 +1073,31 @@
final WindowState imeWindow =
getService().mRootWindowContainer.getCurrentInputMethodWindow();
if (imeWindow != null && callingAppId == imeWindow.mOwnerUid) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ false,
- "Active ime");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Active ime");
}
// don't abort if the callingUid is a persistent system process
if (state.mIsCallingUidPersistentSystemProcess) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ false, "callingUid is persistent system process");
+ "callingUid is persistent system process");
}
// don't abort if the caller has the same uid as the recents component
if (getSupervisor().mRecentTasks.isCallerRecents(state.mCallingUid)) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ true, "Recents Component");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Recents Component");
}
// don't abort if the callingUid is the device owner
if (getService().isDeviceOwner(state.mCallingUid)) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ true, "Device Owner");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Device Owner");
}
// don't abort if the callingUid is a affiliated profile owner
if (getService().isAffiliatedProfileOwner(state.mCallingUid)) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ true, "Affiliated Profile Owner");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Affiliated Profile Owner");
}
// don't abort if the callingUid has companion device
final int callingUserId = UserHandle.getUserId(state.mCallingUid);
if (getService().isAssociatedCompanionApp(callingUserId, state.mCallingUid)) {
- return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ true, "Companion App");
+ return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT, "Companion App");
}
return BalVerdict.BLOCK;
};
@@ -1139,7 +1106,6 @@
// don't abort if the callingUid has START_ACTIVITIES_FROM_BACKGROUND permission
if (hasBalPermission(state.mCallingUid, state.mCallingPid)) {
return new BalVerdict(BAL_ALLOW_PERMISSION,
- /*background*/ true,
"START_ACTIVITIES_FROM_BACKGROUND permission granted");
}
return BalVerdict.BLOCK;
@@ -1149,7 +1115,7 @@
if (getService().hasSystemAlertWindowPermission(state.mCallingUid, state.mCallingPid,
state.mCallingPackage)) {
return new BalVerdict(BAL_ALLOW_SAW_PERMISSION,
- /*background*/ true, "SYSTEM_ALERT_WINDOW permission is granted");
+ "SYSTEM_ALERT_WINDOW permission is granted");
}
return BalVerdict.BLOCK;
};
@@ -1159,7 +1125,7 @@
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,
+ return new BalVerdict(BAL_ALLOW_PERMISSION,
"OP_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION appop is granted");
}
return BalVerdict.BLOCK;
@@ -1200,8 +1166,7 @@
|| state.mAppSwitchState == APP_SWITCH_FG_ONLY
|| isHomeApp(state.mRealCallingUid, state.mRealCallingPackage);
if (appSwitchAllowedOrFg && state.mRealCallingUidHasVisibleActivity) {
- return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW,
- /*background*/ false, "realCallingUid has visible window");
+ return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "realCallingUid has visible window");
}
return BalVerdict.BLOCK;
};
@@ -1209,9 +1174,9 @@
private final BalExemptionCheck mCheckRealCallerNonAppVisible = state -> {
if (state.mRealCallingUidHasNonAppVisibleWindow) {
return new BalVerdict(BAL_ALLOW_NON_APP_VISIBLE_WINDOW,
- /*background*/ false, "realCallingUid has non-app visible window "
- + getService().mActiveUids.getNonAppVisibleWindowDetails(
- state.mRealCallingUid));
+ "realCallingUid has non-app visible window "
+ + getService().mActiveUids.getNonAppVisibleWindowDetails(
+ state.mRealCallingUid));
}
return BalVerdict.BLOCK;
};
@@ -1230,9 +1195,7 @@
== MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
if (allowAlways
&& hasBalPermission(state.mRealCallingUid, state.mRealCallingPid)) {
- return new BalVerdict(BAL_ALLOW_PERMISSION,
- /*background*/ false,
- "realCallingUid has BAL permission.");
+ return new BalVerdict(BAL_ALLOW_PERMISSION, "realCallingUid has BAL permission.");
}
return BalVerdict.BLOCK;
};
@@ -1245,7 +1208,7 @@
&& getService().hasSystemAlertWindowPermission(state.mRealCallingUid,
state.mRealCallingPid, state.mRealCallingPackage)) {
return new BalVerdict(BAL_ALLOW_SAW_PERMISSION,
- /*background*/ true, "SYSTEM_ALERT_WINDOW permission is granted");
+ "SYSTEM_ALERT_WINDOW permission is granted");
}
return BalVerdict.BLOCK;
};
@@ -1258,7 +1221,6 @@
if ((allowAlways || state.mAllowBalExemptionForSystemProcess)
&& state.mIsRealCallingUidPersistentSystemProcess) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_UID,
- /*background*/ false,
"realCallingUid is persistent system process AND intent "
+ "sender forced to allow.");
}
@@ -1270,7 +1232,6 @@
if (getService().isAssociatedCompanionApp(
UserHandle.getUserId(state.mRealCallingUid), state.mRealCallingUid)) {
return new BalVerdict(BAL_ALLOW_ALLOWLISTED_COMPONENT,
- /*background*/ false,
"realCallingUid is a companion app.");
}
return BalVerdict.BLOCK;
diff --git a/services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java b/services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java
index ccf1aed..31b2394 100644
--- a/services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java
+++ b/services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java
@@ -125,27 +125,27 @@
long lastActivityFinishTime) {
// Allow if the proc is instrumenting with background activity starts privs.
if (checkConfiguration.checkOtherExemptions && hasBackgroundActivityStartPrivileges) {
- return new BalVerdict(BAL_ALLOW_PERMISSION, /*background*/ true,
+ return new BalVerdict(BAL_ALLOW_PERMISSION, /*background*/
"process instrumenting with background activity starts privileges");
}
// Allow if the flag was explicitly set.
if (checkConfiguration.checkOtherExemptions && isBackgroundStartAllowedByToken(uid,
packageName, checkConfiguration.isCheckingForFgsStart)) {
return new BalVerdict(balImprovedMetrics() ? BAL_ALLOW_TOKEN : BAL_ALLOW_PERMISSION,
- /*background*/ true, "process allowed by token");
+ /*background*/ "process allowed by token");
}
// Allow if the caller is bound by a UID that's currently foreground.
// But still respect the appSwitchState.
if (checkConfiguration.checkVisibility && appSwitchState != APP_SWITCH_DISALLOW
&& isBoundByForegroundUid()) {
return new BalVerdict(balImprovedMetrics() ? BAL_ALLOW_BOUND_BY_FOREGROUND
- : BAL_ALLOW_VISIBLE_WINDOW, /*background*/ false,
+ : BAL_ALLOW_VISIBLE_WINDOW, /*background*/
"process bound by foreground uid");
}
// Allow if the caller has an activity in any foreground task.
if (checkConfiguration.checkOtherExemptions && hasActivityInVisibleTask
&& appSwitchState != APP_SWITCH_DISALLOW) {
- return new BalVerdict(BAL_ALLOW_FOREGROUND, /*background*/ false,
+ return new BalVerdict(BAL_ALLOW_FOREGROUND, /*background*/
"process has activity in foreground task");
}
@@ -160,7 +160,7 @@
long timeSinceLastStartOrFinish = now - Math.max(lastActivityLaunchTime,
lastActivityFinishTime);
if (timeSinceLastStartOrFinish < checkConfiguration.gracePeriod) {
- return new BalVerdict(BAL_ALLOW_GRACE_PERIOD, /*background*/ true,
+ return new BalVerdict(BAL_ALLOW_GRACE_PERIOD, /*background*/
"within " + checkConfiguration.gracePeriod + "ms grace period ("
+ timeSinceLastStartOrFinish + "ms)");
}
diff --git a/services/core/java/com/android/server/wm/ClientLifecycleManager.java b/services/core/java/com/android/server/wm/ClientLifecycleManager.java
index d291d99..98e453b 100644
--- a/services/core/java/com/android/server/wm/ClientLifecycleManager.java
+++ b/services/core/java/com/android/server/wm/ClientLifecycleManager.java
@@ -25,6 +25,7 @@
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.os.Build;
+import android.os.DeadObjectException;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.Trace;
@@ -66,64 +67,80 @@
/**
* Schedules a transaction, which may consist of multiple callbacks and a lifecycle request.
* @param transaction A sequence of client transaction items.
- * @throws RemoteException
- *
+ * @return {@code false} if the transaction failed because of {@link RemoteException}.
* @see ClientTransaction
*/
@VisibleForTesting
- void scheduleTransaction(@NonNull ClientTransaction transaction) throws RemoteException {
- final IApplicationThread client = transaction.getClient();
- try {
- transaction.schedule();
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to deliver transaction for " + client
- + "\ntransaction=" + transaction);
- throw e;
+ boolean scheduleTransaction(@NonNull ClientTransaction transaction) {
+ final RemoteException e = transaction.schedule();
+ if (e != null) {
+ final WindowProcessController wpc = mWms.mAtmService.getProcessController(
+ transaction.getClient());
+ Slog.w(TAG, "Failed to deliver transaction for " + wpc + "\ntransaction=" + this, e);
+ return false;
}
+ return true;
}
/**
* Similar to {@link #scheduleTransactionItem}, but it sends the transaction immediately and
* it can be called without WM lock.
*
+ * @return {@code false} if the transaction failed because of {@link RemoteException}.
* @see WindowProcessController#setReportedProcState(int)
*/
- void scheduleTransactionItemNow(@NonNull IApplicationThread client,
+ boolean scheduleTransactionItemNow(@NonNull IApplicationThread client,
@NonNull ClientTransactionItem transactionItem) throws RemoteException {
final ClientTransaction clientTransaction = new ClientTransaction(client);
clientTransaction.addTransactionItem(transactionItem);
- scheduleTransaction(clientTransaction);
+ final boolean res = scheduleTransaction(clientTransaction);
+ if (!com.android.window.flags.Flags.cleanupDispatchPendingTransactionsRemoteException()
+ && !res) {
+ throw new DeadObjectException();
+ }
+ return res;
}
/**
- * Schedules a transaction with the given item, delivery to client application.
+ * Schedules a transaction with the given item, delivery to client application, which may be
+ * queued to dispatched later.
*
- * @throws RemoteException
+ * @return {@code false} if the transaction was dispatched immediately, but failed because of
+ * {@link RemoteException}. If the transaction is queued, any failure will be ignored.
* @see ClientTransactionItem
*/
- void scheduleTransactionItem(@NonNull IApplicationThread client,
+ boolean scheduleTransactionItem(@NonNull IApplicationThread client,
@NonNull ClientTransactionItem item) throws RemoteException {
// Wait until RootWindowContainer#performSurfacePlacementNoTrace to dispatch all pending
// transactions at once.
final ClientTransaction clientTransaction = getOrCreatePendingTransaction(client);
clientTransaction.addTransactionItem(item);
- onClientTransactionItemScheduled(clientTransaction, false /* shouldDispatchImmediately */);
+ final boolean res = onClientTransactionItemScheduled(clientTransaction,
+ false /* shouldDispatchImmediately */);
+ if (!com.android.window.flags.Flags.cleanupDispatchPendingTransactionsRemoteException()
+ && !res) {
+ throw new DeadObjectException();
+ }
+ return res;
}
/**
- * Schedules a transaction with the given items, delivery to client application.
+ * Schedules a transaction with the given items, delivery to client application, which may be
+ * queued to dispatched later.
*
- * @throws RemoteException
+ * @return {@code false} if the transaction was dispatched immediately, but failed because of
+ * {@link RemoteException}. If the transaction is queued, any failure will be ignored.
* @see ClientTransactionItem
*/
- void scheduleTransactionItems(@NonNull IApplicationThread client,
+ boolean scheduleTransactionItems(@NonNull IApplicationThread client,
@NonNull ClientTransactionItem... items) throws RemoteException {
- scheduleTransactionItems(client, false /* shouldDispatchImmediately */, items);
+ return scheduleTransactionItems(client, false /* shouldDispatchImmediately */, items);
}
/**
- * Schedules a transaction with the given items, delivery to client application.
+ * Schedules a transaction with the given items, delivery to client application, which may be
+ * queued to dispatched later.
*
* @param shouldDispatchImmediately whether or not to dispatch the transaction immediately. This
* should only be {@code true} when it is important to know the
@@ -131,11 +148,11 @@
* launches an app, the server needs to know if the transaction
* is dispatched successfully, and may restart the process if
* not.
- *
- * @throws RemoteException
+ * @return {@code false} if the transaction was dispatched immediately, but failed because of
+ * {@link RemoteException}. If the transaction is queued, any failure will be ignored.
* @see ClientTransactionItem
*/
- void scheduleTransactionItems(@NonNull IApplicationThread client,
+ boolean scheduleTransactionItems(@NonNull IApplicationThread client,
boolean shouldDispatchImmediately,
@NonNull ClientTransactionItem... items) throws RemoteException {
// Wait until RootWindowContainer#performSurfacePlacementNoTrace to dispatch all pending
@@ -147,7 +164,13 @@
clientTransaction.addTransactionItem(items[i]);
}
- onClientTransactionItemScheduled(clientTransaction, shouldDispatchImmediately);
+ final boolean res = onClientTransactionItemScheduled(clientTransaction,
+ shouldDispatchImmediately);
+ if (!com.android.window.flags.Flags.cleanupDispatchPendingTransactionsRemoteException()
+ && !res) {
+ throw new DeadObjectException();
+ }
+ return res;
}
/** Executes all the pending transactions. */
@@ -159,12 +182,7 @@
final int size = mPendingTransactions.size();
for (int i = 0; i < size; i++) {
final ClientTransaction transaction = mPendingTransactions.valueAt(i);
- try {
- scheduleTransaction(transaction);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to deliver pending transaction", e);
- // TODO(b/323801078): apply cleanup for individual transaction item if needed.
- }
+ scheduleTransaction(transaction);
}
mPendingTransactions.clear();
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
@@ -174,12 +192,7 @@
void dispatchPendingTransaction(@NonNull IApplicationThread client) {
final ClientTransaction pendingTransaction = mPendingTransactions.remove(client.asBinder());
if (pendingTransaction != null) {
- try {
- scheduleTransaction(pendingTransaction);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to deliver pending transaction", e);
- // TODO(b/323801078): apply cleanup for individual transaction item if needed.
- }
+ scheduleTransaction(pendingTransaction);
}
}
@@ -211,15 +224,22 @@
return transaction;
}
- /** Must only be called with WM lock. */
- private void onClientTransactionItemScheduled(
+ /**
+ * Must only be called with WM lock.
+ * If the transaction should not be queued, it will be dispatched immediately.
+ *
+ * @return {@code false} if the transaction was dispatched immediately, but failed because of
+ * {@link RemoteException}.
+ */
+ private boolean onClientTransactionItemScheduled(
@NonNull ClientTransaction clientTransaction,
- boolean shouldDispatchImmediately) throws RemoteException {
+ boolean shouldDispatchImmediately) {
if (shouldDispatchImmediately || shouldDispatchPendingTransactionsImmediately()) {
// Dispatch the pending transaction immediately.
mPendingTransactions.remove(clientTransaction.getClient().asBinder());
- scheduleTransaction(clientTransaction);
+ return scheduleTransaction(clientTransaction);
}
+ return true;
}
/** Must only be called with WM lock. */
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/DesktopModeBoundsCalculator.java b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java
index 0106a64..7a959c1 100644
--- a/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java
+++ b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java
@@ -52,6 +52,13 @@
.getInt("persist.wm.debug.desktop_mode_landscape_app_padding", 25);
/**
+ * Proportion of window height top offset with respect to bottom offset, used for central task
+ * positioning. Should be kept in sync with constant in
+ * {@link com.android.wm.shell.desktopmode.DesktopTaskPosition}
+ */
+ public static final float WINDOW_HEIGHT_PROPORTION = 0.375f;
+
+ /**
* Updates launch bounds for an activity with respect to its activity options, window layout,
* android manifest and task configuration.
*/
@@ -63,7 +70,16 @@
final Rect stableBounds = new Rect();
task.getDisplayArea().getStableRect(stableBounds);
- if (options != null && options.getLaunchBounds() != null) {
+ // If the options bounds size is flexible, update size with calculated desired size.
+ final boolean updateOptionBoundsSize = options != null
+ && options.getFlexibleLaunchSize();
+ // If cascading is also enabled, the position of the options bounds must be respected
+ // during the size update.
+ final boolean shouldRespectOptionPosition =
+ updateOptionBoundsSize && DesktopModeFlags.ENABLE_CASCADING_WINDOWS.isTrue();
+
+ if (options != null && options.getLaunchBounds() != null
+ && !updateOptionBoundsSize) {
outBounds.set(options.getLaunchBounds());
logger.accept("inherit-from-options=" + outBounds);
} else if (layout != null) {
@@ -76,26 +92,34 @@
stableBounds);
logger.accept("layout specifies sizes, inheriting size and applying gravity");
} else if (verticalGravity > 0 || horizontalGravity > 0) {
- outBounds.set(calculateInitialBounds(task, activity, stableBounds));
+ outBounds.set(calculateInitialBounds(task, activity, stableBounds, options,
+ shouldRespectOptionPosition));
applyLayoutGravity(verticalGravity, horizontalGravity, outBounds,
stableBounds);
logger.accept("layout specifies gravity, applying desired bounds and gravity");
+ logger.accept("respecting option bounds cascaded position="
+ + shouldRespectOptionPosition);
}
} else {
- outBounds.set(calculateInitialBounds(task, activity, stableBounds));
+ outBounds.set(calculateInitialBounds(task, activity, stableBounds, options,
+ shouldRespectOptionPosition));
logger.accept("layout not specified, applying desired bounds");
+ logger.accept("respecting option bounds cascaded position="
+ + shouldRespectOptionPosition);
}
}
/**
* Calculates the initial bounds required for an application to fill a scale of the display
* bounds without any letterboxing. This is done by taking into account the applications
- * fullscreen size, aspect ratio, orientation and resizability to calculate an area this is
- * compatible with the applications previous configuration.
+ * fullscreen size, aspect ratio, orientation and resizability to calculate an area that is
+ * compatible with the applications previous configuration. These bounds are then cascaded to
+ * either the center or to a cascading position supplied by Shell via the option bounds.
*/
@NonNull
private static Rect calculateInitialBounds(@NonNull Task task,
- @NonNull ActivityRecord activity, @NonNull Rect stableBounds
+ @NonNull ActivityRecord activity, @NonNull Rect stableBounds,
+ @Nullable ActivityOptions options, boolean shouldRespectOptionPosition
) {
// Display bounds not taking into account insets.
final TaskDisplayArea displayArea = task.getDisplayArea();
@@ -172,6 +196,9 @@
}
default -> idealSize;
};
+ if (shouldRespectOptionPosition) {
+ return respectShellCascading(initialSize, stableBounds, options.getLaunchBounds());
+ }
return centerInScreen(initialSize, screenBounds);
}
@@ -266,14 +293,65 @@
* Adjusts bounds to be positioned in the middle of the screen.
*/
@NonNull
- private static Rect centerInScreen(@NonNull Size desiredSize,
+ static Rect centerInScreen(@NonNull Size desiredSize,
@NonNull Rect screenBounds) {
- // TODO(b/325240051): Position apps with bottom heavy offset
- final int heightOffset = (screenBounds.height() - desiredSize.getHeight()) / 2;
+ final int heightOffset = (int)
+ ((screenBounds.height() - desiredSize.getHeight()) * WINDOW_HEIGHT_PROPORTION);
final int widthOffset = (screenBounds.width() - desiredSize.getWidth()) / 2;
final Rect resultBounds = new Rect(0, 0,
desiredSize.getWidth(), desiredSize.getHeight());
resultBounds.offset(screenBounds.left + widthOffset, screenBounds.top + heightOffset);
return resultBounds;
}
+
+ /**
+ * Calculates final initial bounds based on the task's desired size and the cascading anchor
+ * point extracted from the option bounds. Cascading behaviour should be kept in sync with
+ * logic in {@link com.android.wm.shell.desktopmode.DesktopTaskPosition}.
+ */
+ @NonNull
+ private static Rect respectShellCascading(@NonNull Size desiredSize, @NonNull Rect stableBounds,
+ @NonNull Rect optionBounds) {
+ final boolean leftAligned = stableBounds.left == optionBounds.left;
+ final boolean rightAligned = stableBounds.right == optionBounds.right;
+ final boolean topAligned = stableBounds.top == optionBounds.top;
+ final boolean bottomAligned = stableBounds.bottom == optionBounds.bottom;
+ if (leftAligned && topAligned) {
+ // Bounds cascaded to top left, respect top left position anchor point.
+ return new Rect(
+ optionBounds.left,
+ optionBounds.top,
+ optionBounds.left + desiredSize.getWidth(),
+ optionBounds.top + desiredSize.getHeight()
+ );
+ }
+ if (leftAligned && bottomAligned) {
+ // Bounds cascaded to bottom left, respect bottom left position anchor point.
+ return new Rect(
+ optionBounds.left,
+ optionBounds.bottom - desiredSize.getHeight(),
+ optionBounds.left + desiredSize.getWidth(),
+ optionBounds.bottom
+ );
+ }
+ if (rightAligned && topAligned) {
+ // Bounds cascaded to top right, respect top right position anchor point.
+ return new Rect(
+ optionBounds.right - desiredSize.getWidth(),
+ optionBounds.top,
+ optionBounds.right,
+ optionBounds.top + desiredSize.getHeight()
+ );
+ }
+ if (rightAligned && bottomAligned) {
+ // Bounds cascaded to bottom right, respect bottom right position anchor point.
+ return new Rect(
+ optionBounds.right - desiredSize.getWidth(),
+ optionBounds.bottom - desiredSize.getHeight(),
+ optionBounds.right,
+ optionBounds.bottom);
+ }
+ // Bounds not cascaded to any corner, default to center position.
+ return centerInScreen(desiredSize, stableBounds);
+ }
}
diff --git a/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java b/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
index b6f74a0..d466a64 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
@@ -35,6 +42,7 @@
private static final String TAG =
TAG_WITH_CLASS_NAME ? "DesktopModeLaunchParamsModifier" : TAG_ATM;
+
private static final boolean DEBUG = false;
private StringBuilder mLogBuilder;
@@ -74,6 +82,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");
@@ -119,9 +134,73 @@
DesktopModeBoundsCalculator.updateInitialBounds(task, layout, activity, options,
outParams.mBounds, this::appendLog);
appendLog("final desktop mode task bounds set to %s", outParams.mBounds);
+ if (options != null && options.getFlexibleLaunchSize()) {
+ // Return result done to prevent other modifiers from respecting option bounds and
+ // applying further cascading. Since other modifiers are being skipped in this case,
+ // this modifier is now also responsible to respecting the options launch windowing
+ // mode.
+ outParams.mWindowingMode = options.getLaunchWindowingMode();
+ return RESULT_DONE;
+ }
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 50f12c3..574ab05 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -3674,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);
@@ -6570,6 +6575,22 @@
.getKeyguardController().isKeyguardLocked(mDisplayId);
}
+ boolean isKeyguardLockedOrAodShowing() {
+ return isKeyguardLocked() || isAodShowing();
+ }
+
+ /**
+ * @return whether aod is showing for this display
+ */
+ boolean isAodShowing() {
+ final boolean isAodShowing = mRootWindowContainer.mTaskSupervisor
+ .getKeyguardController().isAodShowing(mDisplayId);
+ if (mDisplayId == DEFAULT_DISPLAY && isAodShowing) {
+ return !isKeyguardGoingAway();
+ }
+ return isAodShowing;
+ }
+
/**
* @return whether keyguard is going away on this display
*/
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/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index 6d73739..4eeed5e 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -18,6 +18,7 @@
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.TRANSIT_FLAG_AOD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
@@ -216,6 +217,9 @@
} else if (keyguardShowing && !state.mKeyguardShowing) {
transition.addFlag(TRANSIT_FLAG_KEYGUARD_APPEARING);
}
+ if (mWindowManager.mFlags.mAodTransition && aodShowing && !state.mAodShowing) {
+ transition.addFlag(TRANSIT_FLAG_AOD_APPEARING);
+ }
}
}
// Update the task snapshot if the screen will not be turned off. To make sure that the
@@ -238,19 +242,28 @@
state.mAodShowing = aodShowing;
state.writeEventLog("setKeyguardShown");
- if (keyguardChanged) {
- // Irrelevant to AOD.
- state.mKeyguardGoingAway = false;
- if (keyguardShowing) {
- state.mDismissalRequested = false;
+ if (keyguardChanged || (mWindowManager.mFlags.mAodTransition && aodChanged)) {
+ if (keyguardChanged) {
+ // Irrelevant to AOD.
+ state.mKeyguardGoingAway = false;
+ if (keyguardShowing) {
+ state.mDismissalRequested = false;
+ }
}
if (goingAwayRemoved
- || (keyguardShowing && !Display.isOffState(dc.getDisplayInfo().state))) {
+ || (keyguardShowing && !Display.isOffState(dc.getDisplayInfo().state))
+ || (mWindowManager.mFlags.mAodTransition && aodShowing)) {
// Keyguard decided to show or stopped going away. Send a transition to animate back
// to the locked state before holding the sleep token again
if (!ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) {
- dc.requestTransitionAndLegacyPrepare(
- TRANSIT_TO_FRONT, TRANSIT_FLAG_KEYGUARD_APPEARING, /* trigger= */ null);
+ if (keyguardChanged) {
+ dc.requestTransitionAndLegacyPrepare(TRANSIT_TO_FRONT,
+ TRANSIT_FLAG_KEYGUARD_APPEARING, /* trigger= */ null);
+ }
+ if (mWindowManager.mFlags.mAodTransition && aodChanged && aodShowing) {
+ dc.requestTransitionAndLegacyPrepare(TRANSIT_TO_FRONT,
+ TRANSIT_FLAG_AOD_APPEARING, /* trigger= */ null);
+ }
}
dc.mWallpaperController.adjustWallpaperWindows();
dc.executeAppTransition();
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/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..c78cdaa 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -36,6 +36,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
+import static android.view.WindowManager.TRANSIT_FLAG_AOD_APPEARING;
import static android.view.WindowManager.TRANSIT_FLAG_IS_RECENTS;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_LOCKED;
import static android.view.WindowManager.TRANSIT_OPEN;
@@ -980,6 +981,10 @@
return false;
}
+ boolean isInAodAppearTransition() {
+ return (mFlags & TRANSIT_FLAG_AOD_APPEARING) != 0;
+ }
+
/**
* Specifies configuration change explicitly for the window container, so it can be chosen as
* transition target. This is usually used with transition mode
@@ -3638,11 +3643,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/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index 11c5c93..9b3b445 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -526,6 +526,19 @@
return false;
}
+ boolean isInAodAppearTransition() {
+ if (mCollectingTransition != null && mCollectingTransition.isInAodAppearTransition()) {
+ return true;
+ }
+ for (int i = mWaitingTransitions.size() - 1; i >= 0; --i) {
+ if (mWaitingTransitions.get(i).isInAodAppearTransition()) return true;
+ }
+ for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) {
+ if (mPlayingTransitions.get(i).isInAodAppearTransition()) return true;
+ }
+ return false;
+ }
+
/**
* @return A pair of the transition and restore-behind target for the given {@param container}.
* @param container An ancestor of a transient-launch activity
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index a8b9fed..644417e 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -166,6 +166,14 @@
mFindResults.setWallpaperTarget(w);
return false;
}
+ } else if (mService.mFlags.mAodTransition
+ && mDisplayContent.isKeyguardLockedOrAodShowing()) {
+ if (mService.mPolicy.isKeyguardHostWindow(w.mAttrs)
+ && w.mTransitionController.isInAodAppearTransition()) {
+ if (DEBUG_WALLPAPER) Slog.v(TAG, "Found aod transition wallpaper target: " + w);
+ mFindResults.setWallpaperTarget(w);
+ return true;
+ }
}
final boolean animationWallpaper = animatingContainer != null
@@ -678,7 +686,8 @@
private WallpaperWindowToken getTokenForTarget(WindowState target) {
if (target == null) return null;
WindowState window = mFindResults.getTopWallpaper(
- target.canShowWhenLocked() && mService.isKeyguardLocked());
+ (target.canShowWhenLocked() && mService.isKeyguardLocked())
+ || (mService.mFlags.mAodTransition && mDisplayContent.isAodShowing()));
return window == null ? null : window.mToken.asWallpaperToken();
}
@@ -721,7 +730,9 @@
if (mFindResults.wallpaperTarget == null && mFindResults.useTopWallpaperAsTarget) {
mFindResults.setWallpaperTarget(
- mFindResults.getTopWallpaper(mDisplayContent.isKeyguardLocked()));
+ mFindResults.getTopWallpaper(mService.mFlags.mAodTransition
+ ? mDisplayContent.isKeyguardLockedOrAodShowing()
+ : mDisplayContent.isKeyguardLocked()));
}
}
@@ -885,11 +896,17 @@
if (mDisplayContent.mWmService.mFlags.mEnsureWallpaperInTransitions) {
visibleRequested = mWallpaperTarget != null && mWallpaperTarget.isVisibleRequested();
}
- updateWallpaperTokens(visibleRequested, mDisplayContent.isKeyguardLocked());
+ updateWallpaperTokens(visibleRequested,
+ mService.mFlags.mAodTransition
+ ? mDisplayContent.isKeyguardLockedOrAodShowing()
+ : mDisplayContent.isKeyguardLocked());
ProtoLog.v(WM_DEBUG_WALLPAPER,
"Wallpaper at display %d - visibility: %b, keyguardLocked: %b",
- mDisplayContent.getDisplayId(), visible, mDisplayContent.isKeyguardLocked());
+ mDisplayContent.getDisplayId(), visible,
+ mService.mFlags.mAodTransition
+ ? mDisplayContent.isKeyguardLockedOrAodShowing()
+ : mDisplayContent.isKeyguardLocked());
if (visible && mLastFrozen != mFindResults.isWallpaperTargetForLetterbox) {
mLastFrozen = mFindResults.isWallpaperTargetForLetterbox;
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/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/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index aee32a0..215d6ca 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -3582,14 +3582,7 @@
@GuardedBy("getLockObject()")
private boolean maybeMigrateMemoryTaggingLocked(String backupId) {
- if (!Flags.setMtePolicyCoexistence()) {
- Slog.i(LOG_TAG, "Memory Tagging not migrated because coexistence "
- + "support is disabled.");
- return false;
- }
if (mOwners.isMemoryTaggingMigrated()) {
- // TODO: Remove log after Flags.setMtePolicyCoexistence full rollout.
- Slog.v(LOG_TAG, "Memory Tagging was previously migrated to policy engine.");
return false;
}
@@ -16354,7 +16347,7 @@
private static <V> PolicyDefinition<V> getPolicyDefinitionForIdentifier(
@NonNull String identifier) {
Objects.requireNonNull(identifier);
- if (Flags.setMtePolicyCoexistence() && MEMORY_TAGGING_POLICY.equals(identifier)) {
+ if (MEMORY_TAGGING_POLICY.equals(identifier)) {
return (PolicyDefinition<V>) PolicyDefinition.MEMORY_TAGGING;
} else {
return (PolicyDefinition<V>) getPolicyDefinitionForRestriction(identifier);
@@ -23759,46 +23752,21 @@
Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller));
}
- if (Flags.setMtePolicyCoexistence()) {
- enforcePermission(MANAGE_DEVICE_POLICY_MTE, caller.getPackageName(),
- UserHandle.USER_ALL);
- } else {
- Preconditions.checkCallAuthorization(
- isDefaultDeviceOwner(caller)
- || isProfileOwnerOfOrganizationOwnedDevice(caller));
- }
+ enforcePermission(MANAGE_DEVICE_POLICY_MTE, caller.getPackageName(),
+ UserHandle.USER_ALL);
synchronized (getLockObject()) {
- if (Flags.setMtePolicyCoexistence()) {
- final EnforcingAdmin admin = enforcePermissionAndGetEnforcingAdmin(null,
- MANAGE_DEVICE_POLICY_MTE, callerPackageName, caller.getUserId());
- if (flags != DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY) {
- mDevicePolicyEngine.setGlobalPolicy(
- PolicyDefinition.MEMORY_TAGGING,
- admin,
- new IntegerPolicyValue(flags));
- } else {
- mDevicePolicyEngine.removeGlobalPolicy(
- PolicyDefinition.MEMORY_TAGGING,
- admin);
- }
+ final EnforcingAdmin admin = enforcePermissionAndGetEnforcingAdmin(null,
+ MANAGE_DEVICE_POLICY_MTE, callerPackageName, caller.getUserId());
+ if (flags != DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY) {
+ mDevicePolicyEngine.setGlobalPolicy(
+ PolicyDefinition.MEMORY_TAGGING,
+ admin,
+ new IntegerPolicyValue(flags));
} else {
- ActiveAdmin admin =
- getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceLocked();
- if (admin != null) {
- final String memtagProperty = "arm64.memtag.bootctl";
- if (flags == DevicePolicyManager.MTE_ENABLED) {
- mInjector.systemPropertiesSet(memtagProperty, "memtag");
- } else if (flags == DevicePolicyManager.MTE_DISABLED) {
- mInjector.systemPropertiesSet(memtagProperty, "memtag-off");
- } else if (flags == DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY) {
- if (admin.mtePolicy != DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY) {
- mInjector.systemPropertiesSet(memtagProperty, "default");
- }
- }
- admin.mtePolicy = flags;
- saveSettingsLocked(caller.getUserId());
- }
+ mDevicePolicyEngine.removeGlobalPolicy(
+ PolicyDefinition.MEMORY_TAGGING,
+ admin);
}
DevicePolicyEventLogger.createEvent(DevicePolicyEnums.SET_MTE_POLICY)
@@ -23817,10 +23785,6 @@
Preconditions.checkCallAuthorization(isSystemUid(getCallerIdentity()),
"Only system services can call setMtePolicyBySystem");
- if (!Flags.setMtePolicyCoexistence()) {
- throw new UnsupportedOperationException("System can not set MTE policy only");
- }
-
EnforcingAdmin admin = EnforcingAdmin.createSystemEnforcingAdmin(systemEntity);
if (policy != DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY) {
mDevicePolicyEngine.setGlobalPolicy(
@@ -23858,31 +23822,16 @@
@Override
public int getMtePolicy(String callerPackageName) {
final CallerIdentity caller = getCallerIdentity(callerPackageName);
- if (Flags.setMtePolicyCoexistence()) {
- enforcePermission(MANAGE_DEVICE_POLICY_MTE, caller.getPackageName(),
- UserHandle.USER_ALL);
- } else {
- Preconditions.checkCallAuthorization(
- isDefaultDeviceOwner(caller)
- || isProfileOwnerOfOrganizationOwnedDevice(caller)
- || isSystemUid(caller));
- }
+ enforcePermission(MANAGE_DEVICE_POLICY_MTE, caller.getPackageName(),
+ UserHandle.USER_ALL);
synchronized (getLockObject()) {
- if (Flags.setMtePolicyCoexistence()) {
- final EnforcingAdmin admin = enforcePermissionAndGetEnforcingAdmin(null,
- MANAGE_DEVICE_POLICY_MTE, callerPackageName, caller.getUserId());
- final Integer policyFromAdmin = mDevicePolicyEngine.getGlobalPolicySetByAdmin(
- PolicyDefinition.MEMORY_TAGGING, admin);
- return (policyFromAdmin != null ? policyFromAdmin
- : DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY);
- } else {
- ActiveAdmin admin =
- getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceLocked();
- return admin != null
- ? admin.mtePolicy
- : DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY;
- }
+ final EnforcingAdmin admin = enforcePermissionAndGetEnforcingAdmin(null,
+ MANAGE_DEVICE_POLICY_MTE, callerPackageName, caller.getUserId());
+ final Integer policyFromAdmin = mDevicePolicyEngine.getGlobalPolicySetByAdmin(
+ PolicyDefinition.MEMORY_TAGGING, admin);
+ return (policyFromAdmin != null ? policyFromAdmin
+ : DevicePolicyManager.MTE_NOT_CONTROLLED_BY_POLICY);
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java b/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
index caaf096..6dfe08c 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/OwnersData.java
@@ -433,10 +433,8 @@
out.attributeBoolean(null, ATTR_RESET_PASSWORD_WITH_TOKEN_MIGRATED,
mResetPasswordWithTokenMigrated);
}
- if (Flags.setMtePolicyCoexistence()) {
- out.attributeBoolean(null, ATTR_MEMORY_TAGGING_MIGRATED,
- mMemoryTaggingMigrated);
- }
+ out.attributeBoolean(null, ATTR_MEMORY_TAGGING_MIGRATED,
+ mMemoryTaggingMigrated);
if (Flags.setKeyguardDisabledFeaturesCoexistence()) {
out.attributeBoolean(null, ATTR_SET_KEYGUARD_DISABLED_FEATURES_MIGRATED,
mSetKeyguardDisabledFeaturesMigrated);
@@ -514,8 +512,7 @@
mResetPasswordWithTokenMigrated = Flags.resetPasswordWithTokenCoexistence()
&& parser.getAttributeBoolean(null,
ATTR_RESET_PASSWORD_WITH_TOKEN_MIGRATED, false);
- mMemoryTaggingMigrated = Flags.setMtePolicyCoexistence()
- && parser.getAttributeBoolean(null,
+ mMemoryTaggingMigrated = parser.getAttributeBoolean(null,
ATTR_MEMORY_TAGGING_MIGRATED, false);
mSetKeyguardDisabledFeaturesMigrated =
Flags.setKeyguardDisabledFeaturesCoexistence()
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/supervision/java/com/android/server/supervision/SupervisionService.java b/services/supervision/java/com/android/server/supervision/SupervisionService.java
index f731b50..bb6339c 100644
--- a/services/supervision/java/com/android/server/supervision/SupervisionService.java
+++ b/services/supervision/java/com/android/server/supervision/SupervisionService.java
@@ -64,6 +64,18 @@
public class SupervisionService extends ISupervisionManager.Stub {
private static final String LOG_TAG = "SupervisionService";
+ /**
+ * Activity action: Requests user confirmation of supervision credentials.
+ *
+ * <p>Use {@link Activity#startActivityForResult} to launch this activity. The result will be
+ * {@link Activity#RESULT_OK} if credentials are valid.
+ *
+ * <p>If supervision credentials are not configured, this action initiates the setup flow.
+ */
+ @VisibleForTesting
+ static final String ACTION_CONFIRM_SUPERVISION_CREDENTIALS =
+ "android.app.supervision.action.CONFIRM_SUPERVISION_CREDENTIALS";
+
// TODO(b/362756788): Does this need to be a LockGuard lock?
private final Object mLockDoNoUseDirectly = new Object();
@@ -81,25 +93,6 @@
}
/**
- * Creates an {@link Intent} that can be used with {@link Context#startActivity(Intent)} to
- * launch the activity to verify supervision credentials.
- *
- * <p>A valid {@link Intent} is always returned if supervision is enabled at the time this
- * method is called, the launched activity still need to perform validity checks as the
- * supervision state can change when it's launched. A null intent is returned if supervision is
- * disabled at the time of this method call.
- *
- * <p>A result code of {@link android.app.Activity#RESULT_OK} indicates successful verification
- * of the supervision credentials.
- */
- @Override
- @Nullable
- public Intent createConfirmSupervisionCredentialsIntent() {
- // TODO(b/392961554): Implement createAuthenticationIntent API
- throw new UnsupportedOperationException();
- }
-
- /**
* Returns whether supervision is enabled for the given user.
*
* <p>Supervision is automatically enabled when the supervision app becomes the profile owner or
@@ -139,6 +132,31 @@
}
}
+ /**
+ * Creates an {@link Intent} that can be used with {@link Context#startActivity(Intent)} to
+ * launch the activity to verify supervision credentials.
+ *
+ * <p>A valid {@link Intent} is always returned if supervision is enabled at the time this
+ * method is called, the launched activity still need to perform validity checks as the
+ * supervision state can change when it's launched. A null intent is returned if supervision is
+ * disabled at the time of this method call.
+ *
+ * <p>A result code of {@link android.app.Activity#RESULT_OK} indicates successful verification
+ * of the supervision credentials.
+ */
+ @Override
+ @Nullable
+ public Intent createConfirmSupervisionCredentialsIntent() {
+ // TODO(b/392961554): (1) Return null if supervision is not enabled.
+ // (2) check if PIN exists before return a valid intent.
+ enforceAnyPermission(QUERY_USERS, MANAGE_USERS);
+ final Intent intent = new Intent(ACTION_CONFIRM_SUPERVISION_CREDENTIALS);
+ // explicitly set the package for security
+ intent.setPackage("com.android.settings");
+
+ return intent;
+ }
+
@Override
public void onShellCommand(
@Nullable FileDescriptor in,
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/pm/UserManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceMockedTest.java
similarity index 99%
rename from services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
rename to services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceMockedTest.java
index 6ad3df1..ac11216 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceMockedTest.java
@@ -102,11 +102,12 @@
import java.io.IOException;
/**
- * Run as {@code atest FrameworksMockingServicesTests:com.android.server.pm.UserManagerServiceTest}
+ * Run as {@code atest
+ * FrameworksMockingServicesTests:com.android.server.pm.UserManagerServiceMockedTest}
*/
-public final class UserManagerServiceTest {
+public final class UserManagerServiceMockedTest {
- private static final String TAG = UserManagerServiceTest.class.getSimpleName();
+ private static final String TAG = UserManagerServiceMockedTest.class.getSimpleName();
/**
* Id for a simple user (that doesn't have profiles).
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/accessibility/autoclick/AutoclickControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
index 17d8882..ea83825 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
@@ -571,6 +571,95 @@
assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting()).isNotEqualTo(-1);
}
+ @Test
+ @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
+ public void pauseButton_panelNotHovered_clickNotTriggeredWhenPaused() {
+ injectFakeMouseActionHoverMoveEvent();
+
+ // Pause autoclick and ensure the panel is not hovered.
+ AutoclickTypePanel mockAutoclickTypePanel = mock(AutoclickTypePanel.class);
+ when(mockAutoclickTypePanel.isPaused()).thenReturn(true);
+ when(mockAutoclickTypePanel.isHovered()).thenReturn(false);
+ mController.mAutoclickTypePanel = mockAutoclickTypePanel;
+
+ // Send hover move event.
+ MotionEvent hoverMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 100,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30f,
+ /* y= */ 0f,
+ /* metaState= */ 0);
+ hoverMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(hoverMove, hoverMove, /* policyFlags= */ 0);
+
+ // Verify click is not triggered.
+ assertThat(mController.mClickScheduler.getIsActiveForTesting()).isFalse();
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting()).isEqualTo(-1);
+ }
+
+ @Test
+ @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
+ public void pauseButton_panelHovered_clickTriggeredWhenPaused() {
+ injectFakeMouseActionHoverMoveEvent();
+
+ // Pause autoclick and hover the panel.
+ AutoclickTypePanel mockAutoclickTypePanel = mock(AutoclickTypePanel.class);
+ when(mockAutoclickTypePanel.isPaused()).thenReturn(true);
+ when(mockAutoclickTypePanel.isHovered()).thenReturn(true);
+ mController.mAutoclickTypePanel = mockAutoclickTypePanel;
+
+ // Send hover move event.
+ MotionEvent hoverMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 100,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30f,
+ /* y= */ 0f,
+ /* metaState= */ 0);
+ hoverMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(hoverMove, hoverMove, /* policyFlags= */ 0);
+
+ // Verify click is triggered.
+ assertThat(mController.mClickScheduler.getIsActiveForTesting()).isTrue();
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting()).isNotEqualTo(-1);
+ }
+
+ @Test
+ @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
+ public void pauseButton_unhoveringCancelsClickWhenPaused() {
+ injectFakeMouseActionHoverMoveEvent();
+
+ // Pause autoclick and hover the panel.
+ AutoclickTypePanel mockAutoclickTypePanel = mock(AutoclickTypePanel.class);
+ when(mockAutoclickTypePanel.isPaused()).thenReturn(true);
+ when(mockAutoclickTypePanel.isHovered()).thenReturn(true);
+ mController.mAutoclickTypePanel = mockAutoclickTypePanel;
+
+ // Send hover move event.
+ MotionEvent hoverMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 100,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30f,
+ /* y= */ 0f,
+ /* metaState= */ 0);
+ hoverMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(hoverMove, hoverMove, /* policyFlags= */ 0);
+
+ // Verify click is triggered.
+ assertThat(mController.mClickScheduler.getIsActiveForTesting()).isTrue();
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting()).isNotEqualTo(-1);
+
+ // Now simulate the pointer being moved outside the panel.
+ when(mockAutoclickTypePanel.isHovered()).thenReturn(false);
+ mController.clickPanelController.onHoverChange(/* hovered= */ false);
+
+ // Verify pending click is canceled.
+ assertThat(mController.mClickScheduler.getIsActiveForTesting()).isFalse();
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting()).isEqualTo(-1);
+ }
+
private void injectFakeMouseActionHoverMoveEvent() {
MotionEvent event = getFakeMotionHoverMoveEvent();
event.setSource(InputDevice.SOURCE_MOUSE);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickLinearLayoutTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickLinearLayoutTest.java
new file mode 100644
index 0000000..9e629f7c
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickLinearLayoutTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+
+package com.android.server.accessibility.autoclick;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableContext;
+import android.view.MotionEvent;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/** Test cases for {@link AutoclickLinearLayout}. */
+@RunWith(AndroidTestingRunner.class)
+public class AutoclickLinearLayoutTest {
+ private boolean mHovered;
+
+ private final AutoclickLinearLayout.OnHoverChangedListener mListener =
+ new AutoclickLinearLayout.OnHoverChangedListener() {
+ @Override
+ public void onHoverChanged(boolean hovered) {
+ mHovered = hovered;
+ }
+ };
+
+ @Rule
+ public TestableContext mTestableContext =
+ new TestableContext(getInstrumentation().getContext());
+ private AutoclickLinearLayout mAutoclickLinearLayout;
+
+ @Before
+ public void setUp() {
+ mAutoclickLinearLayout = new AutoclickLinearLayout(mTestableContext);
+ }
+
+ @Test
+ public void autoclickLinearLayout_hoverChangedListener_setHovered() {
+ mHovered = false;
+ mAutoclickLinearLayout.setOnHoverChangedListener(mListener);
+ mAutoclickLinearLayout.onHoverChanged(/* hovered= */ true);
+ assertThat(mHovered).isTrue();
+ }
+
+ @Test
+ public void autoclickLinearLayout_hoverChangedListener_setNotHovered() {
+ mHovered = true;
+
+ mAutoclickLinearLayout.setOnHoverChangedListener(mListener);
+ mAutoclickLinearLayout.onHoverChanged(/* hovered= */ false);
+ assertThat(mHovered).isFalse();
+ }
+
+ @Test
+ public void autoclickLinearLayout_onInterceptHoverEvent_hovered() {
+ mAutoclickLinearLayout.setHovered(false);
+ mAutoclickLinearLayout.onInterceptHoverEvent(
+ getFakeMotionEvent(MotionEvent.ACTION_HOVER_ENTER));
+ assertThat(mAutoclickLinearLayout.isHovered()).isTrue();
+
+ mAutoclickLinearLayout.setHovered(false);
+ mAutoclickLinearLayout.onInterceptHoverEvent(
+ getFakeMotionEvent(MotionEvent.ACTION_HOVER_MOVE));
+ assertThat(mAutoclickLinearLayout.isHovered()).isTrue();
+ }
+
+ @Test
+ public void autoclickLinearLayout_onInterceptHoverEvent_hoveredExit() {
+ mAutoclickLinearLayout.setHovered(true);
+ mAutoclickLinearLayout.onInterceptHoverEvent(
+ getFakeMotionEvent(MotionEvent.ACTION_HOVER_EXIT));
+ assertThat(mAutoclickLinearLayout.isHovered()).isFalse();
+ }
+
+ private MotionEvent getFakeMotionEvent(int motionEventAction) {
+ return MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 0,
+ /* action= */ motionEventAction,
+ /* x= */ 0,
+ /* y= */ 0,
+ /* metaState= */ 0);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
index 9e12340..f7b16c8 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
@@ -78,6 +78,7 @@
private @AutoclickType int mActiveClickType = AUTOCLICK_TYPE_LEFT_CLICK;
private boolean mPaused;
+ private boolean mHovered;
private final ClickPanelControllerInterface clickPanelController =
new ClickPanelControllerInterface() {
@@ -90,6 +91,11 @@
public void toggleAutoclickPause(boolean paused) {
mPaused = paused;
}
+
+ @Override
+ public void onHoverChange(boolean hovered) {
+ mHovered = hovered;
+ }
};
@Before
@@ -412,6 +418,33 @@
upEvent.recycle();
}
+ @Test
+ public void hovered_IsHovered() {
+ AutoclickLinearLayout mContext = mAutoclickTypePanel.getContentViewForTesting();
+
+ assertThat(mAutoclickTypePanel.isHovered()).isFalse();
+ mContext.onInterceptHoverEvent(getFakeMotionHoverMoveEvent());
+ assertThat(mAutoclickTypePanel.isHovered()).isTrue();
+ }
+
+ @Test
+ public void hovered_OnHoverChange_isHovered() {
+ AutoclickLinearLayout mContext = mAutoclickTypePanel.getContentViewForTesting();
+
+ mHovered = false;
+ mContext.onHoverChanged(true);
+ assertThat(mHovered).isTrue();
+ }
+
+ @Test
+ public void hovered_OnHoverChange_isNotHovered() {
+ AutoclickLinearLayout mContext = mAutoclickTypePanel.getContentViewForTesting();
+
+ mHovered = true;
+ mContext.onHoverChanged(false);
+ assertThat(mHovered).isFalse();
+ }
+
private void verifyButtonHasSelectedStyle(@NonNull LinearLayout button) {
GradientDrawable gradientDrawable = (GradientDrawable) button.getBackground();
assertThat(gradientDrawable.getColor().getDefaultColor())
@@ -426,4 +459,14 @@
assertThat(params.x).isEqualTo(expectedPosition[2]);
assertThat(params.y).isEqualTo(expectedPosition[3]);
}
+
+ private MotionEvent getFakeMotionHoverMoveEvent() {
+ return MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 0,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 0,
+ /* y= */ 0,
+ /* metaState= */ 0);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/appop/DiscreteAppOpSqlPersistenceTest.java b/services/tests/servicestests/src/com/android/server/appop/DiscreteAppOpSqlPersistenceTest.java
index 8471307..01fee7f 100644
--- a/services/tests/servicestests/src/com/android/server/appop/DiscreteAppOpSqlPersistenceTest.java
+++ b/services/tests/servicestests/src/com/android/server/appop/DiscreteAppOpSqlPersistenceTest.java
@@ -226,9 +226,9 @@
mDiscreteRegistry.recordDiscreteAccess(event2);
}
- /** This clears in-memory cache and push records into the database. */
private void flushDiscreteOpsToDatabase() {
- mDiscreteRegistry.writeAndClearOldAccessHistory();
+ // This clears in-memory cache and push records from cache into the database.
+ mDiscreteRegistry.shutdown();
}
/**
diff --git a/services/tests/servicestests/src/com/android/server/appop/DiscreteOpsMigrationAndRollbackTest.java b/services/tests/servicestests/src/com/android/server/appop/DiscreteOpsMigrationAndRollbackTest.java
index 21cc3ba..8eea1c7 100644
--- a/services/tests/servicestests/src/com/android/server/appop/DiscreteOpsMigrationAndRollbackTest.java
+++ b/services/tests/servicestests/src/com/android/server/appop/DiscreteOpsMigrationAndRollbackTest.java
@@ -106,7 +106,8 @@
opEvent.getDuration(), opEvent.getAttributionFlags(),
(int) opEvent.getChainId(), DiscreteOpsRegistry.ACCESS_TYPE_NOTE_OP);
}
- sqlRegistry.writeAndClearOldAccessHistory();
+ // flush records from cache to the database.
+ sqlRegistry.shutdown();
assertThat(sqlRegistry.getAllDiscreteOps().size()).isEqualTo(RECORD_COUNT);
assertThat(sqlRegistry.getLargestAttributionChainId()).isEqualTo(RECORD_COUNT);
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/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/servicestests/src/com/android/server/supervision/SupervisionServiceTest.kt b/services/tests/servicestests/src/com/android/server/supervision/SupervisionServiceTest.kt
index da02278..fbf9065 100644
--- a/services/tests/servicestests/src/com/android/server/supervision/SupervisionServiceTest.kt
+++ b/services/tests/servicestests/src/com/android/server/supervision/SupervisionServiceTest.kt
@@ -39,6 +39,7 @@
import com.android.server.LocalServices
import com.android.server.SystemService.TargetUser
import com.android.server.pm.UserManagerInternal
+import com.android.server.supervision.SupervisionService.ACTION_CONFIRM_SUPERVISION_CREDENTIALS
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
@@ -247,6 +248,13 @@
assertThat(userData.supervisionLockScreenOptions).isNull()
}
+ @Test
+ fun createConfirmSupervisionCredentialsIntent() {
+ val intent = checkNotNull(service.createConfirmSupervisionCredentialsIntent())
+ assertThat(intent.action).isEqualTo(ACTION_CONFIRM_SUPERVISION_CREDENTIALS)
+ assertThat(intent.getPackage()).isEqualTo("com.android.settings")
+ }
+
private val systemSupervisionPackage: String
get() = context.getResources().getString(R.string.config_systemSupervision)
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
index 4a977be..4eac1d1 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
@@ -66,6 +66,8 @@
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.drawable.AdaptiveIconDrawable;
@@ -620,6 +622,7 @@
}
@Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
public void testAutoGrouped_singleOngoing_removeOngoingChild() {
final String pkg = "package";
@@ -639,7 +642,7 @@
}
// remove ongoing
- mGroupHelper.onNotificationRemoved(notifications.get(0));
+ mGroupHelper.onNotificationRemoved(notifications.get(0), new ArrayList<>(), false);
// Summary is no longer ongoing
verify(mCallback).updateAutogroupSummary(anyInt(), anyString(), anyString(),
@@ -776,7 +779,7 @@
}
// remove ongoing
- mGroupHelper.onNotificationRemoved(notifications.get(1));
+ mGroupHelper.onNotificationRemoved(notifications.get(1), new ArrayList<>(), false);
// Summary is still ongoing
verify(mCallback, times(1)).updateAutogroupSummary(anyInt(), anyString(), anyString(),
@@ -936,7 +939,7 @@
mGroupHelper.onNotificationPosted(r, false);
}
- mGroupHelper.onNotificationRemoved(notifications.get(0));
+ mGroupHelper.onNotificationRemoved(notifications.get(0), new ArrayList<>(), false);
// Summary should still be autocancelable
verify(mCallback, times(1)).updateAutogroupSummary(anyInt(), anyString(), anyString(),
@@ -944,6 +947,7 @@
}
@Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
@DisableFlags(android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST)
public void testDropToZeroRemoveGroup_disableFlag() {
final String pkg = "package";
@@ -963,19 +967,20 @@
Mockito.reset(mCallback);
for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
- mGroupHelper.onNotificationRemoved(posted.remove(0));
+ mGroupHelper.onNotificationRemoved(posted.remove(0), new ArrayList<>(), false);
}
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString(), anyString());
Mockito.reset(mCallback);
- mGroupHelper.onNotificationRemoved(posted.remove(0));
+ mGroupHelper.onNotificationRemoved(posted.remove(0), new ArrayList<>(), false);
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, times(1)).removeAutoGroupSummary(anyInt(), anyString(), anyString());
}
@Test
- @EnableFlags(android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST)
+ @EnableFlags({FLAG_NOTIFICATION_FORCE_GROUPING,
+ android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST})
public void testDropToZeroRemoveGroup() {
final String pkg = "package";
ArrayList<NotificationRecord> posted = new ArrayList<>();
@@ -994,13 +999,13 @@
Mockito.reset(mCallback);
for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
- mGroupHelper.onNotificationRemoved(posted.remove(0));
+ mGroupHelper.onNotificationRemoved(posted.remove(0), new ArrayList<>(), false);
}
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString(), anyString());
Mockito.reset(mCallback);
- mGroupHelper.onNotificationRemoved(posted.remove(0));
+ mGroupHelper.onNotificationRemoved(posted.remove(0), new ArrayList<>(), false);
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, times(1)).removeAutoGroupSummary(anyInt(), anyString(), anyString());
}
@@ -1072,6 +1077,7 @@
}
@Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
@DisableFlags(android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST)
public void testNewNotificationsAddedToAutogroup_ifOriginalNotificationsCanceled_alwaysGroup() {
final String pkg = "package";
@@ -1091,7 +1097,7 @@
Mockito.reset(mCallback);
for (int i = posted.size() - 2; i >= 0; i--) {
- mGroupHelper.onNotificationRemoved(posted.remove(i));
+ mGroupHelper.onNotificationRemoved(posted.remove(i), new ArrayList<>(), false);
}
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString(), anyString());
@@ -1114,7 +1120,8 @@
}
@Test
- @EnableFlags(android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST)
+ @EnableFlags({FLAG_NOTIFICATION_FORCE_GROUPING,
+ android.app.Flags.FLAG_CHECK_AUTOGROUP_BEFORE_POST})
public void testNewNotificationsAddedToAutogroup_ifOriginalNotificationsCanceled() {
final String pkg = "package";
ArrayList<NotificationRecord> posted = new ArrayList<>();
@@ -1134,7 +1141,7 @@
Mockito.reset(mCallback);
for (int i = posted.size() - 2; i >= 0; i--) {
- mGroupHelper.onNotificationRemoved(posted.remove(i));
+ mGroupHelper.onNotificationRemoved(posted.remove(i), new ArrayList<>(), false);
}
verify(mCallback, never()).removeAutoGroup(anyString());
verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString(), anyString());
@@ -1481,7 +1488,7 @@
}
// Remove last notification (the only one with different icon and color)
- mGroupHelper.onNotificationRemoved(notifications.get(lastIdx));
+ mGroupHelper.onNotificationRemoved(notifications.get(lastIdx), new ArrayList<>(), false);
// Summary should be updated to the common icon and color
verify(mCallback, times(1)).updateAutogroupSummary(anyInt(), anyString(), anyString(),
@@ -2162,7 +2169,7 @@
NotificationRecord r = getNotificationRecord(pkg, i, String.valueOf(i),
UserHandle.SYSTEM, "testGrp " + i, false);
r.setOverrideGroupKey(expectedGroupKey);
- mGroupHelper.onNotificationRemoved(r, notificationList);
+ mGroupHelper.onNotificationRemoved(r, notificationList, false);
}
// Check that the autogroup summary is removed
verify(mCallback, times(1)).removeAutoGroupSummary(anyInt(), eq(pkg),
@@ -2206,7 +2213,7 @@
Mockito.reset(mCallback);
for (NotificationRecord r: childrenToRemove) {
notificationList.remove(r);
- mGroupHelper.onNotificationRemoved(r, notificationList);
+ mGroupHelper.onNotificationRemoved(r, notificationList, false);
}
// Only call onGroupedNotificationRemovedWithDelay with the summary notification
mGroupHelper.onGroupedNotificationRemovedWithDelay(summary, notificationList,
@@ -2270,7 +2277,7 @@
Mockito.reset(mCallback);
for (NotificationRecord r: childrenToRemove) {
notificationList.remove(r);
- mGroupHelper.onNotificationRemoved(r, notificationList);
+ mGroupHelper.onNotificationRemoved(r, notificationList, false);
}
// Only call onGroupedNotificationRemovedWithDelay with the summary notification
mGroupHelper.onGroupedNotificationRemovedWithDelay(summary, notificationList,
@@ -2327,7 +2334,7 @@
for (NotificationRecord r: notificationList) {
if (r.getGroupKey().contains(groupToRemove)) {
r.isCanceled = true;
- mGroupHelper.onNotificationRemoved(r, notificationList);
+ mGroupHelper.onNotificationRemoved(r, notificationList, false);
}
}
// Only call onGroupedNotificationRemovedWithDelay with the summary notification
@@ -2452,7 +2459,7 @@
true);
assertThat(GroupHelper.getSection(notifToInvalidate)).isNull();
notificationList.remove(notifToInvalidate);
- mGroupHelper.onNotificationRemoved(notifToInvalidate, notificationList);
+ mGroupHelper.onNotificationRemoved(notifToInvalidate, notificationList, false);
// Check that the autogroup was updated
verify(mCallback, never()).removeAutoGroup(anyString());
@@ -4023,7 +4030,7 @@
//Cancel child 0 => remove cached summary
childToRemove.isCanceled = true;
notificationListAfterGrouping.remove(childToRemove);
- mGroupHelper.onNotificationRemoved(childToRemove, notificationListAfterGrouping);
+ mGroupHelper.onNotificationRemoved(childToRemove, notificationListAfterGrouping, false);
CachedSummary cachedSummary = mGroupHelper.findCanceledSummary(pkg, String.valueOf(id), id,
UserHandle.SYSTEM.getIdentifier());
assertThat(cachedSummary).isNull();
@@ -4399,4 +4406,41 @@
"PeopleSection(priority)");
}
+ @Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
+ public void onNotificationRemoved_lastChildOfCachedSummary_firesCachedSummaryDeleteIntent() {
+ final List<NotificationRecord> notificationList = new ArrayList<>();
+ final ArrayMap<String, NotificationRecord> summaryByGroup = new ArrayMap<>();
+ final String pkg = "package";
+ NotificationRecord onlyChildOfFirstGroup = null;
+ PendingIntent deleteIntentofFirstSummary = PendingIntent.getActivity(mContext, 1,
+ new Intent(), PendingIntent.FLAG_IMMUTABLE);
+ // Post singleton groups, above forced group limit, so they are force grouped
+ for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+ NotificationRecord summary = getNotificationRecord(pkg, i,
+ String.valueOf(i), UserHandle.SYSTEM, "testGrp " + i, true);
+ notificationList.add(summary);
+ NotificationRecord child = getNotificationRecord(pkg, i + 42,
+ String.valueOf(i + 42), UserHandle.SYSTEM, "testGrp " + i, false);
+ notificationList.add(child);
+ summaryByGroup.put(summary.getGroupKey(), summary);
+ if (i == 0) {
+ onlyChildOfFirstGroup = child;
+ summary.getNotification().deleteIntent = deleteIntentofFirstSummary;
+ }
+ mGroupHelper.onNotificationPostedWithDelay(child, notificationList, summaryByGroup);
+ summary.isCanceled = true; // simulate removing the app summary
+ mGroupHelper.onNotificationPostedWithDelay(summary, notificationList, summaryByGroup);
+ }
+ // Sparse group autogrouping would've removed the summary.
+ notificationList.remove(0);
+
+ // Now remove the only child of the first (force-grouped, cuz sparse) group.
+ notificationList.remove(0);
+ onlyChildOfFirstGroup.isCanceled = true;
+ mGroupHelper.onNotificationRemoved(onlyChildOfFirstGroup, notificationList, true);
+
+ verify(mCallback).sendAppProvidedSummaryDeleteIntent(eq(pkg),
+ eq(deleteIntentofFirstSummary));
+ }
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 37ab541..3727bbe 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -349,6 +349,7 @@
import com.google.android.collect.Lists;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
@@ -2788,8 +2789,8 @@
nr1.getSbn().getId(), nr1.getSbn().getUserId());
waitForIdle();
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr0), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr1), any());
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr0), any(), eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr1), any(), eq(false));
// GroupHelper would send 'remove summary' event
mService.clearAutogroupSummaryLocked(nr1.getUserId(), nr1.getSbn().getPackageName(),
@@ -3155,8 +3156,8 @@
waitForIdle();
// Check that onGroupedNotificationRemovedWithDelay was called only once
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r1), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r2), any());
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r1), any(), eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r2), any(), eq(false));
verify(mGroupHelper, times(1)).onGroupedNotificationRemovedWithDelay(eq(summary), any(),
any());
}
@@ -3201,9 +3202,9 @@
waitForIdle();
// Check that onGroupedNotificationRemovedWithDelay was never called: summary was canceled
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r1), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r2), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(summary), any());
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r1), any(), eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(r2), any(), eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(summary), any(), eq(false));
verify(mGroupHelper, never()).onGroupedNotificationRemovedWithDelay(any(), any(), any());
}
@@ -14122,9 +14123,10 @@
waitForIdle();
// Check that child notifications are also removed
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(aggregateSummary), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr0), any());
- verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr1), any());
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(aggregateSummary), any(),
+ eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr0), any(), eq(false));
+ verify(mGroupHelper, times(1)).onNotificationRemoved(eq(nr1), any(), eq(false));
// Make sure the summary was removed and not re-posted
assertThat(mService.getNotificationRecordCount()).isEqualTo(0);
@@ -18659,4 +18661,35 @@
}
}
+ @Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
+ public void clearAll_fromUser_willSendDeleteIntentForCachedSummaries() throws Exception {
+ NotificationRecord n = generateNotificationRecord(
+ mTestNotificationChannel, 1, "group", true);
+ mBinderService.enqueueNotificationWithTag(mPkg, mPkg, "tag",
+ n.getSbn().getId(), n.getSbn().getNotification(), n.getSbn().getUserId());
+ waitForIdle();
+ n = Iterables.getOnlyElement(mService.mNotificationList);
+
+ mService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(), n.getUserId());
+ waitForIdle();
+
+ verify(mGroupHelper).onNotificationRemoved(eq(n), any(), eq(true));
+ }
+
+ @Test
+ @EnableFlags(FLAG_NOTIFICATION_FORCE_GROUPING)
+ public void cancel_fromApp_willNotSendDeleteIntentForCachedSummaries() throws Exception {
+ NotificationRecord n = generateNotificationRecord(
+ mTestNotificationChannel, 1, "group", true);
+ mBinderService.enqueueNotificationWithTag(mPkg, mPkg, "tag",
+ n.getSbn().getId(), n.getSbn().getNotification(), n.getSbn().getUserId());
+ waitForIdle();
+ n = Iterables.getOnlyElement(mService.mNotificationList);
+
+ mBinderService.cancelAllNotifications(mPkg, mUserId);
+ waitForIdle();
+
+ verify(mGroupHelper).onNotificationRemoved(eq(n), any(), eq(false));
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index 301a754..39a849a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -32,6 +32,7 @@
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_IF_ALLOWLISTED;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_NEVER;
+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.RESIZE_MODE_UNRESIZEABLE;
@@ -41,8 +42,8 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.content.pm.ApplicationInfo.CATEGORY_SOCIAL;
import static android.content.pm.ApplicationInfo.CATEGORY_GAME;
+import static android.content.pm.ApplicationInfo.CATEGORY_SOCIAL;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.content.res.Configuration.UI_MODE_TYPE_DESK;
@@ -66,7 +67,6 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
@@ -134,6 +134,7 @@
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteException;
+import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.provider.DeviceConfig;
@@ -196,7 +197,7 @@
// Because the booted state is set, avoid starting real home if there is no task.
doReturn(false).when(mRootWindowContainer).resumeHomeActivity(any(), anyString(), any());
// Do not execute the transaction, because we can't verify the parameter after it recycles.
- doNothing().when(mClientLifecycleManager).scheduleTransaction(any());
+ doReturn(true).when(mClientLifecycleManager).scheduleTransaction(any());
}
private TestStartingWindowOrganizer registerTestStartingWindowOrganizer() {
@@ -266,7 +267,7 @@
break;
}
}
- return null;
+ return true;
}).when(mClientLifecycleManager).scheduleTransaction(any());
activity.setState(STOPPED, "testPausingWhenVisibleFromStopped");
@@ -737,6 +738,8 @@
}
@Test
+ @EnableFlags(Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
public void testOrientation_dontAllowFixedOrientationForCameraCompatFreeformIfNotEnabled() {
final ActivityRecord activity = setupDisplayAndActivityForCameraCompat(
/* isCameraRunning= */ true, WINDOWING_MODE_FREEFORM);
@@ -750,6 +753,22 @@
}
@Test
+ @EnableFlags({Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION})
+ public void testOrientation_dontAllowFixedOrientationForCameraCompatFreeformIfOptedOut() {
+ final ActivityRecord activity = setupDisplayAndActivityForCameraCompat(
+ /* isCameraRunning= */ true, WINDOWING_MODE_FREEFORM);
+
+ // Task in landscape.
+ assertEquals(ORIENTATION_LANDSCAPE, activity.getTask().getConfiguration().orientation);
+ // Activity is not letterboxed.
+ assertEquals(ORIENTATION_LANDSCAPE, activity.getConfiguration().orientation);
+ assertFalse(activity.mAppCompatController.getAspectRatioPolicy()
+ .isLetterboxedForFixedOrientationAndAspectRatio());
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
@EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
public void testOrientation_noFixedOrientationForCameraCompatFreeformIfCameraNotRunning() {
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/BackgroundActivityStartControllerExemptionTests.java b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerExemptionTests.java
index c934c55..e3a8776 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerExemptionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerExemptionTests.java
@@ -486,7 +486,7 @@
// setup state
when(mCallerApp.areBackgroundActivityStartsAllowed(anyInt(), any())).thenReturn(
- new BalVerdict(BAL_ALLOW_FOREGROUND, false, "allowed"));
+ new BalVerdict(BAL_ALLOW_FOREGROUND, "allowed"));
when(mService.getBalAppSwitchesState()).thenReturn(APP_SWITCH_ALLOW);
// prepare call
@@ -523,7 +523,7 @@
mCallerApp);
when(mService.getBalAppSwitchesState()).thenReturn(APP_SWITCH_ALLOW);
when(mCallerApp.areBackgroundActivityStartsAllowed(anyInt(), any())).thenReturn(
- new BalVerdict(BAL_ALLOW_FOREGROUND, false, "allowed"));
+ new BalVerdict(BAL_ALLOW_FOREGROUND, "allowed"));
// prepare call
PendingIntentRecord originatingPendingIntent = mPendingIntentRecord;
@@ -572,7 +572,7 @@
when(mCallerApp.areBackgroundActivityStartsAllowed(anyInt(), any())).thenReturn(
BalVerdict.BLOCK);
when(otherProcess.areBackgroundActivityStartsAllowed(anyInt(), any())).thenReturn(
- new BalVerdict(BAL_ALLOW_FOREGROUND, false, "allowed"));
+ new BalVerdict(BAL_ALLOW_FOREGROUND, "allowed"));
// prepare call
PendingIntentRecord originatingPendingIntent = mPendingIntentRecord;
diff --git a/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerLogTests.java b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerLogTests.java
index 99e730a..cd5f391 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerLogTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerLogTests.java
@@ -92,7 +92,7 @@
@Test
public void intent_visible_noLog() {
useIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "visible");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "visible");
mState.setResultForCaller(finalVerdict);
mState.setResultForRealCaller(BalVerdict.BLOCK);
assertThat(mController.shouldLogStats(finalVerdict, mState)).isFalse();
@@ -101,7 +101,7 @@
@Test
public void intent_saw_log() {
useIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false, "SAW");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, "SAW");
mState.setResultForCaller(finalVerdict);
mState.setResultForRealCaller(BalVerdict.BLOCK);
assertThat(mController.shouldLogStats(finalVerdict, mState)).isTrue();
@@ -111,7 +111,7 @@
@Test
public void pendingIntent_callerOnly_saw_log() {
usePendingIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false, "SAW");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, "SAW");
mState.setResultForCaller(finalVerdict);
mState.setResultForRealCaller(BalVerdict.BLOCK);
assertThat(mController.shouldLogStats(finalVerdict, mState)).isTrue();
@@ -121,7 +121,7 @@
@Test
public void pendingIntent_realCallerOnly_saw_log() {
usePendingIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false, "SAW")
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, "SAW")
.setBasedOnRealCaller();
mState.setResultForCaller(BalVerdict.BLOCK);
mState.setResultForRealCaller(finalVerdict);
@@ -131,7 +131,7 @@
@Test
public void intent_shouldLogIntentActivity() {
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false, "SAW");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, "SAW");
useIntent(APP1_UID);
assertThat(mController.shouldLogIntentActivity(finalVerdict, mState)).isFalse();
useIntent(SYSTEM_UID);
@@ -140,7 +140,7 @@
@Test
public void pendingIntent_shouldLogIntentActivityForCaller() {
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false, "SAW");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, "SAW");
usePendingIntent(APP1_UID, APP2_UID);
assertThat(mController.shouldLogIntentActivity(finalVerdict, mState)).isFalse();
usePendingIntent(SYSTEM_UID, SYSTEM_UID);
@@ -153,7 +153,7 @@
@Test
public void pendingIntent_shouldLogIntentActivityForRealCaller() {
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION, false,
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_SAW_PERMISSION,
"SAW").setBasedOnRealCaller();
usePendingIntent(APP1_UID, APP2_UID);
assertThat(mController.shouldLogIntentActivity(finalVerdict, mState)).isFalse();
@@ -168,7 +168,7 @@
@Test
public void pendingIntent_realCallerOnly_visible_noLog() {
usePendingIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false,
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW,
"visible").setBasedOnRealCaller();
mState.setResultForCaller(BalVerdict.BLOCK);
mState.setResultForRealCaller(finalVerdict);
@@ -178,7 +178,7 @@
@Test
public void pendingIntent_callerOnly_visible_noLog() {
usePendingIntent();
- BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "visible");
+ BalVerdict finalVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "visible");
mState.setResultForCaller(finalVerdict);
mState.setResultForRealCaller(BalVerdict.BLOCK);
assertThat(mController.shouldLogStats(finalVerdict, mState)).isTrue();
diff --git a/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java
index 51706d7..fe9a6e7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java
@@ -305,7 +305,7 @@
@Test
public void testRegularActivityStart_allowedByCaller_isAllowed() {
// setup state
- BalVerdict callerVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false,
+ BalVerdict callerVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW,
"CallerIsVisible");
mController.setCallerVerdict(callerVerdict);
mController.setRealCallerVerdict(BalVerdict.BLOCK);
@@ -340,7 +340,7 @@
@Test
public void testRegularActivityStart_allowedByRealCaller_isAllowed() {
// setup state
- BalVerdict realCallerVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false,
+ BalVerdict realCallerVerdict = new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW,
"RealCallerIsVisible");
mController.setCallerVerdict(BalVerdict.BLOCK);
mController.setRealCallerVerdict(realCallerVerdict);
@@ -373,9 +373,9 @@
public void testRegularActivityStart_allowedByCallerAndRealCaller_returnsCallerVerdict() {
// setup state
BalVerdict callerVerdict =
- new BalVerdict(BAL_ALLOW_PERMISSION, false, "CallerHasPermission");
+ new BalVerdict(BAL_ALLOW_PERMISSION, "CallerHasPermission");
BalVerdict realCallerVerdict =
- new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "RealCallerIsVisible");
+ new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "RealCallerIsVisible");
mController.setCallerVerdict(callerVerdict);
mController.setRealCallerVerdict(realCallerVerdict);
@@ -411,9 +411,9 @@
public void testPendingIntent_allowedByCallerAndRealCallerButOptOut_isBlocked() {
// setup state
BalVerdict callerVerdict =
- new BalVerdict(BAL_ALLOW_PERMISSION, false, "CallerhasPermission");
+ new BalVerdict(BAL_ALLOW_PERMISSION, "CallerhasPermission");
BalVerdict realCallerVerdict =
- new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "RealCallerIsVisible");
+ new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "RealCallerIsVisible");
mController.setCallerVerdict(callerVerdict);
mController.setRealCallerVerdict(realCallerVerdict);
@@ -452,7 +452,7 @@
public void testPendingIntent_allowedByCallerAndOptIn_isAllowed() {
// setup state
BalVerdict callerVerdict =
- new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "CallerIsVisible");
+ new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "CallerIsVisible");
mController.setCallerVerdict(callerVerdict);
mController.setRealCallerVerdict(BalVerdict.BLOCK);
@@ -489,7 +489,7 @@
public void testPendingIntent_allowedByRealCallerAndOptIn_isAllowed() {
// setup state
BalVerdict realCallerVerdict =
- new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, false, "RealCallerIsVisible");
+ new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, "RealCallerIsVisible");
mController.setCallerVerdict(BalVerdict.BLOCK);
mController.setRealCallerVerdict(realCallerVerdict);
@@ -571,7 +571,6 @@
+ "callerApp: mCallerApp; "
+ "inVisibleTask: false; "
+ "balAllowedByPiCreator: BSP.ALLOW_BAL; "
- + "balAllowedByPiCreatorWithHardening: BSP.ALLOW_BAL; "
+ "callerStartMode: MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED; "
+ "hasRealCaller: true; "
+ "isCallForResult: false; "
@@ -674,7 +673,6 @@
+ "callerApp: mCallerApp; "
+ "inVisibleTask: false; "
+ "balAllowedByPiCreator: BSP.NONE; "
- + "balAllowedByPiCreatorWithHardening: BSP.NONE; "
+ "callerStartMode: MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED; "
+ "hasRealCaller: true; "
+ "isCallForResult: false; "
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..f5bec04 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,8 +180,20 @@
}
@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() {
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
+ public void testIsFreeformLetterboxingForCameraAllowed_optInMechanism_notOptedIn_retFalse() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
@@ -185,6 +202,17 @@
}
@Test
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testIsFreeformLetterboxingForCameraAllowed_notOptedOut_returnsTrue() {
+ configureActivity(SCREEN_ORIENTATION_PORTRAIT);
+
+ onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
+
+ assertTrue(mCameraCompatFreeformPolicy.isFreeformLetterboxingForCameraAllowed(mActivity));
+ }
+
+ @Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
@EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
public void testIsFreeformLetterboxingForCameraAllowed_cameraNotRunning_returnsFalse() {
@@ -206,6 +234,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 testIsFreeformLetterboxingForCameraAllowed_optInFreeformCameraRunning_true() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
@@ -330,6 +359,7 @@
@Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
public void testShouldApplyCameraCompatFreeformTreatment_overrideNotEnabled_returnsFalse() {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
@@ -340,6 +370,18 @@
}
@Test
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testShouldApplyCameraCompatFreeformTreatment_notOptedOut_returnsTrue() {
+ configureActivity(SCREEN_ORIENTATION_PORTRAIT);
+
+ onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
+
+ assertTrue(mCameraCompatFreeformPolicy.isTreatmentEnabledForActivity(mActivity,
+ /* checkOrientation */ true));
+ }
+
+ @Test
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
@EnableCompatChanges(OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT)
public void testShouldApplyCameraCompatFreeformTreatment_enabledByOverride_returnsTrue() {
diff --git a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java
index 02ad9db..8d214dd 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ClientLifecycleManagerTests.java
@@ -16,11 +16,13 @@
package com.android.server.wm;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doThrow;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -32,17 +34,19 @@
import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.ClientTransactionItem;
+import android.os.DeadObjectException;
import android.os.IBinder;
import android.os.RemoteException;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
+import com.android.window.flags.Flags;
+
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;
@@ -60,15 +64,11 @@
@Mock
private IApplicationThread mClient;
@Mock
- private IApplicationThread.Stub mNonBinderClient;
- @Mock
private ClientTransaction mTransaction;
@Mock
private ClientTransactionItem mTransactionItem;
@Mock
private ActivityLifecycleItem mLifecycleItem;
- @Captor
- private ArgumentCaptor<ClientTransaction> mTransactionCaptor;
private WindowManagerService mWms;
private ClientLifecycleManager mLifecycleManager;
@@ -83,7 +83,6 @@
doReturn(true).when(mLifecycleItem).isActivityLifecycleItem();
doReturn(mClientBinder).when(mClient).asBinder();
- doReturn(mNonBinderClient).when(mNonBinderClient).asBinder();
}
@Test
@@ -91,13 +90,11 @@
spyOn(mWms.mWindowPlacerLocked);
doReturn(true).when(mWms.mWindowPlacerLocked).isTraversalScheduled();
- // Use non binder client to get non-recycled ClientTransaction.
- mLifecycleManager.scheduleTransactionItem(mNonBinderClient, mTransactionItem);
+ mLifecycleManager.scheduleTransactionItem(mClient, mTransactionItem);
// When there is traversal scheduled, add transaction items to pending.
assertEquals(1, mLifecycleManager.mPendingTransactions.size());
- ClientTransaction transaction =
- mLifecycleManager.mPendingTransactions.get(mNonBinderClient);
+ ClientTransaction transaction = mLifecycleManager.mPendingTransactions.get(mClientBinder);
assertEquals(1, transaction.getTransactionItems().size());
assertEquals(mTransactionItem, transaction.getTransactionItems().get(0));
// TODO(b/324203798): cleanup after remove UnsupportedAppUsage
@@ -108,10 +105,10 @@
// Add new transaction item to the existing pending.
clearInvocations(mLifecycleManager);
- mLifecycleManager.scheduleTransactionItem(mNonBinderClient, mLifecycleItem);
+ mLifecycleManager.scheduleTransactionItem(mClient, mLifecycleItem);
assertEquals(1, mLifecycleManager.mPendingTransactions.size());
- transaction = mLifecycleManager.mPendingTransactions.get(mNonBinderClient);
+ transaction = mLifecycleManager.mPendingTransactions.get(mClientBinder);
assertEquals(2, transaction.getTransactionItems().size());
assertEquals(mTransactionItem, transaction.getTransactionItems().get(0));
assertEquals(mLifecycleItem, transaction.getTransactionItems().get(1));
@@ -124,8 +121,7 @@
@Test
public void testScheduleTransactionItemNow() throws RemoteException {
- // Use non binder client to get non-recycled ClientTransaction.
- mLifecycleManager.scheduleTransactionItemNow(mNonBinderClient, mTransactionItem);
+ mLifecycleManager.scheduleTransactionItemNow(mClient, mTransactionItem);
// Dispatch immediately.
assertTrue(mLifecycleManager.mPendingTransactions.isEmpty());
@@ -137,13 +133,11 @@
spyOn(mWms.mWindowPlacerLocked);
doReturn(true).when(mWms.mWindowPlacerLocked).isTraversalScheduled();
- // Use non binder client to get non-recycled ClientTransaction.
- mLifecycleManager.scheduleTransactionItems(mNonBinderClient, mTransactionItem,
- mLifecycleItem);
+ mLifecycleManager.scheduleTransactionItems(mClient, mTransactionItem, mLifecycleItem);
assertEquals(1, mLifecycleManager.mPendingTransactions.size());
final ClientTransaction transaction =
- mLifecycleManager.mPendingTransactions.get(mNonBinderClient);
+ mLifecycleManager.mPendingTransactions.get(mClientBinder);
assertEquals(2, transaction.getTransactionItems().size());
assertEquals(mTransactionItem, transaction.getTransactionItems().get(0));
assertEquals(mLifecycleItem, transaction.getTransactionItems().get(1));
@@ -160,8 +154,8 @@
spyOn(mWms.mWindowPlacerLocked);
doReturn(true).when(mWms.mWindowPlacerLocked).isTraversalScheduled();
- // Use non binder client to get non-recycled ClientTransaction.
- mLifecycleManager.scheduleTransactionItems(mNonBinderClient,
+ mLifecycleManager.scheduleTransactionItems(
+ mClient,
true /* shouldDispatchImmediately */,
mTransactionItem, mLifecycleItem);
@@ -187,7 +181,7 @@
doReturn(true).when(mWms.mWindowPlacerLocked).isLayoutDeferred();
// Queue transactions during layout deferred.
- mLifecycleManager.scheduleTransactionItem(mNonBinderClient, mLifecycleItem);
+ mLifecycleManager.scheduleTransactionItem(mClient, mLifecycleItem);
verify(mLifecycleManager, never()).scheduleTransaction(any());
@@ -203,4 +197,42 @@
verify(mLifecycleManager).scheduleTransaction(any());
}
+
+ @EnableFlags(Flags.FLAG_CLEANUP_DISPATCH_PENDING_TRANSACTIONS_REMOTE_EXCEPTION)
+ @Test
+ public void testOnRemoteException_returnTrueOnSuccess() throws RemoteException {
+ final boolean res = mLifecycleManager.scheduleTransactionItemNow(mClient, mTransactionItem);
+
+ assertTrue(res);
+ }
+
+ @EnableFlags(Flags.FLAG_CLEANUP_DISPATCH_PENDING_TRANSACTIONS_REMOTE_EXCEPTION)
+ @Test
+ public void testOnRemoteException_returnFalseOnFailure() throws RemoteException {
+ final DeadObjectException e = new DeadObjectException();
+ doThrow(e).when(mClient).scheduleTransaction(any());
+
+ // No exception when flag enabled.
+ final boolean res = mLifecycleManager.scheduleTransactionItemNow(mClient, mTransactionItem);
+
+ assertFalse(res);
+ }
+
+ @EnableFlags(Flags.FLAG_CLEANUP_DISPATCH_PENDING_TRANSACTIONS_REMOTE_EXCEPTION)
+ @Test
+ public void testOnRemoteException_returnTrueForQueueing() throws RemoteException {
+ spyOn(mWms.mWindowPlacerLocked);
+ doReturn(true).when(mWms.mWindowPlacerLocked).isLayoutDeferred();
+ final DeadObjectException e = new DeadObjectException();
+ doThrow(e).when(mClient).scheduleTransaction(any());
+
+ final boolean res = mLifecycleManager.scheduleTransactionItem(mClient, mTransactionItem);
+
+ assertTrue(res);
+
+ doReturn(false).when(mWms.mWindowPlacerLocked).isLayoutDeferred();
+ mLifecycleManager.onLayoutContinued();
+
+ verify(mLifecycleManager).scheduleTransaction(any());
+ }
}
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..bc37496 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
@@ -42,13 +42,17 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.wm.DesktopModeBoundsCalculator.DESKTOP_MODE_INITIAL_BOUNDS_SCALE;
import static com.android.server.wm.DesktopModeBoundsCalculator.DESKTOP_MODE_LANDSCAPE_APP_PADDING;
+import static com.android.server.wm.DesktopModeBoundsCalculator.centerInScreen;
import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_DISPLAY;
import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE;
+import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_DONE;
import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP;
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;
@@ -58,6 +62,7 @@
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
+import android.util.Size;
import android.view.Gravity;
import androidx.test.filters.SmallTest;
@@ -98,7 +103,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 +143,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();
@@ -1021,6 +1102,110 @@
}
@Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX})
+ public void testOptionsBoundsSet_flexibleLaunchSize_windowingModeSet() {
+ setupDesktopModeLaunchParamsModifier();
+
+ final TestDisplayContent display = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
+ final Task task = new TaskBuilder(mSupervisor).setActivityType(
+ ACTIVITY_TYPE_STANDARD).setDisplay(display).build();
+ final ActivityOptions options = ActivityOptions.makeBasic()
+ .setLaunchBounds(new Rect(
+ DISPLAY_STABLE_BOUNDS.left,
+ DISPLAY_STABLE_BOUNDS.top,
+ /* right = */ 500,
+ /* bottom = */ 500))
+ .setFlexibleLaunchSize(true);
+ options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM);
+
+ assertEquals(RESULT_DONE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode);
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX})
+ public void testOptionsBoundsSet_flexibleLaunchSize_boundsSizeModified() {
+ setupDesktopModeLaunchParamsModifier();
+
+ final TestDisplayContent display = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
+ final Task task = new TaskBuilder(mSupervisor).setActivityType(
+ ACTIVITY_TYPE_STANDARD).setDisplay(display).build();
+ final ActivityOptions options = ActivityOptions.makeBasic()
+ .setLaunchBounds(new Rect(
+ DISPLAY_STABLE_BOUNDS.left,
+ DISPLAY_STABLE_BOUNDS.top,
+ /* right = */ 500,
+ /* bottom = */ 500))
+ .setFlexibleLaunchSize(true);
+ final int modifiedWidth =
+ (int) (DISPLAY_BOUNDS.width() * DESKTOP_MODE_INITIAL_BOUNDS_SCALE);
+ final int modifiedHeight =
+ (int) (DISPLAY_BOUNDS.height() * DESKTOP_MODE_INITIAL_BOUNDS_SCALE);
+
+ assertEquals(RESULT_DONE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ assertEquals(modifiedWidth, mResult.mBounds.width());
+ assertEquals(modifiedHeight, mResult.mBounds.height());
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX})
+ public void testOptionsBoundsSet_flexibleLaunchSizeWithCascading_cornerCascadeRespected() {
+ setupDesktopModeLaunchParamsModifier();
+
+ final TestDisplayContent display = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
+ final Task task = new TaskBuilder(mSupervisor).setActivityType(
+ ACTIVITY_TYPE_STANDARD).setDisplay(display).build();
+ // Set launch bounds with corner cascade.
+ final ActivityOptions options = ActivityOptions.makeBasic()
+ .setLaunchBounds(new Rect(
+ DISPLAY_STABLE_BOUNDS.left,
+ DISPLAY_STABLE_BOUNDS.top,
+ /* right = */ 500,
+ /* bottom = */ 500))
+ .setFlexibleLaunchSize(true);
+
+ assertEquals(RESULT_DONE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ assertEquals(DISPLAY_STABLE_BOUNDS.left, mResult.mBounds.left);
+ assertEquals(DISPLAY_STABLE_BOUNDS.top, mResult.mBounds.top);
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
+ Flags.FLAG_ENABLE_SHELL_INITIAL_BOUNDS_REGRESSION_BUG_FIX})
+ public void testOptionsBoundsSet_flexibleLaunchSize_centerCascadeRespected() {
+ setupDesktopModeLaunchParamsModifier();
+
+ final TestDisplayContent display = createNewDisplayContent(WINDOWING_MODE_FULLSCREEN);
+ final Task task = new TaskBuilder(mSupervisor).setActivityType(
+ ACTIVITY_TYPE_STANDARD).setDisplay(display).build();
+ // Set launch bounds with center cascade.
+ final ActivityOptions options = ActivityOptions.makeBasic()
+ .setLaunchBounds(new Rect(
+ /* left = */ 320,
+ /* top = */ 100,
+ /* right = */ 640,
+ /* bottom = */ 200))
+ .setFlexibleLaunchSize(true);
+ final int modifiedWidth =
+ (int) (DISPLAY_BOUNDS.width() * DESKTOP_MODE_INITIAL_BOUNDS_SCALE);
+ final int modifiedHeight =
+ (int) (DISPLAY_BOUNDS.height() * DESKTOP_MODE_INITIAL_BOUNDS_SCALE);
+ final Rect centerCascadedBounds = centerInScreen(
+ new Size(modifiedWidth, modifiedHeight), DISPLAY_STABLE_BOUNDS);
+
+ assertEquals(RESULT_DONE,
+ new CalculateRequestBuilder().setTask(task).setOptions(options).calculate());
+ assertEquals(centerCascadedBounds, mResult.mBounds);
+ assertEquals(centerCascadedBounds.top, mResult.mBounds.top);
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
public void testNonEmptyLayoutBounds_CenterToDisplay() {
setupDesktopModeLaunchParamsModifier();
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
index d228970..9dc7026 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
@@ -24,7 +24,6 @@
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
@@ -295,7 +294,7 @@
@Test
public void testCachedStateConfigurationChange() throws RemoteException {
- doNothing().when(mClientLifecycleManager).scheduleTransactionItemNow(any(), any());
+ doReturn(true).when(mClientLifecycleManager).scheduleTransactionItemNow(any(), any());
final IApplicationThread thread = mWpc.getThread();
final Configuration newConfig = new Configuration(mWpc.getConfiguration());
newConfig.densityDpi += 100;
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/tests/AppJankTest/src/android/app/jank/tests/JankTrackerTest.java b/tests/AppJankTest/src/android/app/jank/tests/JankTrackerTest.java
index 1bdf019..9d87fbd 100644
--- a/tests/AppJankTest/src/android/app/jank/tests/JankTrackerTest.java
+++ b/tests/AppJankTest/src/android/app/jank/tests/JankTrackerTest.java
@@ -18,10 +18,12 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import android.app.jank.Flags;
import android.app.jank.JankTracker;
import android.app.jank.StateTracker;
+import android.content.Context;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -55,10 +57,9 @@
* Start an empty activity so decore view is not null when creating the JankTracker instance.
*/
private static ActivityScenario<EmptyActivity> sEmptyActivityRule;
-
private static String sActivityName;
-
private static View sActivityDecorView;
+ private static Context sContext;
@BeforeClass
public static void classSetup() {
@@ -66,6 +67,7 @@
sEmptyActivityRule.onActivity(activity -> {
sActivityDecorView = activity.getWindow().getDecorView();
sActivityName = activity.toString();
+ sContext = activity.getApplicationContext();
});
}
@@ -168,4 +170,14 @@
assertNotNull(jankTracker);
}
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_DETAILED_APP_JANK_METRICS_API)
+ public void jankTracker_IsNull_WhenViewNotInHierarchy() {
+ TestWidget testWidget = new TestWidget(sContext);
+ JankTracker jankTracker = testWidget.getJankTracker();
+
+ assertNull(jankTracker);
+ }
+
}
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/tests/vcn/java/com/android/server/VcnManagementServiceTest.java b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
index a97f9a8..3cccbc4 100644
--- a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
+++ b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
@@ -41,6 +41,7 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -1088,6 +1089,10 @@
@Test
public void testGetRestrictedTransportsFromCarrierConfig() {
+ assumeTrue(
+ "Configuring restricted transport types is only allowed on a debuggable build",
+ Build.isDebuggable());
+
final Set<Integer> restrictedTransports = new ArraySet<>();
restrictedTransports.add(TRANSPORT_CELLULAR);
restrictedTransports.add(TRANSPORT_WIFI);
@@ -1109,6 +1114,10 @@
@Test
public void testGetRestrictedTransportsFromCarrierConfig_noRestrictPolicyConfigured() {
+ assumeTrue(
+ "Configuring restricted transport types is only allowed on a debuggable build",
+ Build.isDebuggable());
+
final Set<Integer> restrictedTransports = Collections.singleton(TRANSPORT_WIFI);
final PersistableBundleWrapper carrierConfig =
@@ -1123,6 +1132,10 @@
@Test
public void testGetRestrictedTransportsFromCarrierConfig_noCarrierConfig() {
+ assumeTrue(
+ "Configuring restricted transport types is only allowed on a debuggable build",
+ Build.isDebuggable());
+
final Set<Integer> restrictedTransports = Collections.singleton(TRANSPORT_WIFI);
final TelephonySubscriptionSnapshot lastSnapshot =
@@ -1134,6 +1147,10 @@
@Test
public void testGetRestrictedTransportsFromCarrierConfigAndVcnConfig() {
+ assumeTrue(
+ "Configuring restricted transport types is only allowed on a debuggable build",
+ Build.isDebuggable());
+
// Configure restricted transport in CarrierConfig
final Set<Integer> restrictedTransportInCarrierConfig =
Collections.singleton(TRANSPORT_WIFI);
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/codegen/OWNERS b/tools/codegen/OWNERS
index c9bd260..e69de29 100644
--- a/tools/codegen/OWNERS
+++ b/tools/codegen/OWNERS
@@ -1 +0,0 @@
-chiuwinson@google.com
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/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